Está en la página 1de 20

Problemas y Ejercicios Elementales de Modelado OO Hoja 1

ASPECTOS
CONCEPTUALES DEL
MODELO OO

LUIS ERNESTO
RUBIO TORRES

OCTUBRE 2018

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 2

Aspectos Conceptuales del Modelo OO

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.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 3

Bajo el enfoque orientado a objetos, un sistema (la aplicación) se construye a partir de la


interacción de un conjunto de elementos (los objetos) enlazados de tal forma, que proveen la
solución al problema.

Ejemplo: Programa Génesis – parte 1.

La aplicación siguiente, denominada “Programa Génesis” presenta en pantalla la siguiente


ventana (GUI – graphic user interface o interface gráfica de usuario):

En donde al hacer tres veces clic sobre el botón “Oprímeme” aparecerán uno a uno los siguientes
mensajes:

Padre de Nombre: Bruce Wayne Ojos: negros Cabello: castaño


Madre de Nombre: Selina Kyle Ojos: azules Cabello: rubio
Hija de Nombre: Helena Wayne Ojos: negros Cabello: rubio

Obsérvese que los datos del tercer personaje combinan las características ojos y cabello de los
padres.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 4

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.

Estos objetos, colocados individualmente en alguna de las direcciones de la memoria de trabajo


de un equipo de cómputo, a través de operadores especiales como new en Java, almacenan datos
(sus propiedades o atributos) en sus variables miembro, y llevan a cabo operaciones a partir de sus
métodos o funciones miembro asociadas.

El operador new reserva y configura a los objetos de alguna clase en la memoria.

Ejemplo: Programa Génesis – parte 2.

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.

Nota que todos los


diagramas de este
material, están
basados en el UML –
Lenguaje Unificado de
Modelado

El código en lenguaje Java responsable de la generación de estos objetos es el siguiente:

A dicho código se le denomina “código aplicación” o simplemente “la aplicación” porque es el


encargado de llevar específicamente a cabo la tarea del programa. En las dos primeras
instrucciones el operador new genera los dos primeros objetos de la clase Humano.

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.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 5

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:

miCuenta = new CuentaBancaria();

Ejemplo: Programa Génesis – parte 3.

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.

Dichas referencias fueron definidas a través del siguiente código:

Nota que el “código


aplicación” determina
la secuencia de cómo
el programa llevará a
cabo sus tareas

Posteriormente se escribieron las instrucciones:

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.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 6

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.

Ejemplo: Programa Génesis – parte 4.

Para construir – dibujar la GUI de la aplicación se utilizan componentes (objetos reutilizables)


obtenidos a partir del paquete AWT (abstract window toolkit – paquete de ventana abstracta) de la
librería estándar de Java (API: application programming interface – interfaz de programación de
aplicaciones) accesible a través de: https://docs.oracle.com/javase/8/docs/api/

La API Java provee los medios para generar componentes (objetos reutilizables) para ensamblar
aplicaciones.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 7

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,

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 8

Los objetos de software se Lo que sí es visible, son las imágenes


almacenan en la memoria por lo que que los objetos de software
no son visibles para el usuario… despliegan en la pantalla.

Estos no son objetos

Estos si son objetos


Estas son referencias a
objetos

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.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 9

Instrucciones más cercanas a la comunicación humana: nombreDeObjeto.accion();

A diferencia de la programación estructurada que consiste en establecer la serie lógica de órdenes


que se deben realizar para llegar a la solución buscada; la programación orientada a objetos
consiste en definir las interacciones entre los objetos que, en base a sus propiedades,
asociaciones y operaciones; instrumentarán la solución buscada.

De modo que mientras en el enfoque estructurado funcional el “elemento operativo” o instrucción


fundamental, era la accion(); o llamada a una función (un conjunto de instrucciones organizado
lógicamente para llevar a cabo una tarea (como printf(“File not found”); potencia(5,3); o scanf(“%d”,
&capital);), en programación orientada a objetos la sentencia o instrucción fundamental consiste
en referir a objeto en acción - una unidad en memoria capaz de ejecutar un conjunto de
operaciones: nombreDeObjeto.accion(); o simplemente referencia.accion(); (como sucede en
las instrucciones: miCuenta.retirar(1000.00); o windowOne.add.(exitButton);).

La notación accion(); resulta confusa e inapropiada en el mundo real. En cambio la notación


nombre.accion(); es precisa y no deja lugar a dudas… Además por convención se usa el estilo de escritura
“de las jorobas del camello” o “Camel Case” donde las palabras se separan por minúsculas y mayúsculas
alternadas (de modo que es válido escribir: archieAndrews.saluda(“Hola Mundo ¡!”);
betty.Cooper.estudia(“Biología”); veronicaLodge.tomaUnLapiz().escribe(“Me gusta programar)”;

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…

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 10

Implicaciones de esta nueva forma de escribir programas.

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.

Metáfora de los enfoques de programación: un mecánico ensamblando un auto es al modelo estructurado


como la fábrica robotizada ensamblando autos es al modelo orientado a objetos…

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.

Así, se incrementó exponencialmente la capacidad de resolver problemas complejos y las


aplicaciones se volvieron mucho más potentes, capaces y atractivas.

Clases

Los objetos se “obtienen” a partir de la declaración y programación de piezas de código


denominadas Clases.

Una clase es el equivalente a un plano arquitectónico o instructivo de ensamble a partir del cual
una computadora produce los objetos.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 11

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.

Metáfora de un clase: un molde o plantilla para generar objetos, la impresión en negativo de un


fósil, el código genético para reproducir a un ser vivo…

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.

Ejemplo: Programa Génesis – parte 5.

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)

Por convención, los


nombres de atributos y
métodos comienzan con Los objetos y
minúsculas y los de las sus procesos
clases inician con están definidos
mayúsculas de acurdo a por la clase
la notación “Camel Case” Humano

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO La clase Humano define 3 atributos Hoja 12
(nombre, cabello y ojos) y 4 acciones, de
las cuales 2 son constructores (Humano) y
2 son métodos (perfil y concebir).

A diferencia del “código aplicación” que


determina la secuencia de solución, los
procesos (constructores y métodos) de
una clase como Humano no se ejecutan en
una secuencia determinada; es decir, el
método perfil no se ejecuta primero, por
estar escrito antes del método concebir,
debe ser un “código aplicación” el que al
invocarlos, determine su secuencia…

El método concebir crea un nuevo Humano y se


invoca al segundo constructor que combina las
características de los “progenitores”: los ojos
de el y el cabello de ella….

El objeto madre invoca al


método concebir que
devuelve la dirección de un
Humano en nuevoSer al que
se referirá como hija…

código
aplicación

En el contexto del primer constructor,


puede observarse como la referencia
this permite diferenciar las variables
El operador new reserva y configura locales del proceso constructor
un espacio en memoria de acuerdo a (nombre cabello y ojos) de los
la clase Humano, después es atributos (nombre cabello y ojos) del
objeto Humano@54621 al escribir:
invocado el primer constructor que
inicializa los valores de los atributos this.nombre = nombre;
con los parámetros que se le pasan
(“Selina Kyle”, “rubio”, “azules”),
finalmente la dirección del nuevo
objeto se almacena en la referencia
madre

variable
atributo en el variable local en
objeto el primer
constructor

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 13

Enlaces y Asociaciones

En la memoria de la computadora, los objetos presentan características y comportamiento y se


vinculan y asocian entre ellos, a semejanza de las personas y las cosas en el mundo real, que
interactúan para llevar a cabo sus tareas.

Ejemplo: Programa TestInventores – parte 1.

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.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 14

Ejemplo: Programa TestInventores – parte 1.

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

Enlace boy - girl

Enlaces entre
objetos :Invento -
creador:Inventor

Enlaces entre objetos


:Inventor -
arregloInventos:Inventor[ ]
- :Invento

Las asociaciones suelen implementarse en los lenguajes de programación, mediante la declaración


de variables referencia (o bien, mediante variables puntero) dentro de las Clases, de forma
semejante a cómo se declaran las variables miembro (o atributos de dichas clases). De modo que,
para un cierto objeto activo en la memoria de un sistema, un enlace es el valor contenido en una de
sus variables, por medio del que hace referencia explícita a la dirección de memoria (handle –
manija) de otro objeto del sistema.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 15

Ejemplo: Programa TestInventores – parte 2.

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):

Las asociaciones son inherentemente bidireccionales, aunque el nombre de la asociación suela


leerse en un cierto sentido, la asociación debe recorrerse en ambos (la dirección implicada por el
nombre es la dirección hacia delante y la opuesta es la dirección hacia atrás). Las asociaciones
pueden ser binarias, ternarias o de orden superior. En la práctica, la inmensa mayoría van a ser
binarias o ternarias, puesto que las asociaciones de orden más alto son más difíciles de dibujar, de
implementar y de pensar que las binarias y se deberían evitar siempre que fuera posible.

La multiplicidad de una asociación especifica el número de instancias que pueden estar


enlazadas con una única instancia de una clase asociada. Se suele describir la multiplicidad como
“uno” o “muchos”, configurándose así tres tipos elementales de asociaciones: uno-a-uno (1..1),
uno-a-muchos (1..*) y muchos-a-muchos (*..*).

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 16

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.

Ejemplo: Programa TestInventores – parte 3.

Los atributos de enlace creador en la clase Invento y arregloInventos en la clase Inventor


pueden observarse en los objetos ilustrados abajo:

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.

Otros tipos especiales de relaciones son las asociaciones de Agregación/Composición y la


Generalización (Herencia). Se define una agregación/composición como la relación “parte-todo” o
“una-parte-de” en la cual los objetos que representan los componentes de algo se asocian a un
objeto que representa el ensamblaje completo.

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 17

Por su parte la relación de generalización (herencia) “es-un/es-una” se utiliza para compartir


similitudes entre clases, al mismo tiempo que se mantienen sus diferencias.

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.

Ejemplo: Programa TestAnimals – parte 1.

El programa TestAnimals codifica la jerarquía de herencia del siguiente diagrama de clases UML:

Donde la sub clase Spider hereda de la súper clase Animal:

//Spider.java
public class Spider extends Animal {

public Spider() {
super(8);
}

public void eat() {


System.out.println("Spiders catch flies in their webs to eat.");
}
}

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 18

Clases Abstractas e Interfaces

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.

Un ejemplo representativo de esta problemática es el de la programación de interfaces gráficas de


usuario (GUIs), que implica la integración de múltiples componentes visuales estandarizados para
recibir o presentar resultados de procesos en muy diversas aplicaciones de negocio. Otros
ejemplos semejantes incluyen la gestión de I/O, bases de datos, comunicación en redes,
multiprogramación y, un largo etc.

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).

Otro poderoso mecanismo de estandarización e integración de código, lo conforman las


Interfaces. Una interface es una construcción que incluye un conjunto de "declaraciones" de
métodos sin implementación (sin instrucciones) que pueden ser implementados (codificados) por
otras clases.

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).

Ejemplo: Programa TestAnimals – parte 1.

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;

protected Animal(int legs) {


this.legs = legs;
}

public abstract void eat();

public void walk() {


System.out.println("This animal walks on " + legs + " legs.");
}
}

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 19

//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;

public Cat(String name) {


super(4);
this.name = name;
}
public Cat() {
this("");
}

public void setName(String name) {


this.name = name;
}
public String getName() {
return name;
}
public void play() {
System.out.println(name + " likes to play with string.");
}

public void eat() {


System.out.println("Cats like to eat spiders and mice.");
}
}

// 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();

// Demonstract virtual method invocation


e.eat();
e.walk();

// Demonstrate calling super methods


a.walk();
}
}

Luis Ernesto Rubio Torres


Problemas y Ejercicios Elementales de Modelado OO Hoja 20

Referencia Título Autor Editorial Año de


Edición
Manual. Java Programming Language ORACLE/Sun
ORACLE/Sun 2014
Referencia SL275 Educational Services
Libro Cómo programar en Java Harvey Deitel Mc Graw Hill 2014
Java 2. Curso de
Alfa Omega Ra-
Libro Programación Francisco Javier Ceballos 2015
ma
Curso-CD Análisis y diseño de Microsoft Education Microsoft 2013
aplicaciones distribuidas
Object-Oriented Analysis and
Manual. Oracle Educational
Design Using UML Ed 2 Oracle 2016
Referencia Services
(Student Guide)
Análisis y Diseño Orientado a
Libro Grady Booch Addison-Wesley 2007
Objetos con Aplicaciones

Luis Ernesto Rubio Torres

También podría gustarte