Sunteți pe pagina 1din 9

PARADIGMA DE LA ORIENTACION A OBJETO

Los lenguajes de programación proporcionan mecanismos para implementar una filosofía o


paradigma de programación. Un paradigma es una forma de entender y representar la
realidad: un conjunto de teorías, estándares y métodos que, juntos, representan un modo de
organizar el pensamiento, es decir, un modo de ver el mundo.

El Paradigma de Programación Orientado a Objetos es una técnica de programación que usa


objetos y sus interacciones para diseñar aplicaciones y buenos programas de computadora.
Este paradigma proporciona una forma particular de programar, más cercana a la manera de
como expresamos las cosas en la vida real.

En la programación orientada a objetos tenemos que diseñar nuestros programas en términos


de objetos, propiedades y métodos. Estos conforman los elementos principales de este
paradigma. La programación orientada a objetos expresa un programa como un conjunto de
estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas
y módulos más fáciles de escribir, mantener y reutilizar.

Objeto: En la programación orientada a objetos un programa se divide en componentes


que contienen procedimientos y datos. Cada componente se considera un objeto. En otras
palabras un objeto es una unidad que contiene datos y las funciones que operan sobre esos
datos.

Los objetos son entidades que combinan estado, comportamiento e identidad:

 El estado: está compuesto de datos, será uno o varios atributos a los que se habrán
asignado unos valores concretos (datos).
 El comportamiento: está definido por los procedimientos o métodos con que puede
operar dicho objeto, es decir, qué operaciones se pueden realizar con él.
 La identidad: es una propiedad de un objeto que lo diferencia del resto, dicho con
otras palabras, es su identificador (concepto análogo al de identificador de una
variable o una constante).

Atributo: Los datos que están contenidos dentro de un objeto se denominan atributos.
Podemos definirlos como las características o propiedades que posee un objeto.

Métodos: métodos en la programación orientada a objetos los constituyen las


operaciones o procedimientos que operan sobre los atributos de los objetos. De esta manera,
podemos decir que los datos y las funciones se encapsulan en una única entidad. Los datos
están ocultos y sólo mediante las funciones miembro es posible acceder a ellos.

Clase: Una Clase es una colección de objetos similares y un objeto es una particularización
de una definición de una clase. Una Clase es un tipo de dato definido por el usuario que
determina las estructuras de datos y las operaciones asociadas con ese tipo. Las clases son las
definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La
instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.
Cada vez que se construye un objeto de una clase, se crea una instancia de esa clase. En
general, los términos objetos e instancias de una clase se pueden utilizar indistintamente.
CARACTERISITICAS DE LA PROGRAMACION ORIENTADA A OBJETOS

 Abstracción: Denota las características esenciales de un objeto, donde se capturan sus


comportamientos. Cada objeto en el sistema sirve como modelo de un "agente"
abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse"
con otros objetos en el sistema sin revelar cómo se implementan estas características.
Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo
están, una variedad de técnicas son requeridas para ampliar una abstracción.
 Modularidad: Mediante la modularidad, se propone al programador dividir su
aplicación en varios módulos diferentes (ya sea en forma de clases, paquetes o
bibliotecas), cada uno de ellos con un sentido propio. Esta fragmentación disminuye el
grado de dificultad del problema al que da respuesta el programa, pues se afronta el
problema como un conjunto de problemas de menor dificultad, además de facilitar la
comprensión del programa.
 Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse
pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite
aumentar la cohesión de los componentes del sistema. Algunos autores confunden
este concepto con el principio de ocultación, principalmente porque se suelen emplear
conjuntamente.
 Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden
compartir el mismo nombre, al llamarlos por ese nombre se utilizará el
comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo,
las referencias y las colecciones de objetos pueden contener objetos de diferentes
tipos, y la invocación de un comportamiento en una referencia producirá el
comportamiento correcto para el tipo real del objeto referenciado. Cuando esto
ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o
asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en
"tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de
operadores de C++.
 Jerarquía: Las clases se relacionan entre sí mediante una jerarquía. Entre las clases se
establecen diferentes tipos de relaciones de herencia, en las cuales la clase hija
(subclase) hereda los atributos y métodos de la clase padre (superclase), además de
incorporar sus propios atributos y métodos.

 Herencia: las clases no están aisladas, sino que se relacionan entre sí,
formando una jerarquía de clasificación. Los objetos heredan las propiedades y
el comportamiento de todas las clases a las que pertenecen. La herencia
organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los
objetos ser definidos y creados como tipos especializados de objetos
preexistentes. Estos pueden compartir (y extender) su comportamiento sin
tener que volver a implementarlo. Esto suele hacerse habitualmente
agrupando los objetos en clases y estas en árboles o enrejados que reflejan un
comportamiento común. Cuando un objeto hereda de más de una clase se dice
que hay herencia múltiple.
ENTORNO DE DESARROLLO
El desarrollo de la OOP empieza a destacar durante la década de los 80 tomando en cuenta la
programación estructurada, a la que engloba y dotando al programador de nuevos elementos
para el análisis y desarrollo de software.

Básicamente la OOP permite a los programadores escribir software, de forma que esté
organizado en la misma manera que el problema que trata de modelizar. Los lenguajes de
programación convencionales son poco más que una lista de acciones a realizar sobre un
conjunto de datos en una determinada secuencia. Si en algún punto
del programa modificamos la estructura de los datos o la acción realizada sobre ellos, el
programa cambia.

La OOP aporta un enfoque nuevo, convirtiendo la estructura de datos en el centro sobre el que
pivotan las operaciones. De esta forma, cualquier modificación de la estructura de datos tiene
efecto inmediato sobre las acciones a realizar sobre ella, siendo esta una de las diferencias
radicales respecto a la programación estructurada.

La génesis de las ideas básicas de la POO se produce a principios de los años 60 y se atribuye al
trabajo del Dr. Nyggard y su equipo de la Universidad de Noruega. Estos investigadores se
dedicaban al desarrollo de sistemas informáticos para simular sistemas físicos, tales como el
funcionamiento de motores. La dificultad con la que se encontraban era doble: los programas
eran muy complejos y forzosamente tenían que ser muy modificables.

La solución que idearon fue diseñar el programa con una estructura paralela al del sistema
físico. Es decir, si el sistema físico estaba compuesto por cien componentes, el programa
también tenía cien módulos, uno por cada pieza. Partiendo el programa de esta manera, había
un total de correspondencia entre el sistema físico y el sistema informático, dado que cada
pieza tenia implementada su abstracción en un módulo informático y que los módulos se
comunicaban enviándose mensajes, de la misma forma que los sistemas físicos se comunican
enviándose señales. Para dar soporte a estas ideas crearon un lenguaje denominado Simula-
67.

Este enfoque resolvió los dos problemas planteados. En primer lugar, ofrecía una forma
natural de dividir un programa muy complejo en partes muy sencillas y, en segundo lugar, se
simplificaba considerablemente el mantenimiento de dicho programa, permitiendo al
investigador el cambio de piezas enteras, o la modificación del comportamiento de alguna de
ellas, sin tener que alterar el resto del programa.

En la década de los años 70, Alan Kay, de la Universidad de Utah, formo un grupo de
investigación junto con Adele Goldberg y Dan Ingalls de Xerxo (Palo Alto). Este grupo diseño un
entorno y un lenguaje de programación llamado Smalltalk, que incorporaba las ideas de la
orientación a objetos. En la década de los 80, Bjarne Stroustrup, de ATT-Bell, parte de Smalltalk
y Simula para diseñar el lenguaje C++, como sucesor del C. En el ámbito académico, Bertrand
Meyer (1991) crea el lenguaje Eiffel, reconocido como el mas completo y elegante de los
lenguajes orientados a objetos. Paralelamente, en el mundo de la inteligencia artificial se
desarrolla, entre otros, el lenguaje CLOS (common Lisp Object System), como variante
orientada a objetos del lenguaje Lisp.
Actualmente sin duda, uno de los lenguajes con mayor impacto en la industria de desarrollo de
software es el lenguaje Java, lenguaje de programación orientada a objetos desarrollado por
Sun Microsystems en 1995.

LENGUAJE DE PROGRAMACION JAVA


Java es un lenguaje de programación orientado a objetos que se popularizó a partir del
lanzamiento de su primera versión comercial de amplia difusión, la JDK 1.0 en 1996.

Es un lenguaje que evoluciona a partir de C y C++, pero que elimina diversos aspectos de estos
lenguajes y se constituye en un lenguaje definitivamente orientado a objetos. El romper con
distintos aspectos de C++ cuyo manejo inadecuado por parte de muchos programadores daba
lugar a problemas en las aplicaciones ha sido un factor decisivo para convertir a Java en un
lenguaje popular y de amplio uso. Actualmente es uno de los lenguajes más usados para la
programación en todo el mundo.

VERSIONES Y DISTRIBUCIONES DE JAVA

Java, como la mayoría de los lenguajes, ha sufrido cambios a lo largo de su historia. Además,
en cada momento han coexistido distintas versiones o distribuciones de Java con distintos
fines. Actualmente puede considerarse que el Java vigente se denomina Java 2 y existen 3
distribuciones principales de Java 2, con ciertos aspectos comunes y ciertos aspectos
divergentes.

Estas tres distribuciones son:

a)J2SE o simplemente Java SE: Java 2 Standard Edition o Java Standard Edition. Orientado al
desarrollo de aplicaciones cliente / servidor. No incluye soporte a tecnologías para internet. Es
la base para las otras distribuciones Java y es la plataforma que utilizaremos nosotros en este
curso por ser la más utilizada.

b) J2EE: Java 2 Enterprise Edition. Orientado a empresas y a la integración entre sistemas.


Incluye soporte a tecnologías para internet. Su base es J2SE.

c) J2ME: Java 2 Micro Edition. Orientado a pequeños dispositivos móviles (teléfonos, tabletas,
etc.).
En esta imagen vemos, de forma orientativa, como J2EE “expande” a J2SE, mientras que J2ME
“recorta” a J2SE al tiempo que tiene una fracción de contenido diferenciada exclusiva de J2ME.
En realidad hablar de expansiones y recortes no es correcto, porque cada distribución es en sí
misma distinta puesto que están concebidas con distintas finalidades. Por tanto no puede
decirse que sean expansiones o recortes, pero de forma coloquial muchas veces se interpreta
así.

Java hoy en día es más que un lenguaje de programación. El lenguaje Java estándar ha
experimentado numerosos cambios desde la versión primigenia, JDK 1.0, así como un enorme
incremento en el número de recursos disponibles para los programadores Java. Podemos citar
en la evolución del Java estándar:

· JDK 1.0 (1996): primer lanzamiento del lenguaje Java.

· JDK 1.1 (1997): mejora de la versión anterior.

· J2SE 1.2 (1998): ésta y las siguientes versiones fueron recogidas bajo la denominación Java 2
y el nombre "J2SE" (Java 2 Platform, Standard Edition), reemplazó a JDK para distinguir la
plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro
Edition). Incluyó distintas mejoras.

· J2SE 1.3 (2000): mejora de la versión anterior.

· J2SE 1.4 (2002): mejora de la versión anterior.

· J2SE 5.0 (2004): originalmente numerada 1.5, esta notación aún es usada en ocasiones.
Mejora de la versión anterior.

· Java SE 6 (2006): en esta versión, Sun cambió el nombre "J2SE" por Java SE y eliminó el ".0"
del número de versión. Mejora de la versión anterior.

· Java SE 7 (2011): nueva versión que mejora la anterior.

· Java SE 8 (2014): nueva versión que mejora la anterior. Incluye la posibilidad de embeber
JavaScript con Java y mejoras en la gestión de fechas y tiempo.

· Java SE 9: nueva versión que mejora la anterior (en difusión).

· Java SE 10: nueva versión que mejora la anterior (todavía sin uso comercial).

En Java todas las versiones siguen los mismos estándares de datos, esto permite que un
programa que hayamos hecho con una versión antigua, pueda ser ejecutado con una versión
más nueva sin necesidad de ningún cambio.

DIAGRAMA DE CLASES
Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el
sistema, las cuales pueden ser asociativas, de herencia, de uso y de contenimiento.

Un diagrama de clases está compuesto por los siguientes elementos:

Clase: atributos, métodos y visibilidad.

Relaciones: Herencia, Composición, Agregación, Asociación y Uso.


Elementos
Clase:
Es la unidad básica que encapsula toda la información de un Objeto (un objeto es una instancia
de una clase). A través de ella podemos modelar el entorno en estudio (una Casa, un Auto, una
Cuenta Corriente, etc.).

En UML(Lenguaje Modificado de Modelado), una clase es representada por un rectángulo que


posee tres divisiones:

En donde:

 Superior: Contiene el nombre de la Clase


 Intermedio: Contiene los atributos (o variables de instancia) que caracterizan a la Clase
(pueden ser private, protected o public).
 Inferior: Contiene los métodos u operaciones, los cuales son la forma como interactúa
el objeto con su entorno (dependiendo de la visibilidad: private, protected o public).

Ejemplo:

Una Cuenta Corriente que posee como característica:

 Balance

Puede realizar las operaciones de:

 Depositar
 Girar
 Balance

El diseño asociado es:


Atributos y Métodos:
Atributos:

Los atributos o características de una Clase pueden ser de tres tipos, los que definen el grado
de comunicación y visibilidad de ellos con el entorno, estos son:

 public : Indica que el atributo será visible tanto dentro como fuera de la clase, es decir,
es accesible desde todos lados.
 private : Indica que el atributo sólo será accesible desde dentro de la clase (sólo sus
métodos lo pueden accesar).
 protected : Indica que el atributo no será accesible desde fuera de la clase, pero si
podrá ser accesado por métodos de la clase además de las subclases que se deriven
(ver herencia).

Métodos:

Los métodos u operaciones de una clase son la forma en como ésta interactúa con su entorno,
éstos pueden tener las características:

 public : Indica que el método será visible tanto dentro como fuera de la clase, es decir,
es accesible desde todos lados.
 private : Indica que el método sólo será accesible desde dentro de la clase (sólo otros
métodos de la clase lo pueden accesar).
 protected : Indica que el método no será accesible desde fuera de la clase, pero si
podrá ser accesado por métodos de la clase además de métodos de las subclases que
se deriven (ver herencia).

Relaciones entre Clases:


Ahora ya definido el concepto de Clase, es necesario explicar cómo se pueden interrelacionar
dos o más clases (cada uno con características y objetivos diferentes).

Antes es necesario explicar el concepto de cardinalidad de relaciones: En UML, la cardinalidad


de las relaciones indica el grado y nivel de dependencia, se anotan en cada extremo de la
relación y éstas pueden ser:

 uno o muchos: 1..* (1..n)


 0 o muchos: 0..* (0..n)
 número fijo: m (m denota el número).

Herencia (Especialización/Generalización):

Indica que una subclase hereda los métodos y atributos especificados por una Super Clase, por
ende la Subclase además de poseer sus propios métodos y atributos, poseerá las
características y atributos visibles de la Super Clase (public y protected), ejemplo:
En la figura se especifica que Auto y Camión heredan de Vehículo, es decir, Auto posee las
Características de Vehículo (Precio, VelMax, etc) además posee algo particular que es
Descapotable, en cambio Camión también hereda las características de Vehículo (Precio,
VelMax, etc) pero posee como particularidad propia Acoplado, Tara y Carga.

Cabe destacar que fuera de este entorno, lo único "visible" es el método Características
aplicable a instancias de Vehículo, Auto y Camión, pues tiene definición pública, en cambio
atributos como Descapotable no son visibles por ser privados.

Agregación:

Para modelar objetos complejos, n bastan los tipos de datos básicos que proveen los
lenguajes: enteros, reales y secuencias de caracteres. Cuando se requiere componer objetos
que son instancias de clases definidas por el desarrollador de la aplicación, tenemos dos
posibilidades:

Por Valor: Es un tipo de relación estática, en donde el tiempo de vida del objeto incluido está
condicionado por el tiempo de vida del que lo incluye. Este tipo de relación es comúnmente
llamada Composición (el Objeto base se construye a partir del objeto incluido, es decir, es
"parte/todo").

Por Referencia: Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido
es independiente del que lo incluye. Este tipo de relación es comúnmente llamada
Agregación (el objeto base utiliza al incluido para su funcionamiento).

Un Ejemplo es el siguiente:
En donde se destaca que:

 Un Almacén posee Clientes y Cuentas (los rombos van en el objeto que posee las
referencias).
 Cuando se destruye el Objeto Almacén también son destruidos los objetos Cuenta
asociados, en cambio no son afectados los objetos Cliente asociados.
 La composición (por Valor) se destaca por un rombo relleno.
 La agregación (por Referencia) se destaca por un rombo transparente.

La flecha en este tipo de relación indica la navegabilidad del objeto referenciado. Cuando no
existe este tipo de particularidad la flecha se elimina.

Asociación:

La relación entre clases conocida como Asociación, permite asociar objetos que colaboran
entre si. Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un objeto
no depende del otro.

Ejemplo:

Un cliente puede tener asociadas muchas Órdenes de Compra, en cambio una orden de
compra solo puede tener asociado un cliente.

Dependencia o Instanciación (uso):

Representa un tipo de relación muy particular, en la que una clase es instanciada (su
instanciación es dependiente de otro objeto/clase). Se denota por una flecha punteada.

El uso más particular de este tipo de relación es para denotar la dependencia que tiene una
clase de otra, como por ejemplo una aplicación grafica que instancia una ventana (la creación
del Objeto Ventana está condicionado a la instanciación proveniente desde el objeto
Aplicación):

Cabe destacar que el objeto creado (en este caso la Ventana gráfica) no se almacena dentro
del objeto que lo crea (en este caso la Aplicación).

S-ar putea să vă placă și