Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modelo Orientado A Objetos - Aspectos Conceptuales
Modelo Orientado A Objetos - Aspectos Conceptuales
ASPECTOS
CONCEPTUALES DEL
MODELO OO
LUIS ERNESTO
RUBIO TORRES
OCTUBRE 2018
Aplicación
Una aplicación (software) conforma una solución a un problema de alguna área de actividad
humana (por ejemplo: la industria automotriz, la petroquímica, instituciones de gobierno,
educativas, de salud, financieras, de manufactura, de entretenimiento; en fin negocios de todo
tamaño, que producen bienes y/o proporcionan servicios), en donde múltiples instancias, ya sean
personas, máquinas, leyes, documentos, dependencias, etc., se aglutinan para llevar a cabo la
multitud de tareas, operaciones y/o procesos.
En donde al hacer tres veces clic sobre el botón “Oprímeme” aparecerán uno a uno los siguientes
mensajes:
Obsérvese que los datos del tercer personaje combinan las características ojos y cabello de los
padres.
Objetos
En el contexto de las aplicaciones, un objeto es una unidad en memoria que almacena información
y es capaz de efectuar operaciones; al cual se le asigna una misión dentro del sistema.
La aplicación crea inicialmente dos objetos, que utiliza para combinar sus atributos y con ello,
generar un tercer objeto. El método concebir es el responsable de la creación del tercer objeto y de
la asignación de los valores de sus atributos, a partir de los propios de los primeros dos objetos.
Referencias
Puede decirse que una referencia es el nombre a través del cual se manipulan y controlan los
objetos. Un mismo objeto puede ser controlado a partir de múltiples y distintas referencias, en
diferentes partes de una aplicación. Así, las referencias permiten comunicarse con los objetos.
Internamente un referencia es una variable que almacena la dirección (también llamada handle –
manija) de un objeto. Las variables referencia deben ser definidas por el programador, aunque
algunas son generadas automáticamente como en el caso de la referencia this, que indica a que
objeto está enlazado un cierto proceso.
En lenguajes de programación como Java, las variables referencia se definen de forma semejante
a las variables que almacenan datos de tipo entero o caracter, siendo el tipo de definición, la clase
del objeto al cual se va referir (o nombrar), como por ejemplo:
int contador; // define la variable contador de tipo entero para almacenar números enteros.
double saldo; // define la variable saldo de tipo double para almacenar números decimales.
Window forma; // define la referencia forma de clase Window para referir a objetos ventana.
CuentaBancaria miCuenta; // define la referencia miCuenta de clase CuentaBancaria
// para almacenar la dirección de objetos cuenta de banco.
El operador new devuelve la dirección de inicio de un objeto de alguna clase cuando lo reserva y
configura en la memoria, como en la sentencia:
Las variables referencia como padre, madre, hija permiten nombrar a los objetos dentro de la
aplicación. Dichas referencias contienen la dirección de cada objeto en memoria.
En donde las primeras dos instrucciones, mediante el operador new se generan los dos primeros
objetos de la clase Humano. El operador new devuelve la dirección de inicio de cada objeto y la
almacena en la referencia, padre o madre según corresponda.
Como puede observarse en la figura previa, puede haber más de una referencia apuntando a un
mismo objeto, por ejemplo el objeto referido como madre es también referido por la variable
referencia this, generada en el método concebir. Ambas referencias madre y this, contienen la
dirección @54621, madre indica que la progenitora es el objeto que contiene el nombre de “Selena
Kyle” de cabello rubio y ojos azules, y this que “este” es el objeto responsable de concebir.
De forma semejante, en el sistema el objeto referido por la referencia padre, es también referido por
la referencia conyuge del método concebir del objeto madre, y lo mismo sucede con las referencias
nuevoSer e hija.
La API Java provee los medios para generar componentes (objetos reutilizables) para ensamblar
aplicaciones.
Inicialmente se identifican los elementos de la ventana de la aplicación, los cuales pueden ser
componentes, contenedores y gestores de formato, a partir de referencias:
Contenedores:
• ventana.- referencia al objeto de la clase Frame etiquetado como “Programa Génesis”
• tablero.- referencia al objeto de la clase Panel etiquetado como “Salir” ubicado en la zona oeste de ventana
Componentes:
• controlPersonas.- referencia al objeto de la clase Button etiquetado como “Oprímeme”
• controlSalida.- referencia al objeto de la clase Button etiquetado como “Salir”
• escritorio.- referencia al objeto de la clase TexArea ubicado en la zona oeste de ventana
Gestores de formato:
• formato.- referencia al objeto de la clase BorderLayout asociado a ventana,
De lo anterior, bien puede considerarse que la programación de una aplicación bajo el enfoque
orientado a objetos guarda grandes semejanzas con la ingeniería y la arquitectura de hoy en día,
disciplinas en las cuales también se hace uso de componentes reutilizables para construir ya no
aplicaciones, sino obras y edificaciones.
Una aplicación como una edificación requiere tanto del uso de componentes reutilizables como de
objetos desarrollados exprofeso.
Esta particular forma de escribir las sentencias revolucionó la industria del software, pues ya no era
sólo la computadora quien efectuaba las órdenes para llevar a cabo la tarea, ahora se contaba con
multitud de objetos individuales, en la misma computadora, coordinados de forma tal, que cada
uno realiza su propio conjunto de órdenes interactuando de forma interdependiente para llevar a
cabo la tarea.
En el modelo OO, en una aplicación, una multitud de objetos individuales interactúan para llevar a
cabo las tareas correspondientes…
El modelo orientado a objetos produjo un cambio radical en la “lógica de programación”, pues antes
“sólo era el programador y la computadora”, “el artesano aislado y su obra”; mientras que ahora en
orientación a objetos “se trata del programador y los objetos en la computadora”, “el director y sus
obreros en la industria”. El programador dejó de dar instrucciones a la computadora para conseguir
un resultado, para ahora coordinar la interacción entre diversos objetos enlazados en base a sus
características y comportamiento para conseguir los resultados deseados.
Los objetos empleados en la construcción de una aplicación pueden ser de la autoría del
programador de la misma, o bien pueden ser objetos desarrollados por otros programadores
integrados a la aplicación. De modo que más que nunca el programador debe saber trabajar y
hacer trabajar en equipo.
Clases
Una clase es el equivalente a un plano arquitectónico o instructivo de ensamble a partir del cual
una computadora produce los objetos.
Puede pensarse que una Clase, es un molde o plantilla a partir de la cual la computadora crea
múltiples instancias (los objetos), en dichas clases se declara la configuración (tipos de dato) de
las variables miembro que almacenarán los valores de las características o atributos de los
objetos; valores que en su conjunto determinan el estado de un objeto particular, en un cierto
instante de la ejecución de una aplicación.
También es en las Clases, en donde se incluyen los algoritmos o procedimientos que determinarán
el comportamiento de los objetos de una clase; estos algoritmos se codifican en las funciones
miembro (métodos), en donde, se declaran la configuración (tipo) de las variables argumento de
entrada de datos, se programan las instrucciones y se determina la forma del resultado (tipo de
retorno) del proceso efectuado.
Cada uno de los objetos del Programa Génesis se obtiene a partir de la clase Humano, la cual se representa a
continuación en UML:
Este es el
nombre
de clase Aquí se
definen los
nombres de
atributos y
su tipo
Aquí se
describen las
acciones que Las acciones que puede
pueden efectuar un objeto
efectuar los pueden ser métodos o
constructores (cuando la
objetos de esta
acción se llama como la
clase clase y no tiene retorno)
código
aplicación
variable
atributo en el variable local en
objeto el primer
constructor
Enlaces y Asociaciones
La siguiente pantalla ilustra una aplicación elemental llamada TestInventores que emplea diversos
objetos de software, en donde al hacer clic sobre el botón etiquetado como Test se despliega
información sobre un inventor y sus respectivos inventos:
En una aplicación se enlazan los objetos, a fin de obtener datos e información de éstos, poder
realizar procesos y/o construir nuevos objetos.
unLector tiene unLibro para obtener datos históricos. elCiclista tiene suBicicleta para transportarse. miReloj
tiene muchas piezas para ensamblarse. archiAndrews tiene a bettyCooper como su novia.
Los Enlaces y Asociaciones son los medios para establecer relaciones entre objetos y clases del
tipo tiene. Un enlace es una conexión física entre objetos a tiempo de ejecución de una
aplicación. Por su parte una asociación se emplea al nivel de Clases para describir un grupo de
enlaces con estructura y semántica comunes. De ese modo, puede pensarse en una asociación
como un molde o plantilla a partir de la cual se obtienen múltiples enlaces. Así, un enlace, es una
instancia de una asociación.
Los siguientes diagramas ilustran las asociaciones entre clases y los enlaces entre objetos para el
programa TestInventores:
Asociaciones “a
uno” y “a muchos”
entre las clases
Invento e Inventor
Enlaces entre
objetos :Invento -
creador:Inventor
El siguiente diagrama de clases UML ilustra la clase Inventor con el atributo de enlace “a muchos”
inventos (un arreglo de objetos de la clase Invento referido como arregloInventos):
Un atributo de enlace es una propiedad de los enlaces de una asociación. Cuando las
asociaciones tienen atributos de enlace frecuentemente se modelan como clases (cada enlace
pasa a ser entonces, una instancia de tales clases), de modo que pueden poseer además de
atributos (de enlace), un nombre y métodos (del enlace). Todo atributo de enlace tiene un valor
para cada enlace.
Resulta útil modelar las asociaciones como clases cuando los enlaces pueden participar en
asociaciones con otros objetos o cuando están sometidos a operaciones. Las asociaciones
muchos-a-muchos proporcionan el caso de uso mas frecuente de los atributos de enlace, pues
tales atributos son, una propiedad particular del enlace y de ningún modo pueden asociarse
individualmente con alguno de los objetos relacionados.
Herencia
La generalización (herencia) es la relación entre una clase y una o más versiones refinadas de esa
misma clase. La que se está refinando se denomina superclase (clase base o clase padre) y cada
versión refinada se llama una subclase (clase derivada o clase hija).
Las asociaciones de herencia son transitivas a través de un número arbitrario de niveles. Una
instancia de una subclase, es simultáneamente una instancia de todas sus clases ancestro. El
estado de una instancia incluye un valor para cada uno de los atributos de todas sus clases
ancestro. Todo método aplicable a una clase ancestro podrá ser aplicado a una instancia suya.
Además una subclase añade a sus miembros heredados, sus propios atributos y métodos
específicos.
El programa TestAnimals codifica la jerarquía de herencia del siguiente diagrama de clases UML:
//Spider.java
public class Spider extends Animal {
public Spider() {
super(8);
}
Entre las principales necesidades de la industria de desarrollo de sistemas a gran escala, destaca
la de integración, estandarización y generalización de código, de la cual se desprende la
posibilidad de reutilización de software.
El lenguaje de programación Java ofrece una serie de mecanismos avanzados de sus clases para
lograr de una forma efectiva la integración y generalización de procesos, así como para promover
la estandarización y reutilización de código. Estos mecanismos incluyen a las Clases Abstractas, y
las Interfaces.
Las Clases Abstractas son superclases que declaran métodos que no tienen implementación (es
decir que carecen de instrucciones). A dichos métodos se les llama métodos abstractos y por
tanto las clases que los contienen se denominan Clases Abstractas. La implementación
(instrucciones) de los métodos abstractos se proporciona en las subclases de la clase abstracta.
La utilidad de las clases abstractas radica en que aprovecha el mecanismo de invocación virtual
de métodos para permitir la programación de métodos genéricos (esto es, permitir que una sola
llamada a un método sea empleado para cumplir adecuadamente las tareas de objetos de
múltiples subclases).
Una clase “implementa” una interface cuando define las instrucciones de todos y cada uno de los
métodos declarados por dicha interface. La misma interface puede ser implementada por múltiples
clases, mientras que a su vez, una clase puede implementar varias interfaces (a diferencia de la
herencia, pues cada clase únicamente puede extender a sólo una superclase).
Además de la clase Spider el programa TestAnimals incluye las siguientes piezas de código OO:
//Animal.java
public abstract class Animal {
protected int legs;
//Pet.java
public interface Pet {
public void setName(String name);
public String getName();
public void play();
}
//Cat.java
public class Cat extends Animal implements Pet {
private String name;
// TestAnimals.java
public class TestAnimals {
public static void main(String[] args) {
Fish f = new Fish();
Cat c = new Cat("Fluffy");
Animal a = new Fish();
Animal e = new Spider();
Pet p = new Cat();
// Demonstrate different implementations of an interface
f.play();
c.play();