Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Evolución de los lenguajes de programación ¿Por qué cambiarse a la Programación Orientada a Objetos? (página 2)



Partes: 1, 2

2.1.2. Lenguaje
Ensamblador

Son una representación más entendible para
el humano de los códigos del lenguaje máquina. Cada
instrucción en lenguaje
ensamblador representa una instrucción en el lenguaje
máquina [6]. El lenguaje ensamblador
aparece casi a la par con el lenguaje máquina, esto debido
a que los fabricantes de hardware diseñan sus
Chips pensando ya en las instrucciones de un lenguaje de
ensamblado.

Un ejemplo de una instrucción en lenguaje
máquina y en lenguaje ensamblador:

Tabla 1: Ejemplo de Lenguaje Máquina
vs. Lenguaje Ensamblador

Lenguaje Máquina

Lenguaje Ensamblador

0010111000000001

0000000000001010

mov ax, 10

A pesar de que el lenguaje ensamblador es más
fácil de entender por las personas sigue teniendo las
desventajas del lenguaje de máquina. Realmente lo que hace
es ayudar un poco a que el código
sea más legible. El lenguaje ensamblador adicionalmente
necesita un traductor (ensamblador) capaz de convertir dichos
códigos en lenguaje máquina [1].

Ejemplos de ensambladores: TASM (Turbo Assembler de
Borland), MASM (Microsoft
Macro Assembler), NASM (Netwide Assembler – Libre).

2.2. Lenguajes de Alto nivel

Son lenguajes más afines con el programador en
los que una instrucción puede representar varias
instrucciones en lenguaje máquina. Incluyen los lenguajes
estructurados y no estructurados. Como ejemplos tenemos: Basic,
Pascal, C,
APL, FORTRAN (Aplicaciones Científicas) [7], COBOL (para
aplicaciones de procesamiento de
datos), LISP Y PROLOG (para Inteligencia
Artificial), etc.

Los lenguajes de alto nivel necesitan de un traductor
que puede ser interpretador o compilador. Los interpretadores o
intérpretes, necesitan de un programa auxiliar
que traduce en tiempo real
las instrucciones al lenguaje máquina, por lo tanto, cada
vez que un programa interpretado se ejecuta debe ejecutarse
también su interprete. Ejemplos de lenguajes interpretados
[7]: Basic, PROLOG, LISP, entre otros.

Los lenguajes compilados son aquellos que necesitan de
un compilador para la traducción al lenguaje máquina. La
traducción o compilación se hace solo una vez, y el
resultado es un código objeto entendible por la
máquina. Para ejecutar un programa compilado no se
necesita de su compilador. Ejemplos de lenguajes compilados:
Pascal, C, Fortran, Cobol, Modula-2 (evolución del Pascal), etc.

Algunas de las características de los lenguajes
de alto nivel [1]:

  • Depuración más sencilla: Debido a que
    el código es más legible, la depuración
    también se hace más fácil. Con la ayuda
    editores (IDEs – Entornos de Desarrollo
    Integrados) la compilación, depuración y
    ejecución se hacen más
    fácilmente.
  • Productividad aceptable: son más productivos
    que los lenguajes de alto nivel.
  • Algunos permiten la Portabilidad: generalmente los
    interpretados.

Los lenguajes estructurados, existen controles que le
dan secuencia ordenada a la ejecución del código.
Dichos controles se implementan con estructuras
definidas que permiten bifurcaciones condicionadas o ciclos
repetitivos. Los lenguajes estructurados hacen que el programador
desarrolle sus algoritmos
disciplinadamente.

Una rama de los lenguajes de alto nivel son los
lenguajes procedurales, donde la unidad funcional es el procedimiento.
Los procedimientos
implementan la lógica
de caja negra donde existen unas entradas y unas salidas y al
programador que usa el procedimiento no le interesa su
funcionamiento interno sino su funcionalidad.

Java y los lenguajes .Net de Microsoft también
forman parte de los lenguajes de alto nivel, pero para
éste articulo es más importante su
clasificación dentro de los lenguajes Orientados a
Objetos.

2.3. Generaciones de los lenguajes de
programación

La evolución de los lenguajes de
programación es vista también desde el punto de
vista de las generaciones. Los lenguajes de primera
generación son los mismos lenguajes del nivel de la
máquina. Los lenguajes de segunda generación son
los ensambladores. Y Los lenguajes de tercera generación
son los nombrados en los lenguajes de alto nivel [8].

Una cuarta generación de lenguajes de programación es aun confusa por definir,
algunos autores la relacionan con lenguajes visuales con
facilidades para acceso a bases de datos
que aparecieron para desarrollar bajo la plataforma Windows [9].
Entre ellos encontramos los lenguajes del Visual Studio de
Microsoft (como Visual Basic,
Visual FoxPro,
Visual C++);
las herramientas
de Borlad (Delphi,
JBilder, C++ Builder); entre otros. Otros autores incluyen
específicamente los lenguajes Orientados a Objetos
[8].

También se pueden incluir en ésta
generación, las herramientas que generan el código
a partir de plantillas y configuraciones [10], lenguajes de
consulta como SQL [10], los
lenguajes script (JavaScript,
VBScript) y los lenguajes de marcado (HTML, XML).

  1. Lenguajes Orientados a Objetos

La Programación
Orientada a Objetos (POO) no es algo nuevo, pues existe desde
los años 60 con lenguajes como Smaltalk, Simula y Ada. Se
ha hecho más popular en los últimos 10 años
con la aparición de Java y C# [1]. La
POO es una extensión de los lenguajes de alto nivel
estructurados que trata de representar de una forma más
sencilla el modelo del
mundo real.

La POO intenta resolver principalmente los problemas de
la Ingeniería del Software como: portabilidad,
reusabilidad, mantenibilidad, entre otros [11]. Para ello se base
en características claves como el encapsulamiento, la
herencia, el
polimorfismo, y el desarrollo orientado primero hacia el
qué, y luego hacia el cómo (interfaces).

El elemento principal de la POO es la Clase, la cual
representa abstractamente un elemento del mundo real o una unidad
que agrupa propiedades y funcionalidades comunes. Una instancia
de una clase es un Objeto el cual tiene atributos y métodos.
Los métodos modifican los atributos o prestan algún
servicio a
otros objetos.

La POO debe estar acompañada de un buen diseño
que logre una alta cohesión y un bajo acoplamiento, para
así poder
solucionar los problemas objetivos.

3. Programación Orientada a
Objetos

En la Programación Procedural la unidad
básica es el procedimiento, el cual se comporta como una
caja negra puede recibir unos parámetros de entrada, los
procesa y puede devolver datos de salida
[1].

En un programa con procedimientos los datos pueden ser
comunes o globales a todos ellos, y no existe un control
más detallado de ellos, o no existe una entidad encargada
de su ciclo de vida.
No existen formas de esconder funcionalidades ni de controlar
accesos.

En la Programación Orientada a Objetos la
unidad básica es el objeto. Un objeto tiene atributos y
métodos que le dan comportamiento. Cada objeto controla sus propios
datos y se comunica con otros objetos a través de sus
métodos (mensajes). Los objetos encapsulan su
funcionamiento mostrando a otros objetos sólo lo
necesario.

Algunos conceptos de la POO son muy importantes y se
deben tener claros en todo momento. Si no se tienen claros los
conceptos, posiblemente nunca se puedan desarrollar verdaderos
programas
Orientados a Objetos. Los objetos derivan o son instancias de una
clase, por lo tanto, tanto el objeto como la clase forman parte
de la unidad funcional de la POO. Los siguientes son los
elementos más importantes de la POO:

  • Herencia: es una propiedad
    esencial que permite crear clases a partir de otras existentes.
    [13] Permite organizar los elementos u objetos de forma
    jerárquica. Se basa principalmente en que un objeto hijo
    puede heredar las características y comportamientos de
    otro objeto padre. La herencia es la base principal de la
    reutilización.
  • Polimorfismo: se refiere a clases con nombres y
    métodos iguales pero con comportamientos diferentes. Una
    de la forma de implementarlo es mediante clases abstractas.
    Éstas son clases que definen los métodos pero no
    implementan su funcionalidad, y dicha funcionalidad puede ser
    implementada por cualquier otra clase que la herede.
    Así, se define un marco, y pueden existir muchas
    implementaciones diferentes.
  • Contratos de servicios:
    las interfaces son una de las herramientas más potentes
    en la POO. Para los desarrolladores que recién se
    inician en la POO ver el poder de la interfaces es muy
    difícil. Su funcionalidad es muy parecida a la del
    polimorfismo basado en clases abstractas, se trata de definir
    solo los métodos que una clase debería de
    implementar. Así, de una misma Interface pueden existir
    muchas implementaciones diferentes.

El cambio de lo
procedural a lo POO es un poco difícil al principio. A
pesar de que la POO es más natural, requiere de cierto
tiempo para poder acostumbrarse y usarla correctamente, los
resultados no son inmediatos [13]. Las buenas prácticas se
logran con la experiencia.

Para iniciarse en la POO es recomendable comenzar con un
lenguaje que exija una fuerte estructuración OO. Lenguajes
como Java y C# son buenos ejemplos. En ellos, hasta el más
mínimo programa es una clase, y la documentación se basa interfaces y
herencias, por lo que es necesario tener claros esos conceptos.
Además es recomendable tener un buen editor que muestre
los errores en tiempo de codificación y que ayude también
autocompletando código para saber si lo que se esta
escribiendo es correcto.

Otro punto clave para tener en cuenta al iniciar, son
los métodos estáticos de las clases. Para poder
usar una clase normalmente es necesario instanciarla en un
objeto. En términos más técnicos, lo que se
crea es un espacio en memoria que puede
albergar la estructura del
objeto, y la variable en la que se instancia la clase, es un
puntero a ese espacio de memoria. Algunas clases tienen
métodos que se pueden invocar sin necesidad de
instanciarlas, éstos métodos se conocen como
métodos estáticos y generalmente son
transformaciones sobre sus parámetros y realizan
procedimientos que no modifican los atributos de la
clase.

Ejemplo de instanciación en lenguaje
Java:

String cadena = new String("Hola
Mundo");

En el ejemplo anterior se crea una nueva instancia
(objeto) de la clase String de Java. "cadena" guarda ahora una
referencia a un objeto de tipo String.

Lo de los métodos estáticos es clave
porque generalmente uno se encuentra con instrucciones comunes
como: System.out.println("Hola mundo"); -> Imprime un texto en la
salida por defecto. Y se pregunta, pero si todo son clases, a
qué horas se hizo new System()…?. En el ejemplo,
println es un método
estático de la clase PrintStream, out es un
atributo estático de tipo PrintStream que pertenece a la
clase System. Por lo tanto, por ser out un atributo
estático y println un método estático
se puede invocar éste último sin necesidad de
instanciar System. En Java, la definición del atributo
out de la clase System sería:

public class System{

public static PrintStream out = new
PrintStream(…);

}

Y la definición del método println en
PrintStream sería algo así:

public class PrintStream extends FileOutputStream
{

public static void println(String toOut){ …
}

}

En el ejemplo anterior public static void println
(String arg) puede ser solo una de las sobrecargas del
método println(). La sobrecarga es otra de las
características de la POO y consiste en que un
método de una clase puede implementarse varias veces, pero
con diferentes parámetros cada vez. Podría existir
otro método println (de hecho existen) que en lugar
de recibir un String como parámetro recibiera un Long
(clase que representa un tipo de dato numérico grande) e
imprimiese el número.

En el ejemplo del println también existe
una instanciación implícita de una cadena con el
uso de las comillas " ", eso es ayuda de Java para no tener que
hacer: System.out.println(new String("Hola Mundo")).

4.
Internet y los
nuevos requerimientos del software

La aparición de Internet cambió el foco de
los sistemas
informáticos. Industrialmente, son pocas las aplicaciones
desktop (de escritorio) que se desarrollan, a menos que se
requieran específicamente. Los negocios de
una empresa
dependen de datos que casi nunca están centralizados, y se
necesita que esos datos puedan ser consultados y manipulados por
clientes internos
y externos vía un navegador de Internet.

El párrafo
anterior encierra muchas cosas nuevas para los desarrolladores.
Aparecen Requerimientos No funcionales (RNF) del Software que no
tienen nada que ver con el proceso de
negocio de la empresa sino
con limitaciones e imposiciones externas. Saltan a la vista
requerimientos como el control de la seguridad, la
escalabilidad de la aplicación, alta disponibilidad,
interoperatibilidad, etc. [12]

  • Seguridad: Autenticación (que el cliente sea
    quien dice ser), autorización (que el cliente tenga los
    permisos para ejecutar tareas específicas – roles),
    datos seguros en la
    red (que los
    datos puedan viajar seguros por la red –
    SSL).
  • La escalabilidad tiene que ver con que la
    aplicación mantenga su rendimiento y tiempos de
    respuesta aun cuando el número de clientes conectados
    crece.
  • La alta disponibilidad hace referencia al tiempo que
    una aplicación puede estar fuera de servicio.
    Generalmente, una aplicación nunca debería
    caerse.
  • La interoperatibilidad permite que la
    aplicación se comunique con otras aplicaciones usando
    protocolos
    estándares como SOAP.

Los anteriores son algunos de los ejemplos de las nuevas
tareas de las que tendría que ocuparse un desarrollador en
la actualidad. Por suerte, plataformas de desarrollo como el .Net
Framework, o contenedores de aplicaciones J2EE, ayudan a
solucionar gran parte de éstos problemas.

En cuanto a modelos de
componentes y arquitecturas de aplicaciones empresariales, .Net
de Microsoft y J2EE de Sun Microsystems, son los competidores
más fuertes en la actualidad. Y el punto clave
aquí, es que tanto los lenguajes del Visual Studio .Net
como Java son Orientados a Objetos, lo que hace pensar que la
orientación a Objetos es realmente la mejor opción
para desarrollar aplicaciones empresariales de gran escala.

5.
Conclusiones

  • Los lenguajes de programación han evolucionado
    para poder representar mejor los problemas del mundo real y
    hacer las cosas más fáciles para los
    diseñadores y desarrolladores de software.
  • Dado que las arquitecturas empresariales implantadas
    para solucionar los problemas de la ingeniería del
    software en la actualidad están pensadas para trabajar
    con lenguajes Orientados a Objetos, es indispensable que todo
    desarrollador conozca y se familiarice con la POO.
  • Iniciar en la POO puede ser algo complicado al
    principio, lo ideal es tener las definiciones y conceptos
    claros, y comenzar con un lenguaje netamente Orientado a
    Objetos (como Java o C#), además de un buen editor
    (Eclipse, IDE de Visual Studio).

6.
Referencias

  1. Microsoft .Net, Programción con C# Net,
    [Documento PDF] disponible en internet:


    http://ohm.utp.edu.co/gustavoa/res/Documentos/prog_estruct.doc

  2. G.A. Betancourt, Programación estructurada
    antes de programación orientada a objetos
    .
    [Documento Word]
    Disponible en internet:


    http://www.ilustrados.com/publicaciones/EpZVVllyAyovOwMHjf.php

  3. I.A. POOL, Lenguaje Ensamblador.
    [Página] Disponible en Internet:
  4. P. Norton y J. Socha. Nueva Guía del
    programador en ensamblador para IBM PC/XT/AT y
    compatibles
    .  Anaya Multimedia, S.A., - 1991.

    http://es.wikipedia.org/wiki/Lenguaje_m%C3%A1quina

  5. Wikipedia, Lenguaje máquina.
    [Página] disponible en Internet:

    http://es.wikipedia.org/wiki/Lenguaje_ensamblador

  6. Wikipedia, Lenguaje ensamblador. [Página]
    disponible en Internet:

    http://www.monografias.com/trabajos/tendprog/tendprog.shtml

  7. J. Mendez, Las tendencias de los lenguajes de
    programación
    . [Página] Disponible en
    Internet:

    http://es.wikipedia.org/wiki/Generaciones_de_lenguajes_de_programaci%C3%B3n

  8. Wikipedia, Generaciones de los lenguajes de
    programación
    . [Página] disponible en
    Internet:

    http://www.monografias.com/trabajos26/lenguajes-programacion/lenguajes-programacion.shtml#estand

  9. L. Guzman, Lenguajes de Programación.
    [Página] Disponible en Internet:

    http://www3.uji.es/~mmarques/f47/apun/node37.html

  10. M.M. Marqués, Lenguajes de cuarta
    generación
    . Disponible en Internet:

    /trabajos/objetos/objetos.shtml

  11. Lucas, Programación Orientada a
    Objetos
    . [Página] Disponible en
    Internet:
  12. J. Arias. Arquitectura de Software: Conceptos y
    Definiciones
    . Presentación de la clase Arquitectura de
    Software. Universidad
    de los Andes, Bogotá – Colombia
    2006.
  13. A. Franco, Programación en lenguaje
    Java
    [Sitio Web],
    Disponible en Internet:

http://www.sc.ehu.es/sbweb/fisica/cursoJava/Intro.htm

Nota: Todas las referencias a Internet se consultaron en
la fecha: 26/Sep/2006

 

Gerson Johan Samaniego
Rodríguez

Universidad de los Andes

Maestría en Ingeniería de
Sistemas

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter