Anda di halaman 1dari 9

Conceptos del Trabajo Escrito: Historia y Ventajas del POO. Complejidad.

Manejo de la
complejidad, Modelado del mundo real, Objetos, Comportamiento, Identidad, Clase, Mtodo,
Mensaje, Herencia, Agregacin, Polimorfismo, Tipo, Rol. Propiedades: abstraccin,
encapsulamiento, modularidad y persistencia. Constructores y Destructores

Introduccin
La programacin orientada a objetos (POO, u OOP segn sus siglas en ingls) es un paradigma
de programacin que usa objetos en sus interacciones, para disear aplicaciones y programas
informticos.
Est basada en varias tcnicas, incluyendo herencia, cohesin, abstraccin, polimorfismo,
acoplamiento y encapsulamiento. Su uso se populariz a principios de la dcada de 1990. En la
actualidad, existe una gran variedad de lenguajes de programacin que soportan la orientacin a
objetos.
Roles Un rol es uno de los extremos de una asociacin al que se le puede asignar un nombre.
cdigoAeropuerto nombreAeropuerto Aeropuerto DescripcinVuelo nmeroVuelo salidaPrevista
duracinPrevista destino origen 0..* 0..* Los nombres de rol son especialmente tiles en el
recorrido de las asociaciones debido a que se pueden tratar como pseudo-atributos:
unaDescripcinVuelo.origen hace referencia al aeropuerto de origen del vuelo.
unaDescripcinVuelo.destino hace referencia al aeropuerto en el que finaliza el vuelo. 13019
Diseo de bases de datos p. 27/52 Roles Ya que el rol es un pseudo-atributo, el nombre de rol no
puede entrar en contradiccin con cualquier otro atributo o rol de la clase que lo origina. Los
nombres de rol son opcionales si el modelo no es ambigo. La ambigedad puede aparecer cuando:
Se dan mltiples asociaciones entre las mismas
AGREGACIN
Una agregacin es una relacin que representa a los objetos compuestos. Un objeto es compuesto si
se compone a su vez de otros objetos. La agregacin de objetos permite describir modelos del
mundo real que se componen de otros modelos, que a su vez se componen de otros modelos.
Este es un concepto que se utiliza para expresar tipos de relaciones entre objetos parte-de (partof) o tiene-un(has-a). El objeto componente, tambin a veces denominado continente o contenedor,
es un objeto agregado que se compone de mltiples objetos.

Historia
La Programacin Orientacin a Objetos (P.O.O.) surge en Noruega en1967 con un lenguaje llamado
Simula 67, desarrollado por Krinsten Nygaard y Ole-Johan Dahl, en el centro de clculo noruego.
Simula 67 introdujo por primera vez los conceptos de clases, corrutinas y subclases (conceptos muy
similares a los lenguajes Orientados a Objetos de hoy en da). El nacimiento de la Programacin
Orientacin a Objetos en Europa pas inadvertido para gran parte de los programadores. Uno de

los problemas de inicio de los aos setentas era que pocos sistemas lograban terminarse, pocos
se terminaban con los requisitos iniciales y no todos los que se terminaban cumpliendo con los
requerimientos se usaban segn lo planificado. El problema consista en cmo adaptar el software
a nuevos requerimientos imposibles de haber sido planificados inicialmente.
Este alto grado de planificacin y previsin es contrario a la propia realidad. El hombre aprende y
crea a travs de la experimentacin, no de la planeacin. La Orientacin a Objetos brinda estos
mtodos de experimentacin, no exige la planificacin de un proyecto por completo antes de
escribir la primera lnea de cdigo

Ventajas

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.

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

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.

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.

Abstraccin
Podramos definir la abstraccin como la "accin de aislar mentalmente o considerar por separado
las cualidades de un objeto, considerar un objeto en su esencia". Qu quiere decir esta
definicin? A travs de la abstraccin conseguimos extraer las cualidades principales sin
detenernos en los detalles. Conseguimos a partir de un tema determinado, generalizar y obtener
una visin global del tema. Cuando montamos un ordenador ensamblamos los componentes
necesarios para construir el ordenador. Utilizamos una placa base, un disco duro, memoria, etc.

Manejamos estos dispositivos a un nivel funcional. Es decir, abstraemos las funciones de cada
dispositivo para trabajar con ellos. En ningn momento nos paramos a pensar cmo funcionan
internamente o de cuntos condensadores y transistores est compuesto.
La abstraccin es una herramienta muy potente en programacin, pues reduce considerablemente
el trabajo de implementacin y aumenta la portabilidad del cdigo. La programacin orientada a
objetos aporta elementos para abstraer el problema en dos sentidos:
Por un lado nos permite referirnos a objetos para representar la realidad,describiendo el
problema en trminos del problema en lugar de en trminos de la solucin. En un
programa de gestin comercial, tendremos el objeto cliente o el objeto factura, que no
son ms que representaciones de otros objetos en el espacio del problema.
La clave de la programacin orientada a objetos est en abstraer los mtodos y los datos
comunes a un conjunto de objetos y agruparlos en una clase. Gracias a este nivel de
abstraccin, aadir o eliminar un objeto nuevo supondr muy poco esfuerzo.
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.
La clase forma define los mtodos dibujar y borrar. En la definicin de estos mtodos se
implementar el cdigo comn a todos los objetos de la clase. Sin embargo cuando definamos las
clases hijas, crculo y cuadrado, ser necesario modificar estos mtodos para adaptarlos a las
nuevas subclases. El mtodo de la clase padre implementa aquellas acciones comunes. Las
clases hijas aaden las operaciones particulares que necesiten. Cuando utilicemos los mtodos de
la clase forma no tendremos que hacer distincin entre cuadrados y crculos. Gracias al
polimorfismo se ejecutar el mtodo adecuado en funcin de la subclase a la que pertenezca el
objeto.
En la declaracin de una clase estamos definiendo el conjunto de mtodos y campos que son
accesibles desde fuera de una clase o lo que a menudo se denominacontrato de la clase. Este
contrato determina cual va a ser la funcionalidad de la clase. Pero cuando extendemos una clase
para crear otra 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

Encapsulamiento
El encapsulamiento consiste en unir en la clase las caractersticas ycomportamientos, esto es,
las variables y mtodos. Es tener todo esto es una sola entidad. En los lenguajes estructurados

esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstraccin y


el ocultamiento que veremos a continuacin.
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos
a las clases como cajas negras donde slo se conoce el comportamiento pero no los detalles
internos, y esto es conveniente porque nos interesar ser conocer qu hace la clase pero no ser
necesario saber cmo lo hace
Modularidad
Es la propiedad que permite subdividir una aplicacin en partes ms pequeas
(llamadas mdulos), cada una de las cuales debe ser tan independiente como sea posible de la
aplicacin en s y de las restantes partes. Estos mdulos se pueden compilar por separado, pero
tienen conexiones con otros mdulos. Al igual que la encapsulacin, los lenguajes soportan la
modularidad de diversas formas.

4. Envo de Mensajes
Un objeto es intil si est aislado. El medio empleado para que un objeto interacte con otro son
los mensajes. Hablando en trminos un poco ms tcnicos, los mensajes son invocaciones a
los mtodos de los objeto
Persistencia
Es la propiedad por la cual la existencia de un objeto trasciende en el tiempo (esto es, el objeto
sigue existiendo despues de que su creador deja de existir) o en el espacio (esto es, la localizacin
del objeto cambia respecto a la direccin en la que fue creado)

Constructores
Un mtodo constructor es aqul que un objeto llama cuando es creado, es decir, cuando se
construye.
Un constructor tiene las siguientes caractersticas:
Siempre tienen el mismo nombre que la clase
No tienen tipo de regreso
El objetivo de un constructor es el de inicializar un objeto cuando ste es creado. Asignaremos los
valores iniciales as como los procesos que sta clase deba realizar.
Se utiliza para crear tablas de mtodos virtuales y poder as desarrollar el polimorfismo, una de
las herramientas de la programacin orientada a objetos. Al utilizar un constructor, el compilador
determina cual de los objetos va a responder al mensaje (virtual) que hemos creado.
Tiene un tipo de acceso, un nombre y un parntesis.

Un constructor es una funcin especial que sirve para construir o inicializar objetos. En C++ la
inicializacin de objetos no se puede realizar en el momento en que son declarados; sin embargo,
tiene una caracterstica muy importante y es disponer de una funcin llamada constructor que
permite inicializar objetos en el momento en que se crean.
Un constructor es una funcin que sirve para construir un nuevo objeto y asignar valores a sus
miembros dato. Se caracteriza por:
- Tener el mismo nombre de la clase que inicializa
- Puede definirse inline o fuera de la declaracin de la clase
- No devuelve valores
- Puede admitir parmetros como cualquier otra funcin
- Puede existir ms de un constructor, e incluso no existir
Si no se define ningn constructor de una clase, el compilador generar un constructor por
defecto. El constructor por defecto no tiene argumentos y simplemente sita ceros en cada byte de
las variables instancia de un objeto. Si se definen constructores para una clase, el constructor por
defecto no se genera.
Un constructor del objeto se llama cuando se crea el objeto implcitamente: nunca se llama
explcitamente a las funciones constructoras. Esto significa que se llama cuando se ejecuta la
declaracin del objeto. Tambin, para objetos locales, el constructor se llama cada vez que la
declaracin del objeto se encuentra. En objetos globales, el constructor se llama cuando se
arranca el programa.
El constructor por defecto es un constructor que no acepta argumentos. Se llama cuando se
define una instancia pero no se especifica un valor inicial.
Se pueden declarar en una clase constructores mltiples, mientras tomen parte diferentes tipos o
nmero de argumentos. El compilador es entonces capaz de determinar automticamente a qu
constructor llamar en cada caso, examinando los argumentos.
Los argumentos por defecto se pueden especificar en la declaracin del constructor. Los
miembros dato se inicializarn a esos valores por defecto, si ningn otro se especifica.

Destructores
Un destructor es una funcin miembro con igual nombre que la clase, pero precedido por el
carcter ~. Una clase slo tiene una funcin destructor que, no tiene argumentos y no devuelve
ningn tipo. Un destructor realiza la operacin opuesta de un constructor, limpiando el
almacenamiento asignado a los objetos cuando se crean. C++ permite slo un destructor por clase.
El compilador llama automticamente a un destructor del objeto cuando el objeto sale fuera del
mbito. Si un destructor no se define en una clase, se crear por defecto un destructor que no hace
nada.

Complejidad
Podemos dividir el problema de la complejidad en dos grandes apartados.
Datos: La complejidad viene reflejada por el tipo de datos a tratar, por las relaciones que puedan
tener los datos entre si, etc.
Funciones: El mtodo para la obtencin de nuevos datos es complicado o requiere un esfuerzo de
programacin importante.
Aunque tratados como grupos independientes, ambos estn generalmente interrelacionados. De
esta forma una estructura de datos compleja suele ir acompaada de un conjunto de funciones de
diseo complejo.
Asimismo, una mayor abstraccin se traduce en unas instrucciones mas potentes y un soporte de
estructuras de datos ms complejas. Esto a menudo se traduce en que el compilador (programa
que traduce el programa introducido por el usuario en cdigo ejecutable por la mquina) ha de
introducir una cantidad grande de cdigo auxiliar para poder ejecutar el cdigo fuente.
Si ha programado en C o en Turbo Pascal, habr observado que los ejecutables son en general de
pequeo tamao. Un simple programa <<Hola mundo>>, clsico de programacin. Nunca es
mayor de seis lneas de cdigo y su ejecutable es siempre inferior a 10 Kbytes. Si tomamos Clipper
el programa no ocupa ms de una lnea pero ms de 200 Kbytes.

Comportamiento de un objeto
Comportamiento es como un objeto actua y reacciona, en trminos de sus cambios de estado y de
los mensajes que intercambia.
El comportamiento de un objeto representa su actividad externamente visible y testable. Son las
operaciones que una clase realiza (llamadas tambin mensajes) las que dan cuenta de como se
comporta la clase. Por operacin se denota el servicio que una clase ofrece a sus clientes. Un
objeto puede realizar cinco tipos de operaciones sobre otro, con el proposito de provocar una
reaccin:
1.
2.
3.
4.
5.

Modificador: altera el estado de un objeto.


Selector: accede al estado de un objeto, sin alterarlo.
Iterador: permite a todas las partes de un objeto ser accedidas en un orden.
Constructor: crea un objeto y/o inicializa su estado.
Destructor: libera el estado de un objeto y/o destruye el objeto.

C++ soporta, ademas de las operaciones, subprogramas libres. En la terminologa de C++ las
operaciones que un cliente puede realizar sobre un objeto se declaran como funciones miembro.

Identidad: La

identidad

permite

distinguir

los

objetos

de

forma

no

ambigua,

independientemente de su estado. Para la identificacin de un objeto se emplean nombres


definidos por el usuario y direcciones o referencias a memoria
El conjunto de caractersticas que definen un objeto puede esquematizarse mediante la expresin:

OBJETO = ESTADO + COMPORTAMIENTO +IDENTIDAD

Tipos y subprogramas "abstract".


Un tipo "abstract" es un tipo "tagged" diseado para servir exclusivamente como cabecera de una
jerarqua de tipos, sin que se puedan declarar objetos con ese tipo. Se declara usando la palabra
reservada "abstract".
type TA is
type TA is

abstract
abstract

tagged
tagged

private;
record
...

end record;
Un subprograma "abstract" es uno sin cuerpo, declarado usando la palabra reservada "abstract"
con la intencin de que sea sustituido ms tarde por un heredero. Si el subprograma "abstract" es
una operacin primitiva de un tipo "tagged", ste tambin debe ser "abstract".
procedure P(...) is abstract;
Cuando se deriva un tipo de un tipo "abstract", si el tipo derivado tambin es "abstract" (lo que hay
que explicitar, ya que la condicin de "abstract" no se hereda) el subprograma heredado tambin
es "abstract". Si, por el contrario, el tipo derivado no es "abstract", los subprogramas "abstract" de
su padre deben ser sustituidos por versiones no "abstract".
Tipos "Controlled".
Los tipos Controlled y Limited_Controlled, definidos en el paquete Ada.Finalization ofrecen tres
operaciones interesantes: Initialize, Adjust no aplicable a los Limited_Controlled y Finalize. En
principio, estas tres operaciones no hacen nada, pero pueden redefinirse para cada tipo que se
derive de Controlled, o, salvo Adjust, de Limited_Controlled. Si se redefinen, deben declararse en
la misma zona donde se fija la estructura de representacin del tipo y permiten una gestin
adecuada de aspectos clave de la implementacin.
Lo tipos Controlled y Limited_Controlled de Ada efectan una llamada automtica al
procedimiento Finalize cuando una variable alcanza el final de su tiempo de vida. Un programador
puede sobrecargar el procedimiento Finalize para que destruya las partes de la estructura del tipo
que se encuentren en memoria dinmica.
El procedimiento Adjust sirve para resolver los problemas de la asignacin. Segn establece el
"Manual de Referencia de Ada", cuando se realiza una asignacin, primero se asigna el valor a una
variable temporal y se llama a Adjust para esta variable, luego se finaliza la variable destino de la
asignacin, y, por ltimo, se asigna la variable temporal a la destino y se llama a Adjust para esta
ltima y a Finalize para la temporal.
Puesto que Adjust se llama siempre automticamente despus de una asignacin bit a bit, puede
emplearse para realizar una copia separada de los datos que se encuentren en memoria dinmica.
El uso de la variable temporal en el proceso es para prever el caso de que una variable se asigne a
s misma la finalizacin del destino destruye la fuente, pero los compiladores pueden hacer
optimizaciones que incluyen no utilizar la variable temporal cuando se asignan variables diferentes,
y no hacer nada cuando una variable se asigna a s misma. Con estas optimizaciones, el peor

escenario posible ocurre cuando a una variable se le asigna una modificacin de s misma, nico
caso en que hay que realizar todos los pasos. Las llamadas automticas a Finalize aseguran que
no queda memoria perdida.
El procedimiento Initialize se llama automticamente cuando se crea una variable que no tiene
inicializaciones por defecto, y sirve para realizar inicializaciones que sean necesarias para empezar
a trabajar de una forma segura con la variable

Conclusion

La programacin orientada a objetos permite la optimizacion del cdigo generado


gracias a que mediante tecnicas de herenci, atributos staticos entre otros
permiten, que el cdigo sea generico de manera que sea reutilizable.
Mediante las tcinca aprendida en el presente curso podemos establecer una
solucin primitiva de un problema real, tan solo con relacionarlo con objetos
lgicos que sran usados para el desarrollo del sofware.
Podemos dar a conocer de una forma sencilla los mecanismos que se usan en este
nivel de programacin, a personas que deseen una explicacion rpida y sencilla de
lo que es la programacin orientada a objetos.
Tenemos los conocimientos necesarios como para enfrentar un problema real y
desarrollo en otro lenguaje de programacin, pues consevimos la idea de que el
lenguaje C es la base de la programacin.
Al trabajar con la programacin orientada a objetos sea esta desarrollada en otras
plataformas de programacin o en lenguaje C, sabemos las formas de lograr un
mejor rendimiento del equipo a controlar y aplicar soluciones sencillas, de manera
que sea fcilment digeribles para el usuario y/o destinatario del trabajo final.

Anda mungkin juga menyukai