Documente Academic
Documente Profesional
Documente Cultură
I) INTRODUCCION
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.
Un objeto puede considerarse como una especie de cápsula dividida en tres partes:
OBJETO
1 - RELACIONES Propiedades
2 - PROPIEDADES
3 - METODOS
Métodos
Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objeto
relacionarse con aquellos que forman parte de la misma organización.
A B C
D E F
FIG. 2 –ORG. JERARQUICA SIMPLE (Un hijo tiene sólo un padre)
A B C
D E F
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.
TEMAS
Optica
No hay relación jerárquica
entre óptica y Newton Newton
FIG. 4 –TEMAS
¿Quién trabajó en óptica?- ¿En qué trabajó Newton?- ¿Quien trabajó en Física?
este modo se elimina toda redundancia innecesaria y la cantidad de información que tendremos
que definir para todo el diccionario será mínima.
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.
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
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.
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".
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.
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.
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)
}
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).
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:
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.
Métodos Mé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:
Un objeto es una entidad lógica que contiene datos y un código especial que indica como
manipular los datos.
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.
Empleado 1
char nombre[30]; Objetos Empleado 2
float salario;
}; (nomina es una clase ) ..........
(empleado es un objeto)
Empleado n
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.
Clase
A
Una clase es un tipo especial de datos, y está 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 datos
miembros, 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).”
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 {
-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.
La variable count se define dentro del cuerpo de la clase. Por lo tanto, count recibe el
nombre de variable miembro de la clase.
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.
class counter {
long count;
public:
count = 3; //error: count no se encuentra definida aquí.
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
Void main ( )
{
counter people;
//inicializar el objeto people.
SetValue(0);
// verificar que se borre
long value = people.GetValue( );
}
Para poder definir una clase se debe tomar en cuenta que consta de dos partes: una
declaración y una implementación.
char nombre[30];
Declaración de una clase
float salario;
}; (nomina es una clase )
(empleado es un objeto)
……………………………………………………..
class contador{
long cuenta;
Funciones miembro de
public: la clase
void leervalor(long);
long obtenervalor( );
};
…………………………………………………..
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.
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.
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 caracteriza 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.
-Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen
descendientes. Suelen llamarse casos particulares, instancias o ítems porque representan los
elementos del conjunto representado por la clase o subclase a la que pertenecen.
VII- POLIMORFÍSMO
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
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
methods:
setRadius(int newRadius)
getRadius()
}
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.
Circle acircle
acircle.setX(1) /* Heredado de Point */
acircle.setY(2)
acircle.setRadius(3) /* Añadido por Circle */
Circle acircle
...
move(acircle, 10) /* Mover el círculo al mover */
/* su punto central */
Tratemos de formalizar el término "herencia" :
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.
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.
DrawableString dstring
...
move(dstring, 10)
...
Desde el momento que son string, podemos añadirles otro texto:
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.
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.
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.
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.
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.