TAREA
DE INVESTIGACION
INTRODUCCION
La
programación Orientada a objetos (POO) es una forma especial de programar, más
cercana a como expresaríamos las cosas en la vida real que otros tipos de
programación.
Con
la POO tenemos que aprender a pensar las cosas de una manera distinta, para
escribir nuestros programas en términos de objetos, propiedades, métodos y
otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña
base que permita soltarnos un poco con este tipo de programación.
DEFINICION DE
CLASES
Las clases son declaraciones de objetos, también se
podrían definir como abstracciones de objetos. Esto quiere decir que la
definición de un objeto es la clase. Cuando programamos un objeto y definimos
sus características y funcionalidades en realidad lo que estamos haciendo es
programar una clase. En los ejemplos anteriores en realidad hablábamos de las
clases coche o fracción porque sólo estuvimos definiendo, aunque por encima,
sus formas.
PROPIEDADES EN
CLASES
Las propiedades o atributos son
las características de los objetos. Cuando definimos una propiedad normalmente
especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las
propiedades son algo así como variables donde almacenamos datos relacionados
con los objetos.
MÉTODOS EN LAS CLASES
Son las funcionalidades asociadas
a los objetos. Cuando estamos programando las clases las llamamos métodos. Los
métodos son como funciones que están asociadas a un objeto.
¿QUE SON LOS
ATRIBUTOS?
Los atributos son las características individuales
que diferencian un objeto de otro y determinan su apariencia, estado u otras
cualidades. Los atributos se guardan en variables denominadas de instancia, y
cada objeto particular puede tener valores distintos para estas variables.
Las variables de instancia también denominados
miembros dato, son declaradas en la clase pero sus valores son fijados y
cambiados en el objeto.
Además de las variables de instancia hay variables
de clase, las cuales se aplican a la clase y a todas sus instancias. Por
ejemplo, el número de ruedas de un automóvil es el mismo cuatro, para todos los
automóviles.
¿QUE SON LOS
METODOS Y RELACIONES?
En la programación, un método es una subrutina cuyo código es definido en una clase y puede pertenecer tanto a una clase, como es el caso de los métodos de clase o estáticos, como a un objeto, como es el caso
de los métodos de instancia. Análogamente a
los procedimientos en lenguajes
imperativos, un método consiste generalmente de una serie de sentencias
para llevar a cabo una acción, un juego de parámetros de entrada que regularán
dicha acción o, posiblemente, un valor de salida (o valor de retorno) de algún
tipo.
Como ya
se mencionó, los métodos de instancia están relacionados con un objeto en
particular, mientras que los métodos estáticos o de clase (también denominados
métodos compartidos), están asociados a una clase en particular. En una
implementación de constructores, siendo estos métodos de
instancia especiales llamados automáticamente cuando se crea una instancia de
alguna clase. En Java y C++ se
distinguen por tener el mismo nombre de las clases a la que están asociados.
Lenguajes como Smalltalk no requieren constructores ni destructores.
Los métodos
de acceso son un tipo de método normalmente pequeño y simple que se
limita a proveer información acerca del estado de un objeto. Aunque introduce
una nueva dependencia, la utilización de métodos es preferida a acceder
directamente a la información para proveer de una nueva capa de abstracción (programación orientada a
objetos). Por ejemplo, si una clase que modela una cuenta bancaria
provee de un método de acceso "obtenerBalance()" en
versiones posteriores de la clase se podría cambiar el código de dicho método
substancialmente sin que el código dependiente de la clase tuviese que ser
modificado (un cambio sería necesario siempre que el tipo de dato devuelto
por el método cambie). Los métodos de acceso que pueden cambiar el estado de un
objeto son llamados, frecuentemente, métodos de actualización ó métodos
de mutación; a su vez, los objetos que proveen de dichos métodos son
denominados objetos mutables.
RELACIONES
Las relaciones permiten
que el objeto se inserte en la organización y están formadas esencialmente por
punteros a otros objetos.
Relaciones
entre clases
Representan tipos de compartición entre clases, o
relaciones semánticas.
1. Asociación. Indica relaciones de mandato
bidireccionales (Punteros ocultos en C++). Conlleva dependencia
semántica y no establece una dirección de dependencia. Tienen cardinalidad.
2. Herencia. Por esta relación una clase
(subclase) comparte la estructura y/o comportamiento definidos en una (herencia
simple) o más (herencia múltiple) clases, llamadas superclases.
o
Representa una relación del tipo "es un"
entre clases.
o
Una subclase aumenta o restringe el comportamiento
o estructura de la superclase (o ambas cosas).
o
Una clase de la que no existen ejemplos se denomina
{\it abstracta}.
o
C++ declara como virtuales todas
aquellas funciones que quiere modificar en sus subclases.
3. Agregación. Representa una relación del
tipo "tener un" entre clases. Cuando la clase contenida no existe
independientemente de la clase que la contiene se denomina agregación por
valory además implica contenido físico, mientras que si existe
independientemente y se accede a ella indirectamente, es agregación por
referencia.
4. Uso. Es un refinamiento de la
asociación donde se especifica cual es el cliente y cual el servidor de ciertos
servicios, permitiendo a los clientes acceder sólo a las interfaces públicas de
los servidores, ofreciendo mayor encapsulación de la información.
5. Ejemplificación Se usa en lenguajes que
soportan genericidad (declaración de clases parametrizadas y argumentos tipo template).
Representa las relaciones entre las clases parametrizadas, que admiten
parámetros formales, y las clases obtenidas cuando se concretan estos
parámetros formales, ejemplificados o inicializados con un ejemplo.
6. Metaclases Son clases cuyos ejemplos
son a su vez clases. No se admiten en C++.
Relaciones entre clases y objetos
- Todo objeto es el ejemplo de
una clase, y toda clase tiene 0 ó más objetos.
- Mientras las clases son
estáticas, con semántica, relaciones y existencia fijas previamente a la
ejecución de un programa, los objetos se crean y destruyen rápidamente
durante la actividad de una aplicación.
El diseño de
clases y objetos es un proceso incremental e iterativo. Debe asegurar la
optimización en los parámetros:
- Acoplamiento: Grado de
acoplamiento entre módulos.
- Cohesión: Mide el grado de
conectividad entre elementos de un módulo, y entre objetos de una clase.
- Suficiencia: Indica que las
clases capturan suficientes características de la abstracción para
conseguir un comportamiento e interacción eficiente y con sentido.
- Completitud: Indica que la
interface de la clase captura todo el significado característico de una
abstracción, escrito en el mínimo espacio.
- Primitividad: Las
operaciones deben implementarse si dan acceso a una representación
fundamental de la abstracción. Cuales son operaciones primitivas y cuales
no (se pueden realizar a partir de otras) es un asunto subjetivo y afecto
a la eficiencia en la implementación.



