SlideShare une entreprise Scribd logo
1  sur  20
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-1-
Año 2011
PARADIGMA ORIENTADO A OBJETOS
 Disponible en: http://www.desy.de/gna/html/cc/Tutorial/Spanish/node6.htm
I) INTRODUCCION
Actualmente una de las áreas más candentes en la industria y en el ámbito académico es la
orientación a objetos. La orientación a objetos promete mejoras de amplio alcance en la forma
de diseño, desarrollo y mantenimiento del software ofreciendo una solución a largo plazo a los
problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software: la
falta de portabilidad del código y reusabilidad, código que es difícil de modificar, ciclos de
desarrollo largos y técnicas de codificación no intuitivas.
Un lenguaje orientado a objetos ataca estos problemas. Tiene tres características
básicas:
a) debe estar basado en objetos
b) basado en clases y
c) capaz de tener herencia de clases.
Muchos lenguajes cumplen uno o dos de estos puntos; muchos menos cumplen los tres.
La barrera más difícil de sortear es usualmente la herencia.
El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicos
como SmallTalk se basan en ella. Dado que la OOP. se basa en la idea natural de la existencia
de un mundo lleno de objetos y que la resolución del problema se realiza en términos de
objetos, un lenguaje se dice que está basado en objetos si soporta objetos como una
característica fundamental del mismo.
El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemos
definir “un objeto como un conjunto complejo de datos y programas que poseen estructura y
forman parte de una organización”.
Esta definición especifica varias propiedades importantes de los objetos. En primer
lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de
componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que
forma parte de una organización jerárquica o de otro tipo.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-2-
Año 2011
II) ESTRUCTURA DE UN OBJETO
Un objeto puede considerarse como una especie de cápsula dividida en tres partes:
1 - RELACIONES
2 - PROPIEDADES
3 - METODOS
Cada uno de estos componentes desempeña un papel totalmente independiente:
II.1) RELACIONES: Las relaciones permiten que el objeto se inserte en la organización y
están formadas esencialmente por punteros a otros objetos.
Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objeto
relacionarse con aquellos que forman parte de la misma organización.
Las hay de dos tipos fundamentales:
-Relaciones jerárquicas. Son esenciales para la existencia misma de la aplicación porque la
construyen. Son bidireccionales, es decir, un objeto es padre de otro cuando el primer objeto se
encuentra situado inmediatamente encima del segundo en la organización en la que ambos
forman parte; asimismo, si un objeto es padre de otro, el segundo es hijo del primero (en la fig.
2, B es padre de D,E y F, es decir, D,E y F son hijos de B; en la fig. 3, los objetos B y C son
padres de F, que a su vez es hijo de ambos).
FIG. 2 –ORG. JERARQUICA SIMPLE (Un hijo tiene sólo un padre)

A B C
D E F
A B C
D E F

OBJETO
Propiedades
Métodos
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-3-
Año 2011
FIG. 3 –ORG. JERARQUICA COMPLEJA (un hijo puede tener varios padres)
Una organización jerárquica simple puede definirse como aquella en la que un objeto
puede tener un solo padre, mientras que en una organización jerárquica compleja un hijo puede
tener varios padres(F tiene a B y C como padres).
-Relaciones semánticas. Se refieren a las relaciones que no tienen nada que ver con la
organización de la que forman parte los objetos que las establecen. Sus propiedades y
consecuencia solo dependen de los objetos en sí mismos (de su significado) y no de su posición
en la organización.
Se puede ver mejor con un ejemplo: supongamos que vamos a construir un diccionario
informatizado que permita al usuario obtener la definición de una palabra cualquiera.
Supongamos que, en dicho diccionario, las palabras son objetos y que la organización jerárquica
es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo.
La raíz del diccionario podría llamarse TEMAS. De éste término genérico descenderán
tres grandes ramas de objetos llamadas VIDA, MUNDO y HOMBRE. El primero (vida)
comprenderá las ciencias biológicas: Biología y Medicina. El segundo (mundo), las ciencias de
la naturaleza inerte: las Matemáticas, la Física, la Química y la Geología. El tercero (hombre)
comprenderá las ciencias humanas: la Geografía, la Historia, etc.
Estableceremos la relación trabajó entre los objetos NEWTON y OPTICA y la
interpretaremos diciendo que significa que Newton trabajó en óptica (véase la fig. 4). La
relación es, evidentemente, semántica, pues no establece ninguna connotación jerárquica entre
NEWTON y OPTICA y su interpretación depende exclusivamente del significado de ambos
objetos.
FIG. 4 –TEMAS
La existencia de esta relación nos permitirá responder a preguntas como:
¿Quién trabajó en óptica?- ¿En qué trabajó Newton?- ¿Quien trabajó en Física?
Las dos primeras se deducen inmediatamente de la existencia de la relación trabajó.
Para la tercera observamos que si Newton trabajó en óptica automáticamente sabemos
que trabajó en Física, por ser óptica una rama de la Física (en nuestro diccionario, el objeto
OPTICA es hijo del objeto FISICA). Entonces gracias a la OOP podemos responder a la tercera
TEMAS
VIDA MUNDO
O
HOMBRE
MAT FIS QUIMBIO MED GEOG HIST
Optica
Newton
No hay relación jerárquica
entre óptica y Newton
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-4-
Año 2011
pregunta sin necesidad de establecer una relación entre NEWTON y FISICA, apoyándonos sólo
en la relación definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA. De
este modo se elimina toda redundancia innecesaria y la cantidad de información que tendremos
que definir para todo el diccionario será mínima.
II.1.2 – Clasificación de las relaciones
II.1.2.a - Relación De-La-Especie
Considérese que se ha escrito un programa para dibujar. Este programa debería permitir
el dibujo de variados objetos tales como puntos, rectángulos, triángulos y muchos más. Por cada
objeto, se provee una definición de clase.
Por ejemplo, la clase Point define un punto por sus coordenadas:
class Point {
attributes:
int x, y
methods:
setX(int newX)
getX()
setY(int newY)
getY()
}
Se continúa definiendo clases de programa de dibujo con una clase para describir círculos.
Un círculo define un punto central y un radio:
class Circle {
attributes:
int x, y,
radius
methods:
setX(int newX)
getX()
setY(int newY)
getY()
setRadius(newRadius)
getRadius()
}
Comparando ambas definiciones de clase, podemos observar lo siguiente :
 Ambas clases tienen dos elementos de datos x e y. En la clase Point estos elementos
describen la posición del punto, en el caso de la clase Circle describen el centro del
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-5-
Año 2011
círculo. Así, x e y tienen el mismo significado en ambas clases: Describen la posición de
su objeto asociado por medio de la definición de un punto.
 Ambas clases ofrecen el mismo conjunto de métodos para obtener y definir el valor de
los dos elementos de datos x e y.
 La clase Circle "añade'' un nuevo elemento de datos radius y sus correspondientes
métodos de acceso.
Conociendo las propiedades de la clase Point: podemos describir un círculo como un
punto más un radio más métodos para accederlo.
Así, un círculo es "de-la-especie" Point. Sin embargo, un círculo es algo más
"especializado". Ilustramos esto gráficamente en la Figura 5.1.
Figura 5.1: Ilustración de la relación "de-la-especie".
En ésta y en las siguientes figuras, las clases se dibujan usando rectángulos. Su nombre
siempre empieza con una letra mayúscula. Las flechas indican la dirección de la relación, de ahí
que se deba leer como "Circle es de-la-especie Point".
II.1.2.b - Relación Es-Un(a)
La relación anterior se usa al nivel de clase para describir las relaciones entre dos clases
similares. Si creamos objetos de tales clases, nos referimos a su relación como una relación "es-
un(a)".
Desde el momento que la clase Circle es de la especie de la clase Point, una instancia de
Circle, digamos acircle, es un point. Consecuentemente, cada círculo se comporta como un
punto. Por ejemplo, se puede mover puntos en la dirección x al alterar el valor de x.
Similarmente, se mueven círculos en ésta dirección al alterar su valor de x.
La Figura 5.2 ilustra esta relación. En ésta y en las siguientes figuras, los objetos se dibujan
usando rectángulos con las esquinas redondeadas. Su nombre consiste solamente de letras
minúsculas.
Figura 5.2: Ilustración de la relación "es-un(a)".
II.1.2.c - Relación Parte-De
Algunas veces se necesita poder construir objetos haciendo una combinación de otros.
Esto se sabe por la programación procedimental, donde se tiene la estructura o registro para
juntar variados tipos de datos.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-6-
Año 2011
Regresemos al programa de dibujo. Ya se han creado varias clases para las figuras
disponibles. Ahora se decide que se quiere tener una figura especial que representa un logotipo
propio que consiste en un círculo y un triángulo. (Asumamos que ya se tiene definida un clase
Triangle.) De este modo, el logo consiste en dos partes o, el círculo y el triángulo son parte-de
logotipo:
class Logo {
attributes:
Circle circle
Triangle triangle
methods:
set(Point where)
}
Ilustramos esto con la Figura 5.3.
Figura 5.3: Ilustración de la relación "parte-de".
II.1.2.d - Relación Tiene-Un(a)
Esta relación es justamente la inversa de la relación parte-de. Por lo tanto, podemos
fácilmente añadir esta relación a la ilustración parte-de añadiendo flechas en la otra dirección
(Figura 5.4).
Figura 5.4: Ilustración de la relación "tiene-un(a)".
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-7-
Año 2011
II.2) PROPIEDADES
Todo objeto puede tener cierto número de propiedades, cada una de las cuales tendrá, a
su vez, uno o varios valores. En OOP, las propiedades corresponden a las clásicas "variables" de
la programación estructurada. Son, por lo tanto, datos encapsulados dentro del objeto, junto con
los métodos (programas) y las relaciones (punteros a otros objetos).
Las propiedades de un objeto pueden tener un valor único o pueden contener un
conjunto de valores más o menos estructurados (matrices, vectores, listas, etc.). Además, los
valores pueden ser de cualquier tipo (numérico, alfabético, etc.) si el sistema de programación lo
permite.
Pero existe una diferencia con las "variables", y es que las propiedades se pueden
heredar de unos objetos a otros. En consecuencia, un objeto puede tener una propiedad de
maneras diferentes:
-Propiedades propias. Están formadas dentro de la cápsula del objeto.
-Propiedades heredadas. Están definidas en un objeto diferente, antepasado de éste
(padre,"abuelo", etc.). A veces estas propiedades se llaman propiedad miembro porque el objeto
las posee por el mero hecho de ser miembro de una clase.
Las propiedades distinguen un objeto determinado de los restantes que forman parte de
la misma organización y tiene valores que dependen de la propiedad de que se trate. Las
propiedades de un objeto pueden ser heredadas a sus descendientes en la organización.
II.3) METODOS
Los métodos son las operaciones que pueden realizarse sobre el objeto, que
normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de
ejecutar y que también pone a disposición de sus descendientes a través de la herencia.
Los métodos son una operación que realiza acceso a los datos. Podemos definir método
como un programa procedimental o procedural escrito en cualquier lenguaje, que está asociado
a un objeto determinado y cuya ejecución sólo puede desencadenarse a través de un mensaje
recibido por éste o por sus descendientes.
Son sinónimos de 'método' todos aquellos términos que se han aplicado
tradicionalmente a los programas, como procedimiento, función, rutina, etc. Sin embargo, es
conveniente utilizar el término 'método' para que se distingan claramente las propiedades
especiales que adquiere un programa en el entorno OOP, que afectan fundamentalmente a la
Objeto 1 Objeto 2
Propiedades
Métodos
Propiedades
Métodos
Mensaje (invocación de
un método)
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-8-
Año 2011
forma de invocarlo (únicamente a través de un mensaje) y a su campo de acción, limitado a un
objeto y a sus descendientes, aunque posiblemente no a todos.
Si los métodos son programas, se deduce que podrían tener argumentos, o parámetros.
Puesto que los métodos pueden heredarse de unos objetos a otros, un objeto puede disponer de
un método de dos maneras diferentes:
-Métodos propios. Están incluidos dentro de la cápsula del objeto.
-Métodos heredados. Están definidos en un objeto diferente, antepasado de éste (padre,"abuelo",
etc.). A veces estos métodos se llaman métodos miembro porque el objeto los posee por el mero
hecho de ser miembro de una clase.
III - OBJETO (Resúmen)
Los objetos soportan una serie de características específicas de los mismos:
 Se agrupan en grupos denominados clases
 Contienen datos internos que definen su estado actual.
 Soportan ocultamiento de datos.
 Pueden heredar propiedades de otros objetos.
 Pueden comunicarse con otros objetos enviando o pasando mensajes.
 Tienen métodos que definen su comportamiento
Un objeto es una entidad lógica que contiene datos y un código especial que indica
como manipular los datos.
El uso de un objeto impone a veces castigos al momento de la ejecución que en
ocasiones pueden degradar seriamente el diseño de un programa.
Los objetos son construcciones de programación que se obtienen a partir de entidades
llamadas clases. El programador tiene la responsabilidad absoluta de crear clases
propias, pero también puede tener acceso a las clases desarrolladas por otros.
Ejemplo: diseño de un Objeto.
class nomina {nomina empleado;
char nombre[30];
float salario;
}; (nomina es una clase )
(empleado es un objeto)
Los objetos son ejemplos de clases.
Nombre Salario
Empleado 1
Empleado 2
. . . . . . . . . .
Empleado n
Class Nómina de Personal
Objetos
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-9-
Año 2011
IV - CONCEPTO DE CLASE
Cada objeto es un ejemplar de una clase a la que pertenece. Todos los
ejemplares de la misma clase tienen el mismo comportamiento (es decir invocan al
mismo método) como respuesta a una solicitud similar.
Una clase es un tipo especial de datos, y esta orientado a creación de objetos y
que consta de unos miembros que pueden ser todas o funciones privadas o públicas.
“Una clase es un tipo de dato que contiene uno o más elementos llamados dato
miembro, y cero, una o más funciones que manipulan esos datos (llamados función
miembro). Una clase se puede definir con una estructura (struct), una unión
(unión) o una clase (class).”
La sintaxis de una clase es:
class nombre_clase
{
miembro_1; //lista de datos miembros
miembro_2
miembro_3
funcion_miembro_1( ); // funciones miembro
conocidas
funcion_miembro_2 ( ); // funciones como métodos
Objeto 1 Objeto 2 Objeto n
Clase
A
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-10-
Año 2011
IV.1 - Identificadores de diseño de una clase
Para usar una clase, primero hay que declararla, como se hace en el caso de las
estructuras. La declaración de una clase puede aparecer sólo una vez en un programa, tal
y como las estructuras. Esta es una declaración de una clase simple:
class counter {
long count;  Variable miembro de la clase
public:
void SetCount(long);
long GetValue( );
};
-La palabra clave class introduce una declaración de clase.
-Después aparece el nombre de la clase.
-Las clases contienen no sólo declaraciones de variables, sino también definiciones de
funciones completas.
-Las funciones contenidas en clases pueden ser tan largas y complejas como uno desee
que lo sean.
-Se considera que las variables declaradas dentro de una clase pertenecen a esa clase. En
ciertas circunstancias, las variables pueden compartirse entre las diferentes instancias de
una clase.
-Existe garantía de que los identificadores de variables y funciones contenidos en una
clase no chocan con los identificadores que se usan en otras.
Básicamente una clase es un mundo con identificadores propios únicos.
IV.2- Cuerpo de una Clase
La variable count se define dentro del cuerpo de la clase. Por lo tanto, count recibe
el nombre de variable miembro de la clase.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-11-
Año 2011
Cualquier variable definida en una clase tiene campo de acción. El campo de acción de
la clase no está disponible, es decir, que este punto de declaración es una variable final
de la declaración de la clase.
Es un error intentar el acceso a una variable miembro después de la declaración
de la clase, como se puede apreciar en el código siguiente:
class counter {
long count;
public:
count = 3; //error: count no se encuentra definida aquí.
IV.3- Uso de una Clase
Para usar una clase se debe definir un objeto con ella. Las variables de una clase se
definen tan solo como variables de tipo estructura o variables escalares. Para definir la
variable de la clase people de tipo counter, se utiliza esta notación:
Counter people
“Las variables instanciadas a partir de clases son los objetos”.
En general, es imposible usar una clase directamente. Las contadas excepciones a
esta regla se ilustran más adelante. Para el objeto people, esta es la forma en que lo
podría utilizar un programa:
Void main ( )
{
counter people;
//inicializar el objeto people.
SetValue(0);
// verificar que se borre
long value = people.GetValue( );
}
“Una clase es un tipo especial de datos, y esta orientada a la creación de objetos y
que consta de unos miembros que pueden ser datos o funciones privadas o publicas”.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-12-
Año 2011
IV.4- Componentes de una Clase
Para poder definir una clase se debe tomar en cuenta que consta de dos partes: una
declaración y una implementación.
. La declaración lista los miembros de la clase.
. La implementación o cuerpo define las funciones de la clase.
class nomina {nomina empleado;
char nombre[30];
float salario;
}; (nomina es una clase )
(empleado es un objeto)
……………………………………………………..
class contador{
long cuenta;
public:
void leervalor(long);
long obtenervalor( );
};
…………………………………………………..
Implementación de una clase
void contador::leerValor(long valor)
{
cuenta = valor,
}
long contador::obtenerValor( )
{
return cuenta;}
}
Declaración de una clase
Funciones miembro de
la clase
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-13-
Año 2011
V- ENCAPSULAMIENTO Y OCULTACIÓN
Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y
programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en
una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en
la OOP.
Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los
programadores conozcan cómo está distribuida la información o qué información hay
disponible. Esta propiedad de los objetos se denomina ocultación de la información. Esto no
quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo
que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las
peticiones de información a un objeto, deben realizarse a través de mensajes dirigidos a él, con
la orden de realizar la operación pertinente. La respuesta a estas órdenes será la información
requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para
obtenerla.
El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto
determinado pueda ser transportado a otro punto de la organización, o incluso a otra
organización totalmente diferente que precise de él. Si el objeto ha sido bien construido, sus
métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la
OOP sea muy apta para la reutilización de programas.
VI- ORGANIZACIÓN JERARQUICA DE LOS OBJETOS
En principio, los objetos forman siempre una organización jerárquica, en el sentido de
que ciertos objetos son superiores a otros de cierto modo.
Existen varios tipos de jerarquías: serán simples cuando su estructura pueda ser
representada por medio de un "árbol". En otros casos puede ser más compleja.
En cualquier caso, sea la estructura simple o compleja, podrán distinguirse en ella tres niveles
de objetos.
-La raíz de la jerarquía. Se trata de un objeto único y especial. Este se caracteríza por estar en el
nivel más alto de la estructura y suele recibir un nombre muy genérico, que indica su categoría
especial, como por ejemplo objeto madre, Raíz o Entidad.
-Los objetos intermedios. Son aquellos que descienden directamente de la raíz y que a su vez
tienen descendientes. Representan conjuntos o clases de objetos, que pueden ser muy generales
o muy especializados, según la aplicación. Normalmente reciben nombres genéricos que
denotan al conjunto de objetos que representan, por ejemplo, VENTANA, CUENTA,
FICHERO. En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o
subclase.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-14-
Año 2011
-Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen
descendientes. Suelen llamarse casos particulares, instancias o items porque representan los
elementos del conjunto representado por la clase o subclase a la que pertenecen.
VII- POLIMORFÍSMO
Una de las características fundamentales de la OOP es el polimorfísmo, que no
es otra cosa que la posibilidad de construir varios métodos con el mismo nombre, pero
con relación a la clase a la que pertenece cada uno, con comportamientos diferentes.
Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes.
Estos objetos recibirían el mismo mensaje global pero responderían a él de formas
diferentes; por ejemplo, un mensaje "+" a un objeto ENTERO significaría suma,
mientras que para un objeto STRING significaría concatenación ("pegar" strings uno
seguido al otro)
VII.1) Demonios
Es un tipo especial de métodos, relativamente poco frecuente en los sistemas de
OOP, que se activa automáticamente cuando sucede algo especial. Es decir, es un
programa, como los métodos ordinarios, pero se diferencia de estos porque su ejecución
no se activa con un mensaje, sino que se desencadena automáticamente cuando
ocurre un suceso determinado: la asignación de un valor a una propiedad de un
objeto, la lectura de un valor determinado, etc.
Los demonios, cuando existen, se diferencian de otros métodos por que no son
heredables y porque a veces están ligados a una de las propiedades de un objeto, mas
que al objeto entero.
VIII - HERENCIA
Con la herencia podemos hacer uso de las relaciones de-la-especie y es-un(a).
Como se describió anteriormente, las clases que son de-la-especie de otra clase
comparten propiedades de esta última. En nuestro ejemplo con el punto y el círculo,
podemos definir un círculo, el cuál hereda de punto:
class Circle inherits from Point {
atrributes:
int radius
methods:
setRadius(int newRadius)
getRadius()
}
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-15-
Año 2011
La clase Circle hereda todos los elementos de datos y métodos de la clase Point.
No hay necesidad de definirlos dos veces: Solamente usamos los ya existentes (y
familiares) datos y definiciones de métodos.
Al nivel de objeto ahora podemos usar un círculo justamente como habríamos
usado un punto, debido a que un círculo es-un(a) punto. Por ejemplo, podemos definir
un objeto círculo (acircle) y establecer sus coordenadas del punto central:
Circle acircle
acircle.setX(1) /* Heredado de Point */
acircle.setY(2)
acircle.setRadius(3) /* Añadido por Circle */
"Es-un(a)" también implica que podemos usar un círculo en cualquier circunstancia
donde se pueda usar un punto. Por ejemplo, se puede escribir una función o un método,
digamos move(), el(la) cuál debe mover un punto en la dirección x:
move(Point apoint, int deltax) {
apoint.setX(apoint.getX() + deltax)
}
Debido a que círculo hereda de punto, se puede usar esta función con un argumento
círculo para mover su punto central y, a partir de ahí, todo el círculo :
Circle acircle
...
move(acircle, 10) /* Mover el círculo al mover */
/* su punto central */
Tratemos de formalizar el término "herencia" :
Definición (Herencia) “Herencia es el mecanismo que permite que un clase A herede
propiedades de una clase B. Decimos "A hereda de B". Objetos de la clase A tienen así
acceso a los atributos y métodos de la clase B sin necesidad de redefinirlos. La
siguiente definición describe dos términos con los que podemos hacer referencia a las
clases involucradas cuando se usa la herencia.”
Definición (Superclase/Subclase) Si la clase A hereda de la clase B, entonces B es la
superclase de A. A es subclase de B. Los objetos de una subclase pueden ser usados en
las circunstancias donde son usados los objetos de la superclase correspondiente. Esto
se debe al hecho que los objetos de la subclase comparten el mismo comportamiento
que los objetos de la superclase.
En la literatura también se pueden encontrar otros términos para "superclase" y
para "subclase". Las superclases también son llamadas clases padres. Las subclases
pueden ser llamadas también clases hijas o simplemente clases derivadas.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-16-
Año 2011
Por supuesto, también se puede heredar de una subclase, haciendo que esta clase sea la
superclase de la nueva subclase. Esto conduce a una jerarquía de relaciones
superclase/subclase. Si se dibuja esta jerarquía, se obtiene una gráfica de herencia.
Un esquema común consiste en usar flechas para indicar la relación de herencia
entre clases u objetos. En nuestros ejemplos hemos usado "hereda-de".
Consecuentemente, la flecha empieza desde la subclase hacia la superclase, como se
ilustra en la Figura 5.5.
Figura 5.5: Una gráfica de herencia sencilla.
En la literatura también se puede encontrar ilustraciones donde las flechas se
dibujan del modo contrario. La dirección en la que se usan las flechas dependen de
como el autor correspondiente las haya decidido entender.
De cualquier manera, en este apunte, las flechas siempre apuntan hacia la
superclase. En las secciones siguientes, las flechas indican "hereda-de".
VII .1 - Herencia Múltiple
Un mecanismo importante de orientación a objetos es la herencia múltiple. La
herencia múltiple no significa que múltiples subclases compartan la misma superclase.
Tampoco significa que una subclase herede de una clase que es a su vez subclase de
otra clase.
“La herencia múltiple significa que una subclase puede tener más de una
superclase. Esto permite que la subclase herede propiedades de más de una
superclase y –mezclar- sus propiedades”.
Considérese por ejemplo nuevamente nuestro programa de dibujo. Suponiendo
que ya tenemos una clase String que nos permite el manejo adecuado de texto. Podría
tener, por ejemplo, un método append para añadir otro texto.
En este programa, nos gustaría usar esta clase para añadir texto a los objetos
que se pudieran dibujar. También sería bueno usar rutinas ya existentes tales como
move() para mover el texto a donde fuera necesario.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-17-
Año 2011
En consecuencia, es razonable permitir que un texto para dibujarse tenga un
punto que defina su localización dentro del área de dibujo. Por lo tanto derivamos una
nueva clase DrawableString que hereda propiedades de Point y de String como se
ilustra en la Figura 5.6.
Figura 5.6: Derivar un string desplegable que herede propiedades de Point y de
String.
En nuestro pseudo lenguaje, escribimos esto, simplemente separando las
diferentes superclases con comas :
class DrawableString inherits from Point, String {
attributes:
/* Todos heredados de superclases */
methods:
/* Todos heredados de superclases */
}
Podemos usar objetos de la clase DrawableString como ambos: puntos y strings.
 Debido a que drawablestring es-un(a) point podemos mover dichos objetos:
DrawableString dstring
...
move(dstring, 10)
...
Desde el momento que son string, podemos añadirles otro texto:
dstring.append("La flores color azul ...")
Podemos definir la herencia múltiple :
Definición (Herencia Múltiple) Si la clase A hereda de más de una clase, p.ej. A
hereda de B1, B2, ..., Bn, hablamos de herencia múltiple. Esto puede presentar
conflictos de nomenclatura en A si al menos dos de sus superclases definen
propiedades con el mismo nombre.
La definición de arriba presenta conflictos de nomenclatura los cuáles ocurren si
más de una superclase de una subclase usan el mismo nombre para ambos, atributos o
métodos. Por ejemplo, supongamos que la clase String define un método setX() que
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-18-
Año 2011
pone el string en una secuencia de "X" caracteres. Se produce la pregunta ¿Que debería
ser heredado por DrawableString? ¿La versión de Point, de String o ninguna de las dos?
Estos conflictos pueden ser resueltos de al menos dos maneras :
 El orden en el cuál las superclases son provistas, definen que propiedad será
accesible por el nombre causante del conflicto. Los otros quedarán "escondidos".
 Las subclases deben resolver el conflicto proveyendo una propiedad con el
nombre y definiendo como usar los de sus superclases.
La primera solución no es muy conveniente ya que presentan consecuencias
implícitas dependiendo del orden en el cuál las clases heredan unas de otras. Para el
segundo caso, las subclases deben redefinir explícitamente las propiedades que están
involucradas en conflictos de nomenclatura.
Un tipo especial de conflicto de nomenclatura se presenta si una clase D hereda en
forma múltiple de las superclases B y C que a su vez son derivadas de una superclase A.
Esto conduce a una gráfica de herencia como se muestra en la Figura 5.7.
Figura 5.7: Un conflicto de nomenclatura presentado por una superclase compartida
por superclases usadas en herencia múltiple.
Cabe la pregunta acerca de que propiedades hereda realmente la clase D de sus
superclases B y C. Algunos lenguajes de programación existentes resuelven esta gráfica
de herencia especial derivando D con
 las propiedades de A más
 las propiedades de B y C sin las propiedades que han heredado de A.
Consecuentemente, D no puede presentar conflictos de nomenclatura con los
nombres en la clase A. Sin embargo, si B y C añaden propiedades con el mismo
nombre, D entra en un conflicto de nomenclatura.
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-19-
Año 2011
Otra posible solución es que D herede de ambas trayectorias de herencia. En esta
solución, D tiene dos copias de las propiedades de A: una heredada de B y otra de C.
Aunque la herencia múltiple es un poderoso mecanismo en orientación a objetos,
los problemas que se presentan con los conflictos de nomenclatura ha llevado a varios
autores a "condenarla". Debido a que los resultados de la herencia múltiple siempre
puede ser lograda usando herencia simple, algunos lenguajes orientados a objetos no
permiten siquiera su uso. Sin embargo, usada con cuidado, bajo algunas condiciones
la herencia múltiple provee una manera eficiente y elegante de formular cosas.
VIII - BENEFICIOS Y PROBLEMAS QUE SE OBTIENEN DEL DESARROLLO
CON OOP
VIII.1- REUTILIZACION DE CODIGO
Día a día los costos del Hardware decrecen. Así surgen nuevas áreas de
aplicación cotidianamente: procesamiento de imágenes y sonido, bases de datos
multimediales, automatización de oficinas, ambientes de ingeniería de software, etc.
Aún en las aplicaciones tradicionales encontramos que definir interfases hombre-
máquina "a-la-Windows" suele ser bastante conveniente.
Lamentablemente, los costos de producción de software siguen aumentando; el
mantenimiento y la modificación de sistemas complejos suele ser una tarea trabajosa;
cada aplicación, (aunque tenga aspectos similares a otra) suele encararse como un
proyecto nuevo, etc.
Todos estos problemas aún no han sido solucionados en forma completa. Pero
como los objetos son portables (teóricamente) mientras que la herencia permite la
reusabilidad del código orientado a objetos, es más sencillo modificar código existente
porque los objetos no interaactúan excepto a través de mensajes; en consecuencia un
cambio en la codificación de un objeto no afectará la operación con otro objeto siempre
que los métodos respectivos permanezcan intactos. “La introducción de tecnología de
objetos como una herramienta conceptual para analizar, diseñar e implementar
aplicaciones permite obtener aplicaciones más modificables, fácilmente extendibles y
a partir de componentes reusables”. Esta reusabilidad del código disminuye el tiempo
que se utiliza en el desarrollo y hace que el desarrollo del software sea más intuitivo
porque la gente piensa naturalmente en términos de objetos más que en términos de
algoritmos de software.
VIII.2 - Problemas derivados de la utilización de OOP en la actualidad
Un sistema orientado a objetos, por lo visto, puede parecer un paraíso virtual. El
problema sin embargo surge en la implementación de tal sistema. Muchas compañías
oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad
de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es
MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE
-20-
Año 2011
ajena a los programadores actuales. Específicamente los siguientes temas suelen
aparecer repetidamente:
a) Curvas de aprendizaje largas. Un sistema orientado a objetos ve al mundo en una
forma única. Involucra la conceptualización de todos los elementos de un programa,
desde subsistemas a los datos, en la forma de objetos. Toda la comunicación entre los
objetos debe realizarse en la forma de mensajes. Esta no es la forma en que están
escritos los programas orientados a objetos actualmente; al hacer la transición a un
sistema orientado a objetos la mayoría de los programadores deben capacitarse
nuevamente antes de poder usarlo.
b) Dependencia del lenguaje. A pesar de la portabilidad conceptual de los objetos en un
sistema orientado a objetos, en la práctica existen muchas dependencias. Muchos
lenguajes orientados a objetos están compitiendo actualmente para dominar el mercado.
Cambiar el lenguaje de implementación de un sistema orientado a objetos no es una
tarea sencilla; por ejemplo C++ soporta el concepto de herencia múltiple mientras que
SmallTalk no lo soporta; en consecuencia la elección de un lenguaje tiene
ramificaciones de diseño muy importantes.
c) Determinación de las clases. Una clase es un molde que se utiliza para crear nuevos
objetos. En consecuencia es importante crear el conjunto de clases adecuado para un
proyecto. Desafortunadamente la definición de las clases es más un arte que una ciencia.
Si bien hay muchas jerarquías de clase predefinidas usualmente se deben crear clases
específicas para la aplicación que se este desarrollando. Luego, en 6 meses ó 1 año se da
cuenta que las clases que se establecieron no son posibles; en ese caso será necesario
reestructurar la jerarquía de clases devastando totalmente la planificación original.
d) Performance. En un sistema donde todo es un objeto y toda interacción es a través de
mensajes, el tráfico de mensajes afecta la performance. A medida que la tecnología
avanza y la velocidad de microprocesamiento, potencia y tamaño de la memoria
aumentan, la situación mejorará; pero en la situación actual, un diseño de una aplicación
orientada a objetos que no tiene en cuenta la performance no será viable
comercialmente.
Idealmente, habría una forma de atacar estos problemas eficientemente al mismo
tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a
objetos. Debería existir una metodología fácil de aprender e independiente del lenguaje,
y fácil de reestructurar que no drene la performance del sistema.

Contenu connexe

En vedette

тест база данных. основные функции
тест база данных. основные функциитест база данных. основные функции
тест база данных. основные функции
JIuc
 
Antonio millán puelles cap XII
Antonio millán puelles   cap XIIAntonio millán puelles   cap XII
Antonio millán puelles cap XII
hmosquera
 
Instalaciones domiciliarias
Instalaciones domiciliariasInstalaciones domiciliarias
Instalaciones domiciliarias
hmosquera
 
Urbanística i curso 1997 new
Urbanística i curso 1997 newUrbanística i curso 1997 new
Urbanística i curso 1997 new
hmosquera
 
Libro matematicas financieras en excel
Libro matematicas financieras en excelLibro matematicas financieras en excel
Libro matematicas financieras en excel
hmosquera
 

En vedette (20)

Xe nâng tay 2500 kg still
Xe nâng tay 2500 kg stillXe nâng tay 2500 kg still
Xe nâng tay 2500 kg still
 
тест база данных. основные функции
тест база данных. основные функциитест база данных. основные функции
тест база данных. основные функции
 
Xe nâng tay 2500 kg still2
Xe nâng tay 2500 kg still2Xe nâng tay 2500 kg still2
Xe nâng tay 2500 kg still2
 
Libro dibujos arquitectónicos
Libro   dibujos arquitectónicosLibro   dibujos arquitectónicos
Libro dibujos arquitectónicos
 
Antonio millán puelles cap XII
Antonio millán puelles   cap XIIAntonio millán puelles   cap XII
Antonio millán puelles cap XII
 
ratios financieros y matematicas de la mercadotecnia
ratios financieros y matematicas de la mercadotecniaratios financieros y matematicas de la mercadotecnia
ratios financieros y matematicas de la mercadotecnia
 
La arquitectura contemporanea
La arquitectura contemporaneaLa arquitectura contemporanea
La arquitectura contemporanea
 
Instalaciones domiciliarias
Instalaciones domiciliariasInstalaciones domiciliarias
Instalaciones domiciliarias
 
Aplicaciones genexus
Aplicaciones genexusAplicaciones genexus
Aplicaciones genexus
 
Secuencia de eventos vfp
Secuencia de eventos vfpSecuencia de eventos vfp
Secuencia de eventos vfp
 
Normativa general de instalaciones de gas, electricas y de telefonos
Normativa general de instalaciones de gas, electricas y de telefonosNormativa general de instalaciones de gas, electricas y de telefonos
Normativa general de instalaciones de gas, electricas y de telefonos
 
Algebra de baldor respuestas
Algebra de baldor respuestasAlgebra de baldor respuestas
Algebra de baldor respuestas
 
Revista finanzas y política económica - Publicación Alvaro Narvaez
Revista finanzas y política económica - Publicación Alvaro NarvaezRevista finanzas y política económica - Publicación Alvaro Narvaez
Revista finanzas y política económica - Publicación Alvaro Narvaez
 
Urbanística i curso 1997 new
Urbanística i curso 1997 newUrbanística i curso 1997 new
Urbanística i curso 1997 new
 
Manual del programador fox pro
Manual del programador fox proManual del programador fox pro
Manual del programador fox pro
 
Visual fox pro sql server y asp programación multiusuario
Visual fox pro sql server y asp   programación multiusuarioVisual fox pro sql server y asp   programación multiusuario
Visual fox pro sql server y asp programación multiusuario
 
Algebra de baldor
Algebra de baldorAlgebra de baldor
Algebra de baldor
 
Algebra arrayan
Algebra arrayanAlgebra arrayan
Algebra arrayan
 
FÓRMULAS RELATIVAS A LOS DESCUENTOS COMERCIALES
FÓRMULAS RELATIVAS A LOS DESCUENTOS COMERCIALESFÓRMULAS RELATIVAS A LOS DESCUENTOS COMERCIALES
FÓRMULAS RELATIVAS A LOS DESCUENTOS COMERCIALES
 
Libro matematicas financieras en excel
Libro matematicas financieras en excelLibro matematicas financieras en excel
Libro matematicas financieras en excel
 

Similaire à Paradigma orientado a objetos

Lenguajes2
Lenguajes2Lenguajes2
Lenguajes2
Ernesto
 
31096724 diagrama-de-clases-en-uml
31096724 diagrama-de-clases-en-uml31096724 diagrama-de-clases-en-uml
31096724 diagrama-de-clases-en-uml
Darry Piñeiro
 
Dialnet estructura y-organizaciondeunabasededatos-126243
Dialnet estructura y-organizaciondeunabasededatos-126243Dialnet estructura y-organizaciondeunabasededatos-126243
Dialnet estructura y-organizaciondeunabasededatos-126243
sistemas descarga
 
Programacion estructurad de base de datos
Programacion estructurad de base de datosProgramacion estructurad de base de datos
Programacion estructurad de base de datos
Juan Moran Sanchez
 
Base de datos 2 parte
Base de datos 2 parteBase de datos 2 parte
Base de datos 2 parte
saraiacevedo
 
Unidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionUnidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacion
LuiS YmAY
 
Los modelos de datos y el modelo objeto relacional
Los modelos de datos y el modelo objeto relacionalLos modelos de datos y el modelo objeto relacional
Los modelos de datos y el modelo objeto relacional
omarib
 
fundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.pptfundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.ppt
juan gonzalez
 

Similaire à Paradigma orientado a objetos (20)

Lenguajes2
Lenguajes2Lenguajes2
Lenguajes2
 
Metodologia
MetodologiaMetodologia
Metodologia
 
31096724 diagrama-de-clases-en-uml
31096724 diagrama-de-clases-en-uml31096724 diagrama-de-clases-en-uml
31096724 diagrama-de-clases-en-uml
 
Dialnet estructura y-organizaciondeunabasededatos-126243
Dialnet estructura y-organizaciondeunabasededatos-126243Dialnet estructura y-organizaciondeunabasededatos-126243
Dialnet estructura y-organizaciondeunabasededatos-126243
 
3a5 shirley vinces- tarea1
3a5 shirley vinces- tarea13a5 shirley vinces- tarea1
3a5 shirley vinces- tarea1
 
Introducción a la progrogramación orientada a objetos - UML
Introducción a la progrogramación orientada a objetos - UMLIntroducción a la progrogramación orientada a objetos - UML
Introducción a la progrogramación orientada a objetos - UML
 
Programacion estructurad de base de datos
Programacion estructurad de base de datosProgramacion estructurad de base de datos
Programacion estructurad de base de datos
 
Cap3.0
Cap3.0Cap3.0
Cap3.0
 
Poo
PooPoo
Poo
 
Unidad III epoo
Unidad III epooUnidad III epoo
Unidad III epoo
 
Vinculaciones autosimilares
Vinculaciones autosimilaresVinculaciones autosimilares
Vinculaciones autosimilares
 
Base de datos 2 parte
Base de datos 2 parteBase de datos 2 parte
Base de datos 2 parte
 
Unidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacionUnidad 2. modelo entidad relacion
Unidad 2. modelo entidad relacion
 
clases
clasesclases
clases
 
Los modelos de datos y el modelo objeto relacional
Los modelos de datos y el modelo objeto relacionalLos modelos de datos y el modelo objeto relacional
Los modelos de datos y el modelo objeto relacional
 
Conceptos poo
Conceptos pooConceptos poo
Conceptos poo
 
MODELO ENTIDAD RELACION
MODELO ENTIDAD RELACIONMODELO ENTIDAD RELACION
MODELO ENTIDAD RELACION
 
Fundamentos del Enfoque OO
Fundamentos del Enfoque OOFundamentos del Enfoque OO
Fundamentos del Enfoque OO
 
Modelo diseño
Modelo diseñoModelo diseño
Modelo diseño
 
fundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.pptfundamentos-de-poo.ppt 2.ppt
fundamentos-de-poo.ppt 2.ppt
 

Plus de hmosquera (9)

Calculo diferencial e integral taylor-wade-limusa
Calculo diferencial e integral   taylor-wade-limusaCalculo diferencial e integral   taylor-wade-limusa
Calculo diferencial e integral taylor-wade-limusa
 
Acad cómo desactivar el centro de comunicación en autocad
Acad cómo desactivar el centro de comunicación en autocadAcad cómo desactivar el centro de comunicación en autocad
Acad cómo desactivar el centro de comunicación en autocad
 
Curso de visual fox pro - Desprotejido para Imprimirlo
Curso de visual fox pro - Desprotejido para ImprimirloCurso de visual fox pro - Desprotejido para Imprimirlo
Curso de visual fox pro - Desprotejido para Imprimirlo
 
Comandos de configuracion vfp
Comandos de configuracion vfpComandos de configuracion vfp
Comandos de configuracion vfp
 
Curso de bases de datos y postgre sql
Curso de bases de datos y postgre sqlCurso de bases de datos y postgre sql
Curso de bases de datos y postgre sql
 
Visual fox pro 9.0 y sqlserver 2005
Visual fox pro 9.0 y sqlserver 2005Visual fox pro 9.0 y sqlserver 2005
Visual fox pro 9.0 y sqlserver 2005
 
Libro matematicas financieras para toma de decisiones empresariales
Libro matematicas financieras para toma de decisiones empresarialesLibro matematicas financieras para toma de decisiones empresariales
Libro matematicas financieras para toma de decisiones empresariales
 
Introducción al auto cad
Introducción al auto cadIntroducción al auto cad
Introducción al auto cad
 
Análisis de costos empresa constructora
Análisis de costos empresa constructoraAnálisis de costos empresa constructora
Análisis de costos empresa constructora
 

Dernier

2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
RigoTito
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
NancyLoaa
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
JonathanCovena1
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
JonathanCovena1
 

Dernier (20)

CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Abril 2024 - Maestra Jardinera Ediba.pdf
Abril 2024 -  Maestra Jardinera Ediba.pdfAbril 2024 -  Maestra Jardinera Ediba.pdf
Abril 2024 - Maestra Jardinera Ediba.pdf
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 

Paradigma orientado a objetos

  • 1. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -1- Año 2011 PARADIGMA ORIENTADO A OBJETOS  Disponible en: http://www.desy.de/gna/html/cc/Tutorial/Spanish/node6.htm I) INTRODUCCION Actualmente una de las áreas más candentes en la industria y en el ámbito académico es la orientación a objetos. La orientación a objetos promete mejoras de amplio alcance en la forma de diseño, desarrollo y mantenimiento del software ofreciendo una solución a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software: la falta de portabilidad del código y reusabilidad, código que es difícil de modificar, ciclos de desarrollo largos y técnicas de codificación no intuitivas. Un lenguaje orientado a objetos ataca estos problemas. Tiene tres características básicas: a) debe estar basado en objetos b) basado en clases y c) capaz de tener herencia de clases. Muchos lenguajes cumplen uno o dos de estos puntos; muchos menos cumplen los tres. La barrera más difícil de sortear es usualmente la herencia. El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicos como SmallTalk se basan en ella. Dado que la OOP. se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que está basado en objetos si soporta objetos como una característica fundamental del mismo. El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemos definir “un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización”. Esta definición especifica varias propiedades importantes de los objetos. En primer lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización jerárquica o de otro tipo.
  • 2. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -2- Año 2011 II) ESTRUCTURA DE UN OBJETO Un objeto puede considerarse como una especie de cápsula dividida en tres partes: 1 - RELACIONES 2 - PROPIEDADES 3 - METODOS Cada uno de estos componentes desempeña un papel totalmente independiente: II.1) RELACIONES: Las relaciones permiten que el objeto se inserte en la organización y están formadas esencialmente por punteros a otros objetos. Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organización. Las hay de dos tipos fundamentales: -Relaciones jerárquicas. Son esenciales para la existencia misma de la aplicación porque la construyen. Son bidireccionales, es decir, un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organización en la que ambos forman parte; asimismo, si un objeto es padre de otro, el segundo es hijo del primero (en la fig. 2, B es padre de D,E y F, es decir, D,E y F son hijos de B; en la fig. 3, los objetos B y C son padres de F, que a su vez es hijo de ambos). FIG. 2 –ORG. JERARQUICA SIMPLE (Un hijo tiene sólo un padre) A B C D E F A B C D E F OBJETO Propiedades Métodos
  • 3. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -3- Año 2011 FIG. 3 –ORG. JERARQUICA COMPLEJA (un hijo puede tener varios padres) Una organización jerárquica simple puede definirse como aquella en la que un objeto puede tener un solo padre, mientras que en una organización jerárquica compleja un hijo puede tener varios padres(F tiene a B y C como padres). -Relaciones semánticas. Se refieren a las relaciones que no tienen nada que ver con la organización de la que forman parte los objetos que las establecen. Sus propiedades y consecuencia solo dependen de los objetos en sí mismos (de su significado) y no de su posición en la organización. Se puede ver mejor con un ejemplo: supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definición de una palabra cualquiera. Supongamos que, en dicho diccionario, las palabras son objetos y que la organización jerárquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo. La raíz del diccionario podría llamarse TEMAS. De éste término genérico descenderán tres grandes ramas de objetos llamadas VIDA, MUNDO y HOMBRE. El primero (vida) comprenderá las ciencias biológicas: Biología y Medicina. El segundo (mundo), las ciencias de la naturaleza inerte: las Matemáticas, la Física, la Química y la Geología. El tercero (hombre) comprenderá las ciencias humanas: la Geografía, la Historia, etc. Estableceremos la relación trabajó entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajó en óptica (véase la fig. 4). La relación es, evidentemente, semántica, pues no establece ninguna connotación jerárquica entre NEWTON y OPTICA y su interpretación depende exclusivamente del significado de ambos objetos. FIG. 4 –TEMAS La existencia de esta relación nos permitirá responder a preguntas como: ¿Quién trabajó en óptica?- ¿En qué trabajó Newton?- ¿Quien trabajó en Física? Las dos primeras se deducen inmediatamente de la existencia de la relación trabajó. Para la tercera observamos que si Newton trabajó en óptica automáticamente sabemos que trabajó en Física, por ser óptica una rama de la Física (en nuestro diccionario, el objeto OPTICA es hijo del objeto FISICA). Entonces gracias a la OOP podemos responder a la tercera TEMAS VIDA MUNDO O HOMBRE MAT FIS QUIMBIO MED GEOG HIST Optica Newton No hay relación jerárquica entre óptica y Newton
  • 4. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -4- Año 2011 pregunta sin necesidad de establecer una relación entre NEWTON y FISICA, apoyándonos sólo en la relación definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA. De este modo se elimina toda redundancia innecesaria y la cantidad de información que tendremos que definir para todo el diccionario será mínima. II.1.2 – Clasificación de las relaciones II.1.2.a - Relación De-La-Especie Considérese que se ha escrito un programa para dibujar. Este programa debería permitir el dibujo de variados objetos tales como puntos, rectángulos, triángulos y muchos más. Por cada objeto, se provee una definición de clase. Por ejemplo, la clase Point define un punto por sus coordenadas: class Point { attributes: int x, y methods: setX(int newX) getX() setY(int newY) getY() } Se continúa definiendo clases de programa de dibujo con una clase para describir círculos. Un círculo define un punto central y un radio: class Circle { attributes: int x, y, radius methods: setX(int newX) getX() setY(int newY) getY() setRadius(newRadius) getRadius() } Comparando ambas definiciones de clase, podemos observar lo siguiente :  Ambas clases tienen dos elementos de datos x e y. En la clase Point estos elementos describen la posición del punto, en el caso de la clase Circle describen el centro del
  • 5. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -5- Año 2011 círculo. Así, x e y tienen el mismo significado en ambas clases: Describen la posición de su objeto asociado por medio de la definición de un punto.  Ambas clases ofrecen el mismo conjunto de métodos para obtener y definir el valor de los dos elementos de datos x e y.  La clase Circle "añade'' un nuevo elemento de datos radius y sus correspondientes métodos de acceso. Conociendo las propiedades de la clase Point: podemos describir un círculo como un punto más un radio más métodos para accederlo. Así, un círculo es "de-la-especie" Point. Sin embargo, un círculo es algo más "especializado". Ilustramos esto gráficamente en la Figura 5.1. Figura 5.1: Ilustración de la relación "de-la-especie". En ésta y en las siguientes figuras, las clases se dibujan usando rectángulos. Su nombre siempre empieza con una letra mayúscula. Las flechas indican la dirección de la relación, de ahí que se deba leer como "Circle es de-la-especie Point". II.1.2.b - Relación Es-Un(a) La relación anterior se usa al nivel de clase para describir las relaciones entre dos clases similares. Si creamos objetos de tales clases, nos referimos a su relación como una relación "es- un(a)". Desde el momento que la clase Circle es de la especie de la clase Point, una instancia de Circle, digamos acircle, es un point. Consecuentemente, cada círculo se comporta como un punto. Por ejemplo, se puede mover puntos en la dirección x al alterar el valor de x. Similarmente, se mueven círculos en ésta dirección al alterar su valor de x. La Figura 5.2 ilustra esta relación. En ésta y en las siguientes figuras, los objetos se dibujan usando rectángulos con las esquinas redondeadas. Su nombre consiste solamente de letras minúsculas. Figura 5.2: Ilustración de la relación "es-un(a)". II.1.2.c - Relación Parte-De Algunas veces se necesita poder construir objetos haciendo una combinación de otros. Esto se sabe por la programación procedimental, donde se tiene la estructura o registro para juntar variados tipos de datos.
  • 6. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -6- Año 2011 Regresemos al programa de dibujo. Ya se han creado varias clases para las figuras disponibles. Ahora se decide que se quiere tener una figura especial que representa un logotipo propio que consiste en un círculo y un triángulo. (Asumamos que ya se tiene definida un clase Triangle.) De este modo, el logo consiste en dos partes o, el círculo y el triángulo son parte-de logotipo: class Logo { attributes: Circle circle Triangle triangle methods: set(Point where) } Ilustramos esto con la Figura 5.3. Figura 5.3: Ilustración de la relación "parte-de". II.1.2.d - Relación Tiene-Un(a) Esta relación es justamente la inversa de la relación parte-de. Por lo tanto, podemos fácilmente añadir esta relación a la ilustración parte-de añadiendo flechas en la otra dirección (Figura 5.4). Figura 5.4: Ilustración de la relación "tiene-un(a)".
  • 7. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -7- Año 2011 II.2) PROPIEDADES Todo objeto puede tener cierto número de propiedades, cada una de las cuales tendrá, a su vez, uno o varios valores. En OOP, las propiedades corresponden a las clásicas "variables" de la programación estructurada. Son, por lo tanto, datos encapsulados dentro del objeto, junto con los métodos (programas) y las relaciones (punteros a otros objetos). Las propiedades de un objeto pueden tener un valor único o pueden contener un conjunto de valores más o menos estructurados (matrices, vectores, listas, etc.). Además, los valores pueden ser de cualquier tipo (numérico, alfabético, etc.) si el sistema de programación lo permite. Pero existe una diferencia con las "variables", y es que las propiedades se pueden heredar de unos objetos a otros. En consecuencia, un objeto puede tener una propiedad de maneras diferentes: -Propiedades propias. Están formadas dentro de la cápsula del objeto. -Propiedades heredadas. Están definidas en un objeto diferente, antepasado de éste (padre,"abuelo", etc.). A veces estas propiedades se llaman propiedad miembro porque el objeto las posee por el mero hecho de ser miembro de una clase. Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización. II.3) METODOS Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia. Los métodos son una operación que realiza acceso a los datos. Podemos definir método como un programa procedimental o procedural escrito en cualquier lenguaje, que está asociado a un objeto determinado y cuya ejecución sólo puede desencadenarse a través de un mensaje recibido por éste o por sus descendientes. Son sinónimos de 'método' todos aquellos términos que se han aplicado tradicionalmente a los programas, como procedimiento, función, rutina, etc. Sin embargo, es conveniente utilizar el término 'método' para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP, que afectan fundamentalmente a la Objeto 1 Objeto 2 Propiedades Métodos Propiedades Métodos Mensaje (invocación de un método)
  • 8. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -8- Año 2011 forma de invocarlo (únicamente a través de un mensaje) y a su campo de acción, limitado a un objeto y a sus descendientes, aunque posiblemente no a todos. Si los métodos son programas, se deduce que podrían tener argumentos, o parámetros. Puesto que los métodos pueden heredarse de unos objetos a otros, un objeto puede disponer de un método de dos maneras diferentes: -Métodos propios. Están incluidos dentro de la cápsula del objeto. -Métodos heredados. Están definidos en un objeto diferente, antepasado de éste (padre,"abuelo", etc.). A veces estos métodos se llaman métodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase. III - OBJETO (Resúmen) Los objetos soportan una serie de características específicas de los mismos:  Se agrupan en grupos denominados clases  Contienen datos internos que definen su estado actual.  Soportan ocultamiento de datos.  Pueden heredar propiedades de otros objetos.  Pueden comunicarse con otros objetos enviando o pasando mensajes.  Tienen métodos que definen su comportamiento Un objeto es una entidad lógica que contiene datos y un código especial que indica como manipular los datos. El uso de un objeto impone a veces castigos al momento de la ejecución que en ocasiones pueden degradar seriamente el diseño de un programa. Los objetos son construcciones de programación que se obtienen a partir de entidades llamadas clases. El programador tiene la responsabilidad absoluta de crear clases propias, pero también puede tener acceso a las clases desarrolladas por otros. Ejemplo: diseño de un Objeto. class nomina {nomina empleado; char nombre[30]; float salario; }; (nomina es una clase ) (empleado es un objeto) Los objetos son ejemplos de clases. Nombre Salario Empleado 1 Empleado 2 . . . . . . . . . . Empleado n Class Nómina de Personal Objetos
  • 9. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -9- Año 2011 IV - CONCEPTO DE CLASE Cada objeto es un ejemplar de una clase a la que pertenece. Todos los ejemplares de la misma clase tienen el mismo comportamiento (es decir invocan al mismo método) como respuesta a una solicitud similar. Una clase es un tipo especial de datos, y esta orientado a creación de objetos y que consta de unos miembros que pueden ser todas o funciones privadas o públicas. “Una clase es un tipo de dato que contiene uno o más elementos llamados dato miembro, y cero, una o más funciones que manipulan esos datos (llamados función miembro). Una clase se puede definir con una estructura (struct), una unión (unión) o una clase (class).” La sintaxis de una clase es: class nombre_clase { miembro_1; //lista de datos miembros miembro_2 miembro_3 funcion_miembro_1( ); // funciones miembro conocidas funcion_miembro_2 ( ); // funciones como métodos Objeto 1 Objeto 2 Objeto n Clase A
  • 10. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -10- Año 2011 IV.1 - Identificadores de diseño de una clase Para usar una clase, primero hay que declararla, como se hace en el caso de las estructuras. La declaración de una clase puede aparecer sólo una vez en un programa, tal y como las estructuras. Esta es una declaración de una clase simple: class counter { long count;  Variable miembro de la clase public: void SetCount(long); long GetValue( ); }; -La palabra clave class introduce una declaración de clase. -Después aparece el nombre de la clase. -Las clases contienen no sólo declaraciones de variables, sino también definiciones de funciones completas. -Las funciones contenidas en clases pueden ser tan largas y complejas como uno desee que lo sean. -Se considera que las variables declaradas dentro de una clase pertenecen a esa clase. En ciertas circunstancias, las variables pueden compartirse entre las diferentes instancias de una clase. -Existe garantía de que los identificadores de variables y funciones contenidos en una clase no chocan con los identificadores que se usan en otras. Básicamente una clase es un mundo con identificadores propios únicos. IV.2- Cuerpo de una Clase La variable count se define dentro del cuerpo de la clase. Por lo tanto, count recibe el nombre de variable miembro de la clase.
  • 11. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -11- Año 2011 Cualquier variable definida en una clase tiene campo de acción. El campo de acción de la clase no está disponible, es decir, que este punto de declaración es una variable final de la declaración de la clase. Es un error intentar el acceso a una variable miembro después de la declaración de la clase, como se puede apreciar en el código siguiente: class counter { long count; public: count = 3; //error: count no se encuentra definida aquí. IV.3- Uso de una Clase Para usar una clase se debe definir un objeto con ella. Las variables de una clase se definen tan solo como variables de tipo estructura o variables escalares. Para definir la variable de la clase people de tipo counter, se utiliza esta notación: Counter people “Las variables instanciadas a partir de clases son los objetos”. En general, es imposible usar una clase directamente. Las contadas excepciones a esta regla se ilustran más adelante. Para el objeto people, esta es la forma en que lo podría utilizar un programa: Void main ( ) { counter people; //inicializar el objeto people. SetValue(0); // verificar que se borre long value = people.GetValue( ); } “Una clase es un tipo especial de datos, y esta orientada a la creación de objetos y que consta de unos miembros que pueden ser datos o funciones privadas o publicas”.
  • 12. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -12- Año 2011 IV.4- Componentes de una Clase Para poder definir una clase se debe tomar en cuenta que consta de dos partes: una declaración y una implementación. . La declaración lista los miembros de la clase. . La implementación o cuerpo define las funciones de la clase. class nomina {nomina empleado; char nombre[30]; float salario; }; (nomina es una clase ) (empleado es un objeto) …………………………………………………….. class contador{ long cuenta; public: void leervalor(long); long obtenervalor( ); }; ………………………………………………….. Implementación de una clase void contador::leerValor(long valor) { cuenta = valor, } long contador::obtenerValor( ) { return cuenta;} } Declaración de una clase Funciones miembro de la clase
  • 13. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -13- Año 2011 V- ENCAPSULAMIENTO Y OCULTACIÓN Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP. Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuida la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información. Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto, deben realizarse a través de mensajes dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas órdenes será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla. El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construido, sus métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilización de programas. VI- ORGANIZACIÓN JERARQUICA DE LOS OBJETOS En principio, los objetos forman siempre una organización jerárquica, en el sentido de que ciertos objetos son superiores a otros de cierto modo. Existen varios tipos de jerarquías: serán simples cuando su estructura pueda ser representada por medio de un "árbol". En otros casos puede ser más compleja. En cualquier caso, sea la estructura simple o compleja, podrán distinguirse en ella tres niveles de objetos. -La raíz de la jerarquía. Se trata de un objeto único y especial. Este se caracteríza por estar en el nivel más alto de la estructura y suele recibir un nombre muy genérico, que indica su categoría especial, como por ejemplo objeto madre, Raíz o Entidad. -Los objetos intermedios. Son aquellos que descienden directamente de la raíz y que a su vez tienen descendientes. Representan conjuntos o clases de objetos, que pueden ser muy generales o muy especializados, según la aplicación. Normalmente reciben nombres genéricos que denotan al conjunto de objetos que representan, por ejemplo, VENTANA, CUENTA, FICHERO. En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase.
  • 14. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -14- Año 2011 -Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen descendientes. Suelen llamarse casos particulares, instancias o items porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen. VII- POLIMORFÍSMO Una de las características fundamentales de la OOP es el polimorfísmo, que no es otra cosa que la posibilidad de construir varios métodos con el mismo nombre, pero con relación a la clase a la que pertenece cada uno, con comportamientos diferentes. Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes. Estos objetos recibirían el mismo mensaje global pero responderían a él de formas diferentes; por ejemplo, un mensaje "+" a un objeto ENTERO significaría suma, mientras que para un objeto STRING significaría concatenación ("pegar" strings uno seguido al otro) VII.1) Demonios Es un tipo especial de métodos, relativamente poco frecuente en los sistemas de OOP, que se activa automáticamente cuando sucede algo especial. Es decir, es un programa, como los métodos ordinarios, pero se diferencia de estos porque su ejecución no se activa con un mensaje, sino que se desencadena automáticamente cuando ocurre un suceso determinado: la asignación de un valor a una propiedad de un objeto, la lectura de un valor determinado, etc. Los demonios, cuando existen, se diferencian de otros métodos por que no son heredables y porque a veces están ligados a una de las propiedades de un objeto, mas que al objeto entero. VIII - HERENCIA Con la herencia podemos hacer uso de las relaciones de-la-especie y es-un(a). Como se describió anteriormente, las clases que son de-la-especie de otra clase comparten propiedades de esta última. En nuestro ejemplo con el punto y el círculo, podemos definir un círculo, el cuál hereda de punto: class Circle inherits from Point { atrributes: int radius methods: setRadius(int newRadius) getRadius() }
  • 15. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -15- Año 2011 La clase Circle hereda todos los elementos de datos y métodos de la clase Point. No hay necesidad de definirlos dos veces: Solamente usamos los ya existentes (y familiares) datos y definiciones de métodos. Al nivel de objeto ahora podemos usar un círculo justamente como habríamos usado un punto, debido a que un círculo es-un(a) punto. Por ejemplo, podemos definir un objeto círculo (acircle) y establecer sus coordenadas del punto central: Circle acircle acircle.setX(1) /* Heredado de Point */ acircle.setY(2) acircle.setRadius(3) /* Añadido por Circle */ "Es-un(a)" también implica que podemos usar un círculo en cualquier circunstancia donde se pueda usar un punto. Por ejemplo, se puede escribir una función o un método, digamos move(), el(la) cuál debe mover un punto en la dirección x: move(Point apoint, int deltax) { apoint.setX(apoint.getX() + deltax) } Debido a que círculo hereda de punto, se puede usar esta función con un argumento círculo para mover su punto central y, a partir de ahí, todo el círculo : Circle acircle ... move(acircle, 10) /* Mover el círculo al mover */ /* su punto central */ Tratemos de formalizar el término "herencia" : Definición (Herencia) “Herencia es el mecanismo que permite que un clase A herede propiedades de una clase B. Decimos "A hereda de B". Objetos de la clase A tienen así acceso a los atributos y métodos de la clase B sin necesidad de redefinirlos. La siguiente definición describe dos términos con los que podemos hacer referencia a las clases involucradas cuando se usa la herencia.” Definición (Superclase/Subclase) Si la clase A hereda de la clase B, entonces B es la superclase de A. A es subclase de B. Los objetos de una subclase pueden ser usados en las circunstancias donde son usados los objetos de la superclase correspondiente. Esto se debe al hecho que los objetos de la subclase comparten el mismo comportamiento que los objetos de la superclase. En la literatura también se pueden encontrar otros términos para "superclase" y para "subclase". Las superclases también son llamadas clases padres. Las subclases pueden ser llamadas también clases hijas o simplemente clases derivadas.
  • 16. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -16- Año 2011 Por supuesto, también se puede heredar de una subclase, haciendo que esta clase sea la superclase de la nueva subclase. Esto conduce a una jerarquía de relaciones superclase/subclase. Si se dibuja esta jerarquía, se obtiene una gráfica de herencia. Un esquema común consiste en usar flechas para indicar la relación de herencia entre clases u objetos. En nuestros ejemplos hemos usado "hereda-de". Consecuentemente, la flecha empieza desde la subclase hacia la superclase, como se ilustra en la Figura 5.5. Figura 5.5: Una gráfica de herencia sencilla. En la literatura también se puede encontrar ilustraciones donde las flechas se dibujan del modo contrario. La dirección en la que se usan las flechas dependen de como el autor correspondiente las haya decidido entender. De cualquier manera, en este apunte, las flechas siempre apuntan hacia la superclase. En las secciones siguientes, las flechas indican "hereda-de". VII .1 - Herencia Múltiple Un mecanismo importante de orientación a objetos es la herencia múltiple. La herencia múltiple no significa que múltiples subclases compartan la misma superclase. Tampoco significa que una subclase herede de una clase que es a su vez subclase de otra clase. “La herencia múltiple significa que una subclase puede tener más de una superclase. Esto permite que la subclase herede propiedades de más de una superclase y –mezclar- sus propiedades”. Considérese por ejemplo nuevamente nuestro programa de dibujo. Suponiendo que ya tenemos una clase String que nos permite el manejo adecuado de texto. Podría tener, por ejemplo, un método append para añadir otro texto. En este programa, nos gustaría usar esta clase para añadir texto a los objetos que se pudieran dibujar. También sería bueno usar rutinas ya existentes tales como move() para mover el texto a donde fuera necesario.
  • 17. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -17- Año 2011 En consecuencia, es razonable permitir que un texto para dibujarse tenga un punto que defina su localización dentro del área de dibujo. Por lo tanto derivamos una nueva clase DrawableString que hereda propiedades de Point y de String como se ilustra en la Figura 5.6. Figura 5.6: Derivar un string desplegable que herede propiedades de Point y de String. En nuestro pseudo lenguaje, escribimos esto, simplemente separando las diferentes superclases con comas : class DrawableString inherits from Point, String { attributes: /* Todos heredados de superclases */ methods: /* Todos heredados de superclases */ } Podemos usar objetos de la clase DrawableString como ambos: puntos y strings.  Debido a que drawablestring es-un(a) point podemos mover dichos objetos: DrawableString dstring ... move(dstring, 10) ... Desde el momento que son string, podemos añadirles otro texto: dstring.append("La flores color azul ...") Podemos definir la herencia múltiple : Definición (Herencia Múltiple) Si la clase A hereda de más de una clase, p.ej. A hereda de B1, B2, ..., Bn, hablamos de herencia múltiple. Esto puede presentar conflictos de nomenclatura en A si al menos dos de sus superclases definen propiedades con el mismo nombre. La definición de arriba presenta conflictos de nomenclatura los cuáles ocurren si más de una superclase de una subclase usan el mismo nombre para ambos, atributos o métodos. Por ejemplo, supongamos que la clase String define un método setX() que
  • 18. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -18- Año 2011 pone el string en una secuencia de "X" caracteres. Se produce la pregunta ¿Que debería ser heredado por DrawableString? ¿La versión de Point, de String o ninguna de las dos? Estos conflictos pueden ser resueltos de al menos dos maneras :  El orden en el cuál las superclases son provistas, definen que propiedad será accesible por el nombre causante del conflicto. Los otros quedarán "escondidos".  Las subclases deben resolver el conflicto proveyendo una propiedad con el nombre y definiendo como usar los de sus superclases. La primera solución no es muy conveniente ya que presentan consecuencias implícitas dependiendo del orden en el cuál las clases heredan unas de otras. Para el segundo caso, las subclases deben redefinir explícitamente las propiedades que están involucradas en conflictos de nomenclatura. Un tipo especial de conflicto de nomenclatura se presenta si una clase D hereda en forma múltiple de las superclases B y C que a su vez son derivadas de una superclase A. Esto conduce a una gráfica de herencia como se muestra en la Figura 5.7. Figura 5.7: Un conflicto de nomenclatura presentado por una superclase compartida por superclases usadas en herencia múltiple. Cabe la pregunta acerca de que propiedades hereda realmente la clase D de sus superclases B y C. Algunos lenguajes de programación existentes resuelven esta gráfica de herencia especial derivando D con  las propiedades de A más  las propiedades de B y C sin las propiedades que han heredado de A. Consecuentemente, D no puede presentar conflictos de nomenclatura con los nombres en la clase A. Sin embargo, si B y C añaden propiedades con el mismo nombre, D entra en un conflicto de nomenclatura.
  • 19. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -19- Año 2011 Otra posible solución es que D herede de ambas trayectorias de herencia. En esta solución, D tiene dos copias de las propiedades de A: una heredada de B y otra de C. Aunque la herencia múltiple es un poderoso mecanismo en orientación a objetos, los problemas que se presentan con los conflictos de nomenclatura ha llevado a varios autores a "condenarla". Debido a que los resultados de la herencia múltiple siempre puede ser lograda usando herencia simple, algunos lenguajes orientados a objetos no permiten siquiera su uso. Sin embargo, usada con cuidado, bajo algunas condiciones la herencia múltiple provee una manera eficiente y elegante de formular cosas. VIII - BENEFICIOS Y PROBLEMAS QUE SE OBTIENEN DEL DESARROLLO CON OOP VIII.1- REUTILIZACION DE CODIGO Día a día los costos del Hardware decrecen. Así surgen nuevas áreas de aplicación cotidianamente: procesamiento de imágenes y sonido, bases de datos multimediales, automatización de oficinas, ambientes de ingeniería de software, etc. Aún en las aplicaciones tradicionales encontramos que definir interfases hombre- máquina "a-la-Windows" suele ser bastante conveniente. Lamentablemente, los costos de producción de software siguen aumentando; el mantenimiento y la modificación de sistemas complejos suele ser una tarea trabajosa; cada aplicación, (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo, etc. Todos estos problemas aún no han sido solucionados en forma completa. Pero como los objetos son portables (teóricamente) mientras que la herencia permite la reusabilidad del código orientado a objetos, es más sencillo modificar código existente porque los objetos no interaactúan excepto a través de mensajes; en consecuencia un cambio en la codificación de un objeto no afectará la operación con otro objeto siempre que los métodos respectivos permanezcan intactos. “La introducción de tecnología de objetos como una herramienta conceptual para analizar, diseñar e implementar aplicaciones permite obtener aplicaciones más modificables, fácilmente extendibles y a partir de componentes reusables”. Esta reusabilidad del código disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea más intuitivo porque la gente piensa naturalmente en términos de objetos más que en términos de algoritmos de software. VIII.2 - Problemas derivados de la utilización de OOP en la actualidad Un sistema orientado a objetos, por lo visto, puede parecer un paraíso virtual. El problema sin embargo surge en la implementación de tal sistema. Muchas compañías oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es
  • 20. MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE -20- Año 2011 ajena a los programadores actuales. Específicamente los siguientes temas suelen aparecer repetidamente: a) Curvas de aprendizaje largas. Un sistema orientado a objetos ve al mundo en una forma única. Involucra la conceptualización de todos los elementos de un programa, desde subsistemas a los datos, en la forma de objetos. Toda la comunicación entre los objetos debe realizarse en la forma de mensajes. Esta no es la forma en que están escritos los programas orientados a objetos actualmente; al hacer la transición a un sistema orientado a objetos la mayoría de los programadores deben capacitarse nuevamente antes de poder usarlo. b) Dependencia del lenguaje. A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos, en la práctica existen muchas dependencias. Muchos lenguajes orientados a objetos están compitiendo actualmente para dominar el mercado. Cambiar el lenguaje de implementación de un sistema orientado a objetos no es una tarea sencilla; por ejemplo C++ soporta el concepto de herencia múltiple mientras que SmallTalk no lo soporta; en consecuencia la elección de un lenguaje tiene ramificaciones de diseño muy importantes. c) Determinación de las clases. Una clase es un molde que se utiliza para crear nuevos objetos. En consecuencia es importante crear el conjunto de clases adecuado para un proyecto. Desafortunadamente la definición de las clases es más un arte que una ciencia. Si bien hay muchas jerarquías de clase predefinidas usualmente se deben crear clases específicas para la aplicación que se este desarrollando. Luego, en 6 meses ó 1 año se da cuenta que las clases que se establecieron no son posibles; en ese caso será necesario reestructurar la jerarquía de clases devastando totalmente la planificación original. d) Performance. En un sistema donde todo es un objeto y toda interacción es a través de mensajes, el tráfico de mensajes afecta la performance. A medida que la tecnología avanza y la velocidad de microprocesamiento, potencia y tamaño de la memoria aumentan, la situación mejorará; pero en la situación actual, un diseño de una aplicación orientada a objetos que no tiene en cuenta la performance no será viable comercialmente. Idealmente, habría una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos. Debería existir una metodología fácil de aprender e independiente del lenguaje, y fácil de reestructurar que no drene la performance del sistema.