Beruflich Dokumente
Kultur Dokumente
El Objeto
El objeto es la entidad en torno a la cual gira la POO. Un objeto es un ejemplar
concreto de una clase, como por ejemplo el curso de metodologa de la
programacin es un curso concreto dentro de todos los tipos de cursos que pueden
existir. Un objeto pertenece a una clase, por lo tanto dispondr de los atributos
(datos) y operaciones (mtodos) de la clase a la que pertenece. Un objeto responde
al comportamiento definido por las operaciones de la clase a la que pertenece. Es
decir, si la clase coche dispone del atributo color y del mtodo arrancar, un coche
concreto tendr un color, y podr arrancar, exclusivamente.
Un objeto se puede ver como una "cpsula" de datos y algoritmos que trabajan
sobre esos datos. Un objeto no puede acceder directamente a sus datos (atributos).
Los atributos son slo accesibles desde la implementacin de los mtodos de una
clase. Un objeto no puede "manipular" sus propios datos, para ello estn los
mtodos de la clase de dicho objeto: el comportamiento (mtodos) de un objeto
puede variar el valor (estado) de sus datos (atributos). Por ejemplo, nunca
debemos hacer lo siguiente: miCoche.color := 'rojo'. Para esto definiremos mtodos
que
actualicen
el
valor
de
los
atributos
de
un
objeto,
por
ejemplo: miCoche.ponerColor('rojo').
En la POO, un objeto no es algo "eterno", se instancian (crean) y se destruyen.
Una vez que se haya instanciado un objeto puede recibir mensajes. Los objetos
pueden instanciarse de forma esttica o de forma dinmica (recordar estos
conceptos de captulos anteriores). Un objeto esttico comienza su existencia una
vez es declarado (instanciacin de objetos estticos), sin embargo, un objeto
dinmico no comienza su existencia al ser declarado, sino al recibir un espacio de
memoria (instanciacin dinmica de objetos). Por ejemplo:
Los objetos "se declararn" como atributos de las clases, en las clasulas var de los
mtodos o en la lista de parmetros de los mtodos. El nico objeto que debe ser
"declarado" en el programa principal ser el de la clase raz de toda la jerarqua de
clases (por cuestiones del lenguaje Pascal orientado a objetos). Los objetos
estticos existen durante la ejecucin del programa. Los objetos dinmicos existen
mientras no sean destruidos (liberacin de la memoria del objeto), mediante la
sentencia dispose.
Tras ser instanciado, un objeto consta de los atributos de la clase a la que
pertenece, y puede recibir mensajes. Dicho objeto determinar a qu mtodo de su
clase corresponde dicho mensaje. Un objeto no podr recibir mensajes
correspondientes a mtodos de una clase a la qe no pertenezca. Por ejemplo:
La Clase
Una clase es una descripcin de datos y operaciones que describen el
comportamiento de cierto tipo de elementos. Por lo tanto, para que pueda haber
objetos, antes deben haberse definido las clases a las que pertenecern dichos
objetos. No tiene sentido un objeto sin una clase, ya que el objeto tiene los
atributos de la clase a la que pertenece, y recibe mensajes correspondientes a
mtodos de la clase a la que pertenece.
Una clase se divide en una parte pblica y en una parte privada. El nombre de la
clase debe ser nico. Antes de continuar, recordar cmo era una librera (UNIT) en
Pascal. Tiene una parte donde se declaran las cabeceras de los subprogramas
(ineterface) que prodrn usarse desde los ficheros que usen la librera, y otra parte
donde se implementan dichos subprogramas (implementation).
Parte pblica
Describe a qu operaciones responden los objetos de una clase (cmo se
comportan los objetos). En esta parte de la clase se declaran las cabeceras de
los mtodos de la clase que podrn ser "invocados" por los objetos. Es decir, si un
mtodo se declara en la parte pblica, podr ser "invocado" por un objeto de dicha
clase, de lo contrario no podr ser "invocado" por un objeto. Es la parte "visible" de
la clase, la interfaz de la clase.
Parte privada
Describe los datos de la clase y cmo las operaciones manipulan dichos datos. Esta
parte de la clase es donde se oculta (encapsula) la informacin de la clase: datos e
implementacin de mtodos declarados o no en la parte pblica de la clase. Es una
parte "no visible", cada objeto de una determinada clase tiene sus atributos (datos)
y sus mtodos.
Abstraccin
Herencia
La herencia es un mecanismo exigido a cualquier lenguaje que pretenda ser
orientado a objetos. Consideraremos la herencia como la transmisin de los
mtodos y atributos de una clase a otra. Gracias a la herencia se pueden
establecerjerarquas entre clases. Establecer una jerarqua es un proceso
subjetivo, que depende del programador y de los matices de apreciacin de cada
uno.
La herencia nos permite definir una jerarqua en la que existirn clases
padre yclases hijo, pudindo ser una clase padre de otra clase, e hijo de otra
clase a la vez. No deben definirse jerarquas de herencia en la que una clase sea
padre e hijo de la misma clase. Existen 2 tipos de herencia: La herencia simple y
la herencia mltiple. En la herencia simple una clase slo puede tener una clase
padre, en la herencia mltiple, una clase puede tener ms de una clase padre. Por
ejemplo:
En la siguiente figura se muestra una jerarqua de clases, con herencia simple de 2
clases vertebrado e invertebrado, que heredan de la clase serVivo.
Cuando una clase hereda de otra, la clase padre "transmite" todos sus atributos y
mtodos a la clase hija.
Clase abstracta
Al construir una jerarqua de herencia puede darse el caso de que ciertas
operaciones de la clase padre no pueden ser completadas por diferentes motivos, o
que dichas operaciones se hagan de una forma diferente en cada clase hija. Por
ejemplo, en una clase serVivo existir un mtodo comer, pero ese mtodo ser
diferente en una clase hija perro (los perros comen con la boca), y en una clase
hija pjaro, ya que los pjaros comen con el pico (salvo una mutacin extraa...).
Por lo tanto, una clase ser abstracta si tiene algn mtodo diferido, es decir,
declarado pero no definido. No podr instanciarse ningn objeto de una clase
abstracta.
Redefinicin de mtodos
Una clase hija de una clase abstracta puede redefinir los mtodos diferidos de su
clase padre abstracta.
Nota: Una clase hija de una clase abstracta no tiene porqu redefinir
los mtodos diferidos de la clase padre, podra ser una clase nieta de
la clase abstracta la que hiciera la redefinicin. Lo que es obligatorio es
redefinir un mtodo diferido en alguna clase descendiente de una
clase abstracta.
El mtodo debe redefinirse con los mismos parmetros que el mtodo diferido, de
lo contrario se estara definiendo otro mtodo (sobrecarga). Es aqu donde aparece
el concepto de super. Esta palabra reservada hace referencia a un mtodo
perteneciente a la clase padre de la clase del objeto en cuestin.
Polimorfismo
Concepto de polimorfismo
Esta caracterstica permite definir distintos comportamientos para un mtodo
dependiendo de la clase sobre la que se realize la implementacin. En todo
momento tenemos un nico medio de acceso, sin embargo se podr acceder a
mtodos distintos.
Veamos el siguiente ejemplo, en el que se define una clase forma de la que se
heredan las clases crculo y cuadrado.
estamos ampliando este contrato aadiendo mas funcionalidades. Por tanto cuando
creamos esa nueva clase hacemos uso de dos mecanismos. Por un lado
la herencia para reutilizar las partes comunes de la super-clase. Y por otro
el polimorfismo, es decir el cambio en la forma en la que se implementa el
contrato de la superclase. Como vemos al escribir una subclase podemos
sobreescribir el contrato aadiendo nuevas funcionalidades, pero no cambiarlo.
A la hora de implementar el polimorfismo tendremos dos mecanismos de los que
echar mano para sobreescribir una clase: reemplazar la implementacin de un
mtodo o aadir funcionalidades a un mtodo.
Continuando
con
el
ejemplo
de Publicacion,
habamos
definido
subclases Libro yRevista, vamos a ver cmo se implementan estas subclases:
dos
Ventajas de la
Programacin Orientada
a Objetos
Vamos a ver las ventajas ms importantes de la programacin orientada a objetos:
Reusabilidad. Cuando hemos diseado adecuadamente las clases, se pueden usar en
distintas partes del programa y en numerosos proyectos.
Mantenibilidad. Debido a las sencillez para abstraer el problema, los programas
orientados a objetos son ms sencillos de leer y comprender, pues nos permiten ocultar
detalles de implementacin dejando visibles slo aquellos detalles ms relevantes.
Modificabilidad. La facilidad de aadir, suprimir o modificar nuevos objetos nos permite
hacer modificaciones de una forma muy sencilla.
Fiabilidad. Al dividir el problema en partes ms pequeas podemos probarlas de manera
independiente y aislar mucho ms fcilmente los posibles errores que puedan surgir.
La programacin orientada a objetos presenta tambin algunas desventajas como pueden ser:
Cambio en la forma de pensar de la programacin tradicional a la orientada a objetos.
La ejecucin de programas orientados a objetos es ms lenta.
La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y entrenamiento.
C++
C#
Clarion
Clipper (lenguaje de programacin) (Versin 5.x con librera de objetos
Class(y))
D
Object Pascal (Delphi)
Gambas
Harbour
Eiffel
Java
JavaScript (la herencia se realiza por medio de la programacin basada en
prototipos)
Lexico (en castellano)
Objective-C
Ocaml
Oz
R
Perl (soporta herencia mltiple. La resolucin se realiza en preorden, pero
puede
modificarse
al
algoritmo linearization
C3 por
medio
del
mdulo Class::C3 en CPAN)
PHP (a partir de su versin 5)
PowerBuilder
Python
Ruby
Smalltalk (Proyecto investigativo. Influenci a Java.)
Magik (SmallWorld)
Vala
VB.NET
Visual FoxPro (en su versin 6)
Visual Basic 6.0
Visual Objects
XBase++
Lenguaje DRP
Lenguaje
de
programacin
por Twitter) http://www.scala-lang.org/page.jsp