SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
Programación orientada a objetos
De Wikipedia, la enciclopedia libre
Saltar a navegación, búsqueda
La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un
paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones
y programas de computadora. Está basado en varias técnicas, incluyendo herencia,
modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a principios de la
década de 1990. Actualmente son muchos los lenguajes de programación que soportan la
orientación a objetos.
•
Introducción [editar]
Los objetos son entidades que combinan estado, comportamiento e identidad:
• El estado está compuesto de datos, serán uno o varios atributos a los que se
habrán asignado unos valores concretos (datos).
• El comportamiento está definido por los procedimientos o métodos con que puede
operar dicho objeto, es decir, qué operaciones se pueden realizar con él.
• La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con
otras palabras, es su identificador (concepto análogo al de identificador de una
variable o una constante).
La programación orientada a objetos expresa un programa como un conjunto de estos
objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y
módulos más fáciles de escribir, mantener y reutilizar.
De esta forma, un objeto contiene toda la información que permite definirlo e
identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos
de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez,
los objetos disponen de mecanismos de interacción llamados métodos que favorecen la
comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en
los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las
que no se separan ni deben separarse el estado y el comportamiento.
Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por
la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para
poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente
en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo
podría producir el hábito erróneo de crear clases contenedoras de información por un lado
y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría
realizando una programación estructurada camuflada en un lenguaje de programación
orientado a objetos.
Esto difiere de la programación estructurada tradicional, en la que los datos y los
procedimientos están separados y sin relación, ya que lo único que se busca es el
procesamiento de unos datos de entrada para obtener otros de salida. La programación
estructurada anima al programador a pensar sobre todo en términos de procedimientos o
funciones, y en segundo lugar en las estructuras de datos que esos procedimientos
manejan. En la programación estructurada sólo se escriben funciones que procesan datos.
Los programadores que emplean éste nuevo paradigma, en cambio, primero definen
objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí
mismos.
Origen [editar]
Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un
lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard
del Centro de Cómputo Noruego en Oslo. Al parecer, en este centro, trabajaban en
simulaciones de naves, y fueron confundidos por la explosión combinatoria de cómo las
diversas cualidades de diversas naves podían afectar unas a las otras. La idea ocurrió para
agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada
clase de objetos de definir sus propios datos y comportamiento. Fueron refinados más
tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera
versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente
dinámico en el cual los objetos se podrían crear y modificar "en marcha" en lugar de
tener un sistema basado en programas estáticos.
La programación orientada a objetos tomó posición como el estilo de programación
dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++,
una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al
auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a
objetos está particularmente bien adaptada. En este caso, se habla también de
programación dirigida por eventos.
Las características de orientación a objetos fueron agregadas a muchos lenguajes
existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La
adición de estas características a los lenguajes que no fueron diseñados inicialmente para
ellas condujo a menudo a problemas de compatibilidad y a la capacidad de
mantenimiento del código. Los lenguajes orientados a objetos "puros", por otra parte,
carecían de las características de las cuales muchos programadores habían venido a
depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos
lenguajes basados en métodos orientados a objetos, pero permitiendo algunas
características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un
temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido
esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a
la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en
su versión 5 se ha ido modificando y soporta una orientación completa a objetos,
cumpliendo todas las características propias de la orientación a objetos.
Conceptos fundamentales [editar]
La programación orientada a objetos es una nueva forma de programar que trata de
encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y
amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
• Clase: definiciones de las propiedades y comportamiento de un tipo de objeto
concreto. La instanciación es la lectura de estas definiciones y la creación de un
objeto a partir de ellas, (de c a d),Es la facilidad mediante la cual la clase D ha
definido en ella cada uno de los atributos y operaciones de C, como si eso
atributos y operaciones hubiesen sido definidos por la misma D.
• Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de
comportamiento o funcionalidad (métodos). Corresponden a los objetos reales del
mundo que nos rodea, o a objetos internos del sistema (del programa). Es una
instancia a una clase.
• Método: algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución
se desencadena tras la recepción de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un método puede producir un
cambio en las propiedades del objeto, o la generación de un "evento" con un
nuevo mensaje para otro objeto del sistema.
• Evento: un suceso en el sistema (tal como una interacción del usuario con la
máquina, o un mensaje enviado por un objeto). El sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente. También se puede definir
como evento, a la reacción que puede desencadenar un objeto, es decir la acción
que genera.
• Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno
de sus métodos con ciertos parámetros asociados al evento que lo generó.
• Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a
una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se
define como sus características predeterminadas, y cuyo valor puede ser alterado
por la ejecución de algún método.
• Estado interno: es una propiedad invisible de los objetos, que puede ser
únicamente accedida y alterada por un método del objeto, y que se utiliza para
indicar distintas situaciones posibles para el objeto (o clase de objetos).
• Componentes de un objeto:atributos, identidad, relaciones y métodos.
• Representación de un objeto: un objeto se representa por medio de una tabla o
entidad que esté compuesta por sus atributos y funciones correspondientes.
En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor
interno del atributo del objeto o de un estado interno, así como la "función" es un
procedimiento interno del método del objeto.
Características de la POO [editar]
Hay un cierto desacuerdo sobre exactamente qué características de un método de
programación o lenguaje le definen como "orientado a objetos", pero hay un consenso
general en que las características siguientes son las más importantes (para más
información, seguir los enlaces respectivos):
• Abstracción: Cada objeto en el sistema sirve como modelo de un "agente"
abstracto que puede realizar trabajo, informar y cambiar su estado, y
"comunicarse" con otros objetos en el sistema sin revelar cómo se implementan
estas características. Los procesos, las funciones o los métodos pueden también
ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para
ampliar una abstracción.
• Encapsulamiento: Significa reunir a todos los elementos que pueden
considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción.
Esto permite aumentar la cohesión de los componentes del sistema. Algunos
autores confunden este concepto con el principio de ocultación, principalmente
porque se suelen emplear conjuntamente.
• Principio de ocultación: Cada objeto está aislado del exterior, es un módulo
natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica
cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las
propiedades de un objeto contra su modificación por quien no tenga derecho a
acceder a ellas, solamente los propios métodos internos del objeto pueden acceder
a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de
un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones
inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los
datos internos del objeto de una manera controlada y limitando el grado de
abstracción. La aplicación entera se reduce a un agregado o rompecabezas de
objetos.
• Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden
compartir el mismo nombre, al llamarlos por ese nombre se utilizará el
comportamiento correspondiente al objeto que se esté usando. O dicho de otro
modo, las referencias y las colecciones de objetos pueden contener objetos de
diferentes tipos, y la invocación de un comportamiento en una referencia
producirá el comportamiento correcto para el tipo real del objeto referenciado.
Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama
asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios
más estáticos (en "tiempo de compilación") de polimorfismo, tales como las
plantillas y la sobrecarga de operadores de C++.
• Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando
una jerarquía de clasificación. Los objetos heredan las propiedades y el
comportamiento de todas las clases a las que pertenecen. La herencia organiza y
facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser
definidos y creados como tipos especializados de objetos preexistentes. Estos
pueden compartir (y extender) su comportamiento sin tener que reimplementar su
comportamiento. Esto suele hacerse habitualmente agrupando los objetos en
clases y estas en árboles o enrejados que reflejan un comportamiento común.
Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.
Lenguajes orientados a objetos [editar]
Entre los lenguajes orientados a objetos destacan los siguientes:
• ActionScript
• ActionScript 3
• Ada
• C++
• C#
• Clarion
• Lenguaje de programación D
• Object Pascal (Delphi)
• Harbour
• Eiffel
• Java
• JavaScript (la herencia se realiza por medio de la programación basada en
prototipos)
• Lexico (en castellano)
• Objective-C
• Ocaml
• Oz
• Lenguaje de programación R
• Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede
modificarse al algoritmo C3 por medio del módulo Class::C3 en CPAN)
• PHP (en su versión 5)
• Python
• Ruby
• Smalltalk
• Magik (SmallWorld)
• VB.NET
• Visual FoxPro
• XBase++
• Gambas
• Flex builder (adobe)
Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino
que son híbridos que combinan la POO con otros paradigmas.
Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object
REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de
programación clásico.
Un nuevo paso en la abstracción de paradigmas de programación es la Programación
Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de
maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en todo
el mundo.
Monografías.com
Programación Orientada a Objetos
Sistemas de Procesamiento de Datos
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 dificil de modificar, ciclos de desarrollo
largos y tecnicas de codificacion no intuituvas.
Un lenguaje orientado a objetos ataca estos problemas. Tiene tres características
basicas: debe estar basado en objetos, basado en clases y 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.
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:
Las relaciones permiten que el objeto se insterte en la organización y están
formadas esencialmente por punteros a otros objetos.
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.
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.
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á distribuída 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 ordenes 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
construído, 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.
Organización 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 tipos de jerarquías: serán simples cuando su estructura
pueda ser representada por medio de un "arbol". 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.
-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.
Veamos ahora en detalle los tres elementos mencionados en "Estructura de un
Objeto".
1. RELACIONES
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).
Una organización jerárquica simple puede definirse como aquella en la que un
objeto puede tener un solo padre, mientras que en una organizacion jerárquica
compleja un hijo puede tener varios 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.
Veamos un ejemplo: estableceremos la relación trabajo 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, pués
no establece ninguna connotación jerárquica entre NEWTON y OPTICA y su
interpretación depende exclusivamente del significado de ambos objetos.
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
trabajo. 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 pregunta sin
necesidad de establecer una relación entre NEWTON y FISICA, apoyandonos
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.
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 mas 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. Estan definidas en un objeto diferente, antepasado de
éste (padre,"abuelo", etc.). A veces estas propiedades se llaman propiedades
miembro porque el objeto las posee por el mero hecho de ser miembro de una
clase.
3. METODOS
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 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 incluídos dentro de la cápsula del objeto.
-Métodos heredados. Estan 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.
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)
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 autmá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.
CONSIDERACIONES FINALES
Beneficios que se obtienen del desarrollo con OOP
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 interaccionan 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 concepual 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 mas intuitivo porque la gente piensa
naturalmente en términos de objetos más que en términos de algoritmos de
software.
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 ajena a los programadores actuales.
Específicamente los siguientes temas suelen aparecer repetidamente:
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.
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 multiple mientras que SmallTalk no lo soporta; en consecuencia la
elección de un lenguaje tiene ramificaciones de diseño muy importamtes.
Determinacion 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.
Performance. En un sistema donde todo es un objeto y toda interaccion 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 situacion 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. Deberia existir una metodología fácil de aprender e independiente del
lenguaje, y facil de reestructurar que no drene la performance del sistema .
Monografías.com
Programación orientada a Objetos
(OOP, Object Oriented Programming)
1. Introducción
2. Objetos
3. Diseño de aplicaciones y elección de entorno.
4. Aplicaciones orientadas a objetos
5. Características de los lenguajes OOP
6. Panorámica de los lenguajes OOP
7. Bases de datos orientadas a objetos
8. Objetos y asociaciones.
9. La relación de herencia.
10. Bibliografía / infografía
Introducción
l término de Programación Orientada a Objetos indica más una forma de diseño y
una metodología de desarrollo de software que un lenguaje de programación, ya
que en realidad se puede aplicar el Diseño Orientado a Objetos (En inglés
abreviado OOD, Object Oriented Design), a cualquier tipo de lenguaje de
programación.
El desarrollo de la OOP empieza a destacar durante la década de lo 80 tomando
en cuenta la programación estructurada, a la que engloba y dotando al
programador de nuevos elementos para el análisis y desarrollo de software.
El propósito de este trabajo es explicar el diseño orientado a objeto y no una
explicación de su programación, puesto que no nos alcanzaría toda la currícula
para hacerlo.
Básicamente la OOP permite a los programadores escribir software, de forma que
esté organizado en la misma manera que el problema que trata de modelizar. Los
lenguajes de programación convencionales son poco más que una lista de
acciones a realizar sobre un conjunto de datos en una determinada secuencia. Si
en algún punto del programa modificamos la estructura de los datos o la acción
realizada sobre ellos, el programa cambia.
La OOP aporta un enfoque nuevo, convirtiendo la estructura de datos en el centro
sobre el que pivotan las operaciones. De esta forma, cualquier modificación de la
estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella,
siendo esta una de la diferencias radicales respecto a la programación
estructurada.
Para quienes no están familiarizados con la programación estructurada diré que
una de las bases de esta escuela de programación parte del diseño arriba – abajo.
En esta forma de diseño se descomponen los requerimientos del programa paso a
paso, hasta llegar a un nivel que permite expresarlos mediante procedimientos y
funciones. La OOP estructura los datos en objetos que pueden almacenar,
manipular y combinar información.
En resumen, la programación estructurada presta atención al conjunto de
acciones que manipulan el flujo de datos (desde la situación inicial a la final),
mientras que la programación orientada a objetos presta atención a la
interrelación que existe entre los datos y las acciones a realizar con ellos.
Muchos habrán oído comentarios sobre la incidencia de la OOP sobre la
programación convencional. Se ha llegado a decir que el cambio introducido por
la OOP es similar al producido por la aparición del ensamblador sobre el código
de máquina.
La OOP proporciona las siguientes ventajas sobre otros lenguajes de
programación
Uniformidad. Ya que la representación de los objetos lleva implica tanto el
análisis como el diseño y la codificación de los mismos.
Comprensión. Tanto los datos que componen los objetos, como los
procedimientos que los manipulan, están agrupados en clases, que se
corresponden con las estructuras de información que el programa trata.
Flexibilidad. Al tener relacionados los procedimientos que manipulan los datos
con los datos a tratar, cualquier cambio que se realice sobre ellos quedará
reflejado automáticamente en cualquier lugar donde estos datos aparezcan.
Estabilidad. Dado que permite un tratamiento diferenciado de aquellos objetos
que permanecen constantes en el tiempo sobre aquellos que cambian con
frecuencia permite aislar las partes del programa que permanecen inalterables en
el tiempo.
Reusabilidad. La noción de objeto permite que programas que traten las
mismas estructuras de información reutilicen las definiciones de objetos
empleadas en otros programas e incluso los procedimientos que los manipulan.
De esta forma, el desarrollo de un programa puede llegar a ser una simple
combinación de objetos ya definidos donde estos están relacionados de una
manera particular.
Uno de los puntos clave a remarcar en esta introducción es que la programación
orientada a objetos no sustituye a ninguna metodología ni lenguaje de
programación anterior. Todos los programas que se realizan según OOD se
pueden realizar igualmente mediante programación estructurada. Su uso en la
actualidad se justifica porque el desarrollo de todas las nuevas herramientas
basadas en un interface de usuario gráfico como Windows, OS/2, x-Windows, etc.
Es mucho más sencillo
OBJETOS
Características de los Objetos
Identidad del Objeto
La identidad expresa que aunque dos objetos sean exactamente iguales en sus
atributos, son distintos entre sí. De esta forma incluso una serie de Objetos
coches, recién fabricados son distintos los unos de los otros.
La afirmación anterior, aunque parece obvia, tiene importancia cuando
descendemos al nivel de programación. En este ámbito cada uno de los objetos
tiene un controlador pro el cual se identifica. Este puede ser una variable, una
estructura de datos, una cadena de caracteres, etc. El controlador será distinto
para cada uno de los objeto, aunque las referencias a éstos sean uniformes e
independientes del contenido, permitiendo crear agrupaciones de objetos con el
mismo tratamiento.
Clasificación
Con la clasificación comienza la verdadera programación orientada a objetos.
Ellos nos obliga a una abstracción del concepto de objeto denominada clase.
Las clases permiten la agrupación de objetos que comparten las mismas
propiedades y comportamiento. Si bien clase y objeto suelen usarse como
sinónimos, no lo son.
El esfuerzo del programador ante una aplicación orientada a objetos se centra en
la identificación de las clases, sus atributos y operaciones asociadas
Las propiedades de cada clase deben cumplir una serie de premisas
Las propiedades deber ser significativas dentro del entorno de la aplicación es
decir, deben servir para identificar claramente y de una manera única (y univoca)
a cada uno de los objetos
El número de propiedades de un objeto debe ser el mínimo para realizar todas las
operaciones que requiera la aplicación.
Definamos una clase rectángulo. Esta clase puede tener como atributos un punto
(x,y), la anchura (a) y la longitud (l). Las operaciones a realizar son: mover,
agrandar, reducir, et. ¿Es posible realizarlas con las propiedades de la clase?
Un análisis posterior nos indica que es posible la realización de estas operaciones
con los atributos definidos. Pero si incluimos la operación girar , vemos que con
las propiedades definidas para la clase esta operación no se puede realizar. Para
incluir esta nueva operación debemos redefinir las propiedades del objeto, en
este caso las coordenadas de los vértices.
Encapsulación y ocultación de datos
La capacidad de presentación de información dentro de un objeto se divide en
dos partes bien diferenciadas:
Interna: La información que necesita el objeto para operar y que es innecesaria
para los demás objetos de la aplicación. Estos atributos se denominada privados y
tienen como marco de aplicación únicamente a las operaciones asociadas al
objeto.
Externa La que necesitan el resto de los objetos para interactuar con el objeto
que definimos . Estas propiedades se denominan públicas y corresponde a la
información que necesitan conocer los restantes objetos de la aplicación respecto
del objeto definido para poder operar.
Podemos imaginarla encapsulación como introducir el objeto dentro de una caja
negra donde existen dos ranuras denominadas entrada y salida. Si introducimos
datos por la entrada automáticamente obtendrá un resultado en la salida. No
necesita conocer ningún detalle del funcionamiento interno de la caja.
El término encapsulación indica l capacidad que tienen los objetos de construir
una cápsula a su alrededor, ocultando la información que contienen (aquélla que
es necesaria para su funcionamiento interno, pero innecesaria para los demás
objetos) a las otras clases que componen la aplicación.
Aunque a primera vista la encapsulación puede parecer superflua, tengamos en
cuenta que existen muchas variables utilizadas de forma temporal: contadores y
variables que contienen resultados intermedios, etc. D no ser por la
encapsulación estas variables ocuparían memoria y podrían interferir en el
funcionamiento del resto de los objetos.
La encapsulación no es exclusiva de los lenguajes de programación orientados a
objetos. Aparece en los lenguajes basados en procedimientos (PASCAL, C,
COBOL, ETC) como una forma de proteger los datos que se manipulan dentro de
las funciones.
Los lenguajes OOP incorporan la posibilidad de encapsular también las
estructuras de datos que sirven como base a las funciones. Aportan por tanto un
nivel superior en cuanto a protección de información.
La encapsulación nos permite el uso de librerías de objetos para el desarrollo de
nuestros programas. Recordemos que las librerías son definiciones de objetos de
propósito general que se incorporan a los programas. Al ser el objeto
parcialmente independiente en su funcionamiento del programa en donde está
definido, ya que contiene y define todo lo que necesita para poder funcionar, es
fácil utilizarlo en los mas variados tipos de aplicaciones. Si aseguramos ,
depurando las propiedades y las operaciones dentro de la clase que el objeto
función bien dentro de una aplicación, con una correcta encapsulación el objeto
podrá funcionar en cualquier otra.
Otra de las ventajas de la encapsulación es que , al definir el objeto como una caja
negra con entradas y salida asociadas, en cualquier momento podemos cambiar
el contenido de las operaciones del objeto, de manera que no afecte al
funcionamiento general del programa.
La encapsulación está en el núcleo de dos grandes pilares de la construcción de
sistemas; mantenibilidad y reusabilidad.
Mantenibilidad
Cualidad que indica que un programa o sistema debe ser fácilmente modificable.
Es decir que los cambios en las condiciones externas (como la definición de una
nueva variable) implicarán modificaciones pequeñas en el programa / sistema. El
concepto de mantenibilidad implica que un programa, al igual que un ser vivo
debe ser capaz de adaptarse a un medio ambiente siempre cambiante.
Reusabilidad
Cualidad que nos indica que partes del programa ( en este caso objetos) pueden
ser reutilizados en la confección de otros programas. Ello implica que los objetos
definidos en un programa pueden ser extraídos del mismo e implantados en otro
sin tener que realizar modificaciones importantes en el código del objeto. El
objeto final es que el programador construya una librería de objetos que le
permita realizar programas basándose en la técnica de cortar y pegar. Esta extrae
(corta) código de otras aplicaciones ya realizadas y las implementa (pega) en la
aplicación a realizar donde, tras algunos retoques, la nueva aplicación estará lista
para funcionar. Como podrá observar el concepto de reusabilidad, permite
reducir el tiempo de realización , ganando en claridad, mantenibilidad y
productividad.
La encapsulación de datos se muestra como una herramienta poderosa que nos
permite ganar en tiempo de desarrollo y claridad, con el único coste adicional de
definir con precisión las entradas y salida de nuestras operaciones.
Poliformismo
El polimorfismo es una nueva característica aportada por la OOP. Esta propiedad
indica la posibilidad de definir varias operaciones con el mismo nombre,
diferenciándolas únicamente en los parámetros de entrada. Dependiendo del
objeto que se introduzca como parámetro de entrada, se elegirá automáticamente
cual de las operaciones se va a realizar.
Ya está habituado al operador <<suma>> que está presente en todos los
lenguajes de programación. Sin embargo, los operadores <<suma de
fracciones>> y <<suma de números complejos>> no existen en casi
ningún lenguaje de programación.
Los lenguajes OOP permiten definir un operador <<suma>> tal que reconozca
que tipo de objeto se le está aplicando, a través de operaciones de objetos.
Previamente deberá definir la fracción y el número complejo como una clase y la
operación suma como una operación de una clase.
Definiendo adecuadamente las operaciones suma de fracciones y suma de
números imaginarios, el operador suma devolverá, en el caso que los
operandos sean fracciones, una fracción y , en el caso de los números
imaginarios, otros número imaginario.
Es posible extender el concepto e incluso definir operaciones como suma de bases
de datos
El operador suma de base de datos. Aunque a primera vista la expresión C= A+B,
siendo A y B bases de datos, nos pudiera parecer una extraordinaria
simplificación, nos conduce a la pregunta: ¿Qué es la suma de una base d datos?
Consideremos varias posibilidades:
Introducción de registros: Lo que exige que A y B tengan la misma estructura.
Unión de campos: Aquellos campos que aparezcan en B pero no en A serán
añadidos a C
¿Alguna de estas dos opciones es verdaderamente una suma? Es decir ¿Cumple
las propiedades conmutativa, asociativa, de elemento neutro, etc.? ¿Qué ocurre si
sumo dos bases de datos con estructuras distintas?
Como puede observar, la definición de un operador sobre un tipo complejo de
datos, intentando utilizar identificadores de operadores de datos simples, puede
tener resultados impredecibles.
Una de las ventajas más importantes, sin entrar en la redefinición de operadores
es permitir la realización de las clases que definen un programa de forma
totalmente independiente al programa donde se utilizan. Gracias a la
encapsulación y el polimorfismo, aunque se utilicen los mismos nombre con las
operaciones en dos clases distintas, el programa reconoce a que clase se aplica
durante la ejecución.
Como se podrá observar el polimorfismo y la encapsulación de datos están
íntimamente ligados y nos permiten un mayor grado de mantenibilidad y
reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las
causas de la revolución que ha supuesto la introducción de los lenguajes
orientados a objetos dentro de la programación.
Herencia
La herencia es la última de las propiedades relativas a la OOP, Consiste en la
propagación de los atributos y las operaciones a través de distintas sub-clases
definidas a partir de una clase común.
Introduce, por tanto, una posibilidad de refinamiento sucesivo del concepto de
clase. Nos permite definir una clase principal y , a través de sucesivas
aproximaciones, cualquier característica de los objetos. A partir de ahora
definiremos como sub-clases todas aquellas clases obtenidas mediante
refinamiento de una (o varias) clases principales.
La herencia nos permite crear estructuras jerárquicas de clases donde es posible
la creación de sub-clases que incluyan nuevas propiedades y atributos. Estas sub-
clases admiten la definición de nuevos atributos, así como crear, modificar o
inhabilitar propiedades.
Para pensarlo de manera más fácil podemos abstraernos al siguiente ejemplo.
Pensemos en los distintos sub-modelo s asociados a un modelo básico de
automóvil. A partir de este modelo básico, los fabricantes introducen distintas
características (aire acondicionado, ABS, distintas tapicerías , acabados, etc.) que
crean sub – clases. Todas estas sub-clases tienen en común la estructura básica
(chasis , dirección , etc.) u varían sólo en algunos de sus componentes.
Asociemos a este tipo básico una clase cuyos atributos representen las piezas que
componen el coche. Las sub-clases aportarán sus propios atributos (en el caso de
vehículos con aire acondicionado, todos aquellas piezas que lo componen),
permitiendo la definición de todos los posibles modelos.
Además, es posible que una sub-clase herede atributos y propiedades de más de
una clase. Este proceso se denomina herencia múltiple y lo veremos con más
detalle en capítulos posteriores.
La herencia es, sin duda alguna, una de las propiedades más importantes de la
OOP, ya que permite, a través de la definición de una clase básica, ir añadiendo
propiedades a medida que sean necesarias y, además, en el sub-conjunto de
objetos que sea preciso.
La herencia permite que los objetos pueden compartir datos y comportamientos a
través de las diferentes sub-clases, sin incurrir en redundancia. Más importante
que el ahorro de código, es la claridad que aporta al identificar que las distintas
operaciones sobre los objetos son en realidad una misma cosa.
Conclusión.
Identidad, clasificación, polimorfismo y herencia caracterizan a los lenguajes
orientados a objetos. Cada uno de estos conceptos puede utilizarse aisladamente,
incluso aparecen en otras metodologías de programación, pero juntos se
complementan en una relación sinérgica. Los beneficios de la programación
orientada a objetos son más que los que pueden verse a simple vista. El énfasis en
las propiedades esenciales de un objeto, fuerza al desarrollador a pensar
cuidadosamente que es un objeto y que es lo que hace con el resultado de que el
sistema es normalmente más preciso, general y robusto que si pusiéramos el
énfasis en los procedimientos y los datos por separado
Construcción de clases
Tal como hemos definido con anterioridad, una clase de objeto describe a un
grupo de objetos con similares:
o Propiedades (atributos)
o Comportamientos (operaciones)
o Relaciones con otros objetos
La abreviatura clase es utilizada en lugar de clase de objetos. Los objetos difieren
en los valores asociados a sus atributos definidos dentro de la clase. Cada objeto
<<conoce>> cuál es su clase. La mayoría de los lenguajes orientados a objetos
pueden determinar a que clase pertenece un objeto durante la ejecución del
programa.
A continuación expondremos una serie de pasos para definir una clase.
Identificar los objetos.
Para ello examine la aplicación e identifique las distintas estructuras de datos,
algunos tips a tener en cuenta son los siguientes:
• El nombre de la aplicación a veces nos da la del nombre del objeto principal
• Los objetos software pueden imitar el mundo real, modelizando las
propiedades de los objetos a través de variables Cualquier propiedad de un
objeto puede ser identificada dentro del objeto correspondiente a través de
variables.
• Los objetos no se han de corresponder siempre con objetos físicos, sino que
también pueden ser entidades que se utilizan dentro de la construcción del
programa.
• Piense en el objeto en <<primera persona>>. Este truco nos puede identificar
claramente los atributos y sus operaciones asociadas: <<Soy un cuadrado y me
muevo, giro, agrando y reduzco. Las partes que me componen son los puntos
de mis vértices>>.
• Una clase es un tipo de dato que puede ser usado para declarar objetos, de la
misma forma que una estructura es un tipo definido por el usuario que puede
utilizarse para declarar variables.
Definir las operaciones
Defina las operaciones a partir de los objetos, examinando las distintas
operaciones asociadas a un conjunto de datos. Los atributos del objeto se deben
definir de tal manera que éstos satisfagan todos los requerimientos de cada una
de las operaciones.
A estas operaciones añada dos más: Crear y Destruir. Estas operaciones nos
servirán para inicializar y borrar el objeto dentro de la aplicación.
A partir de la definición de las propiedades, un objeto siempre debe ser capaz de
responder a estas tres preguntas: ¿Qué soy ?, ¿Qué hago? ¿Qué dejo ver al resto
del mundo?
Algunas de las operaciones sólo se aplicarán a determinados objetos
pertenecientes a las clases. Hemos visto que a través de la herencia podemos
<<especializar>> un sub conjunto de objetos creando una sub-clase.
Únicamente aquellas operaciones que sean comunes a todos los objetos de la
clase deben incluirse dentro de las operaciones de la clase. El resto, que
corresponden a las operaciones de sub-Grupos de objetos, se deben definir
dentro de la especializaciones de la clase.
Definir los atributos de los objetos
Una vez identificados los objetos, defina los atributos de la clase. Un atributo es
un valor almacenado en los objetos de la clase.
Aplicaciones orientadas a objetos
A lo largo de la historia de la programación, los lenguajes y las metodologías han
pasado de una relativa simplicidad a una complejidad creciente. Los lenguajes de
programación orientados a objetos pretenden aportar simplicidad a la tarea de
programación de grandes aplicaciones.
Cuando se crearon las primeras computadoras todavía no existían los lenguajes
de programación, tal como ahora los entendemos. El lenguaje ensamblador
puede considerarse como el primer lenguaje de programación propiamente
dicho. Permitía al usuario un diálogo más fluido con la máquina a través de
instrucciones que tenían relación directa con el conjunto de operaciones que la
máquina podía realizar.
A partir de este momento empezó la evolución de los lenguajes de programación.
_cada uno tenía su entorno definido y aunque en realidad todos los lenguajes son
polivalentes (en teoría, con cualquiera de ellos se puede desarrollar cualquier
programa de gestión o científico). Pronto apareció la especialización funcional.
Así, COBOL (Common Business Orientated Language) se introdujo como
lenguaje mainframe para el diseño de aplicaciones de gestión.; FORTRAN
(Formula Translator) para el diseño de aplicaciones científicas; APL (A
Programming Language) para el cálculo matemático, etc.
A medida que el software tomaba importancia, aparecieron los primeros
problemas relacionados con la programación. Al tiempo que aumenta el volumen
de un programa, disminuye el control del mismo por parte del programador y la
capacidad de este de dar mantenimiento.
En un intento de solucionar estos problemas aparecen las metodologías de
programación. Una metodología es un conjunto de reglas destinadas a simplificar
las tareas de diseño, estimación de costes, desarrollo y mantenimiento de un
sistema informático. A menudo se ven acompañadas con unas herramientas
(CASE: Computer Aided Software Engeneering) que permiten la elaboración
estructurada y documentada de los sistemas informáticos.
DISEÑO DE APLICACIONES Y ELECCIÓN DE ENTORNO.
En entorno de programación implica tanto el lenguaje de programación como al
empleo de una determinada metodología.
Los lenguajes de programación no se producen por generación espontánea y se
ven influidos en gran manera por la forma en la que los profesionales piensan que
se debe programar. De esta manera se crea un conjunto de reglas para simplificar
la tarea de programación. Generalizadas y codificadas, se convierten en
<<principios>> de los que surgen los lenguajes de programación en un afán por
darles soporte.
Estos <<principios>> son modelos que proporcionan técnicas que , a su vez,
deben aplicarse en el diseño e implementación de los programas. Estas técnicas
nos indican la forma de resolver los distintos problemas que surgen a la hora de
programar.
Decimos que un lenguaje de programación <<soporta>> un conjunto de
<<principios>> si el lenguaje simplifica la aplicación de estas técnicas. A estos
<<principios>> se les denomina metodologías de programación.
Las metodologías de programación son modelos sobre como diseñar e
implementar los programas. Diferentes modelos tienen como resultado
diferentes técnicas. Que cada técnica sea distinta no implica que una sea la
verdadera y que las demás falsas. Por el contrario, las metodologías se
complementan entre sí. Lo que todas las metodologías tienen en común es la
premisa de que hay que partir de abstracciones que corresponden a elementos del
problema a resolver, y que la implementación de la solución se debe realizar
mediante un conjunto de módulos preferiblemente reutilizables.
Las metodologías orientadas a objetos se centran en las estructuras de datos que
sin embargo se relegan a un segundo plano en los modelos procedurales. La base
de esta metodología es que una estructura de datos debe contener las operaciones
que los modifican. La técnica que se utiliza para obtener esta <<abstracción de
datos>> es la encapsulación de los mismos en una estructura conocida como
clase.
El accesos a los datos contenidos en la clase se realiza mediante las operaciones
que la propia clase define. Por tanto, la metodología orientada a objetos
complementa el punto de vista procedural de operaciones realizadas sobre un
flujo de datos, al asociar a cada dato el conjunto de operaciones que lo modifican.
Como podrá ver, ambos enfoques son complementarios.
Para ilustrar las diferencias entre las aproximaciones orientadas a
procedimientos y las orientadas a objetos, considere el diseño de un
<<compilador>>
El compilador es un programa que a partir de un conjunto de fichero fuente
(programa) construye el código objeto que posteriormente se convierte en
programa. Para realizar su trabajo, el compilador lee el fichero fuente y separa de
él las variables y las instrucciones. Las variables constituyen la tabla de símbolos
del programa, mientras que las instrucciones se organizan en un árbol sintáctico
donde se plasman todas la referencias que realizan los mandatos y funciones
entre sí.
El modelo mejor establecido es el basado en funciones (procedural) que trata
de la construcción de un programa como una colección de funciones. Las
metodologías proporcionan una gruía sobre cómo diseñar, organizar e
implementar las funciones que componen un programa. El método de diseño es
la descomposición funcional que identifica las funciones como los pasos a seguir
en la resolución de un problema. La organización en archivos permite que las
funciones se agrupen módulos separados, mientras que las técnicas de
programación estructurada permiten que las implementaciones de las funciones
sean fáciles de consultar y mantener.
La programación orientada a objetos está basada en un modelo de construcciones
de programas como un conjunto de clases. El diseño orientado a objetos
identifica los tipos que representan los distintos objetos en el programa. Las
operaciones a realizar con cada uno delos objetos son, al igual que en el modelo
procedural, los pasos destinados a solucionar el problema. El objeto sirve además
de módulo que puede reutilizarse para la solución de un problema de similares
características en otro programa.
Ninguna metodología resuelve con acierto todos los tipos de problemas. La
programación requiere una especialización como la que se produce en la
ingeniería pero todavía no es posible identificarla como una ciencia. Las técnicas
a emplear se han de utilizar con exquisito cuidado, sin perder de vista el objetivo
de resolver un determinado problema.
Actualmente existe la tendencia de identificar la programación con una disciplina
como la ingeniería. Sin embargo, debe considerarse más como un arte como la
arquitectura, donde se unen la inspiración y el dominio de la técnica.
Para la elección de un determinado entorno debemos fijar los criterios
necesarios, como los que describimos a continuación.:
Tamaño de la aplicación
Cuanto mayor sea el volumen de información a procesar, mas necesidad habrá de
estructurar dicha información de forma que se fácil su manipulación.
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 método para la obtención de nuevos datos es complicado o
requiere un esfuerzo de programación importante.
Aunque tratados como grupos independientes, ambos están generalmente
interrelacionados. De esta forma una estructura de datos compleja suele ir
acompañada de un conjunto de funciones de diseño complejo.
Asimismo, una mayor abstracción se traduce en unas instrucciones mas potentes
y un soporte de estructuras de datos más complejas. Esto a menudo se traduce en
que el compilador (programa que traduce el programa introducido por el usuario
en código ejecutable por la máquina) ha de introducir una cantidad grande de
código auxiliar para poder ejecutar el código fuente.
Si ha programado en C o en Turbo Pascal, habrá observado que los ejecutables
son en general de pequeño tamaño. Un simple programa <<Hola mundo>>,
clásico de programación. Nunca es mayor de seis líneas de código y su ejecutable
es siempre inferior a 10 Kbytes. Si tomamos Clipper el programa no ocupa más de
una línea pero más de 200 Kbytes.
Rapidez
En algunos problemas la rapidez de respuesta es crítica. Este factor depende
mucho de soporte hardware y lentamente va asumiendo menos importancia.
Portabilidad
La portabilidad es la capacidad que ha de tener el programa para funcionar en
distintos entornos operativos. La realización de un programa portable , en
general, depende de la elección de un lenguaje de programación , así como del
alejamiento de las ventajas e inconvenientes que proporciona el soporte
hardware y el sistema operativo. La creación de un programa portable a menudo
incide negativamente en los apartados de tamaño y rapidez, ya que un
alejamiento de la plataforma hardware y del sistema operativo, a menudo se
consigue emulando sus características. Esto conlleva un aumento del tamaño y la
complejidad del programa, así como un incremento en el tiempo de ejecución.
Gestión de recursos
Este factor indica las exigencias que hace nuestro lenguaje de los recursos
disponibles por el ordenado. El más limitado, aun más que el espacio en disco, es
la memoria. Un programa grande que gestione de manera incorrecta la memoria
pronto agotará todos los recursos del sistema.
Interface de usuario.
Aunque no se puede contar como un factor a considerar, la importancia que el
interface de usuario está tomando en los últimos años hace que lo consideremos
por separado. El diseño del interface de usuario aporta una complejidad propia al
desarrollo de aplicaciones. De hecho, se considera que en un principio este
apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de
programación, para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo
en la actualidad.
La aparición de interfaces gráficos de usuario estándar (Windows, os2, X-
Windows, etc.) ha hecho que factores como la rapidez o el tamaño vuelvan a
tomarse en cuenta, después de que el consumo de recursos de la parte del
interface de usuario creciera de forma espectacular.
APLICACIONES ORIENTADAS A OBJETOS
Cómo afectan los requerimientos anteriores para la elección de un lenguaje
orientado a objetos como herramienta para el desarrollo de nuestros programas?
Claridad
Al ligar de forma evidente la estructura de la información con los procedimientos
que la manipulan, los programas ganan en claridad a la hora de desarrollarlos y
mantenerlos. Esto supone una ventaja frente a los lenguajes procedurales ,
aunque éstos podrían suplir esta deficiencia mediante una correcta elección de
los nombres de las variables y funciones, lo que se denomina una <<oportuna
codificación>>.
Complejidad
Cuando la complejidad de un problema es abarcable por una sola persona,
resolverlo con una herramienta u otra no aporta grandes ventajas. Pero cuando
este desarrollo la tiene que realizar un equipo grande, debe existir una forma para
aislar partes de problema.
Uno de los problemas más comunes , y a su vez más simples de solucionar en el
diseño de grandes sistemas, es el nombre que se da a las funciones y que tipo de
datos manipulan éstas.
En la realización de un sistema informático se utiliza un equipo de varias
personas. El trabajo se divide en tres áreas funcionales: una parte del equipo se
encarga del interface de usuario, otra de la manipulación de datos y, la última del
diseño de salidas impresas.
Cada quipo utiliza funciones y datos suministrados por los otros miembros del
equipo y a su vez diseña funciones para su uso interno y para el uso del resto de
los grupos. Si no se realiza la división del trabajo de forma adecuada puede
producirse el caos. He aquí una pequeña enumeración de los problemas que se
pueden encontrar.
• Las funciones desarrolladas por cada uno de los grupos no encajan con las
necesidades de los demás.
• Otros grupos han elegido nombres de variables y funciones similares a los
elegidos por nuestro grupo. Estas funciones y variables son prácticamente
iguales a las desarrolladas por nosotros, pero varían ligeramente en el
tratamiento de la información, por lo que no podemos sustituir nuestras
funciones. Ambas deben coexistir aumentando la complejidad del programa
de manera innecesaria.
• El resto de los grupos sólo cubren determinados aspectos de la información a
tratar, pero no proporcionan toda la información necesaria para que el
programa funcione. El resto de información debe suministrarse suplantando
parte de la funcionalidad destinada a otros grupos.
• Algunas de las modificaciones que realizamos sobre variables locales o globales producen
resultados imprevistos en el resto de los módulos.
Tamaño
Las aplicaciones orientadas a objetos son ideales para la realización de programas
de gran tamaño. Las facilidades de encapsulación y asociación de las funciones a
los datos que manipulan, simplifican el proceso de desarrollo. De hecho las bases
de datos orientadas a objetos suponen un gran adelanto, ya que aúnan la
flexibilidad en la manipulación de los OOP con la capacidad de consulta de un
DBMS (Data Base Management System)
Relación entre Datos
Por el mismo motivo se verán beneficiados aquellos programas que impliquen
una relación compleja entre los datos. Este tipo de complejidad permite la
utilización de todas las ventajas de los lenguajes de programación orientados a
objetos. Propiedades como la herencia ( donde los objetos pueden heredar
estructura y operaciones de objetos predecesores), la encapsulación, etc.
Muestran en este tipo de programas todas sus ventajas.
Rapidez
En este aspecto, los lenguajes orientados a objetos muestran una clara desventaja
frente a otros lenguajes que se acercan más a las especificaciones de la máquina.
Si la rapidez es crítica, puede elegir un lenguaje de programación como C++, que
aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y
la compatibilidad de C.
Gestión de recursos
Las aplicaciones orientadas a objetos demandan normalmente más recursos del
sistema que las aplicaciones procedurales. La creación dinámica de objetos, que
ocupa un lugar en la memoria del ordenador, puede acarrear graves problemas.
Una de las soluciones, que incluye alguno delos lenguajes OOP, es liberar a
menudo el espacio que los objetos dejan de utilizar. Este procedimiento de
optimización como garbage collection (recolección de basura, implementado en
java), minimiza los efecto de la creación dinámica de objetos.
Interface de usuario.
El interface de usuario es uno de los aspectos más importantes en la
programación actual. La aparición de sistemas de explotación que soportan un
interface gráfico de usuario como Windows, X-Windows o Presentation Manager
hace que la mayoría de los usuarios prefieran que sus programas corran bajo este
tipo de interface. Este es uno de los puntos fuertes para la elección de un lenguaje
OOP. La mayoría de los interfaces gráficos actuales han sido diseñados o
rediseñados en base a la OOP. Existen en el mercado librerías de clases que
soportan todos los dispositivos de control de ventanas como menús, combo box,
listas, barras de herramientas, etc.
Lenguajes orientados a objetos
Los lenguajes OOP implementan de manera distinta los conceptos de
programación orientada a objetos. No existe el lenguaje perfecto capaz de
satisfacer todas las necesidades y que se adapte a todos los estilos
A Continuación unos consejos que nos facilitarán la elección del lenguaje de
programación adecuado:
• Si los programas se van a sentar en una cualidad concreta de los OOP como
herencia, elija el que mejor soporte le dé.
• Los lenguajes interpretados sirven para realizar un desarrollo rápido o para
aquellos programas que necesiten una actualización constante. Si el programa
necesita rapidez o es crítico respecto al tamaño, considere el uso de lenguajes
que incorporen compilador.
• No <<reinvente la rueda>>. Si el lenguaje le proporciona una librería de clases
no intente reescribrlas de nuevo, use las que le ofrece el sistema. Es más tome
como factor de elección las librerías de clases que el compilador incorpora o
que estén disponibles en el mercado.
• Si necesita mejorar la calidad del programa previniendo errores, utilice un
lenguaje que le permita definir las variables con sus tipos asociados.
• Si la memoria del sistema es limitada, utilice lenguajes que permitan la
creación y destrucción automática de clases dependiendo de su utilización.
CARACTERÍSTICAS DE LOS LENGUAJES OOP
Herencia múltiple
Esta característica suele ser común a la mayoría de los lenguajes OOP, aunque
introduce un problema al existir la posibilidad de que el objeto sucesor herede el
mismo atributo, aunque con distinto tipo y valor, de mas de un predecesor.
Alguno de los lenguajes de programación solucionan este problema de forma
automática, aunque los más populares generan un error en el tiempo de
compilación. Recomendamos que se examinen con cuidado las clases para evitar
en lo posible estos errores.
Eficiencia.
Los lenguajes OOP arrastraron en un principio la reputación de ser ineficaces.
Esto se debía en gran medida a que los primeros lenguajes (como Smalltalk) eran
interpretados y no compilados. La existencia de compiladores permite a los
desarrolladores ganar rapidez. Actualmente, usando un buen lenguaje orientado
a objetos como C++, Java, etc. Junto con las librerías apropiadas para la
realización de un programa, puede que se ejecute más rápidamente que el mismo
programa compilado con un lenguaje procedural.
Asignación de tipos.
Los lenguajes orientados a objetos varían de forma sustancial la forma por la que
se aproximan a la asignación de tipos.
Por asignación de tipos entendemos que cada variable sea identificada como
perteneciente a una clase (asignación fuerte) o sea simplemente un objeto
indeterminado (asignación débil). Eiffel y C son dos lenguajes basados en la
asignación fuerte, frente a Smalltalk, en el que todas las variables definidas
pertenecen a una clase indeterminada.
La asignación fuerte sirve a dos propósitos. Por una parte para que el
desarrollador pueda identificar a que clase pertenece cada operación. De forma
concreta, en aquellos lenguajes donde está implementado el operator overloading
(refefinición de operador), el compilador puede reconocer a través de las clases
que entran como parámetros en la operación que operación tiene que utilizar.
Por otra, este tipo de declaración permite al compilador un mayor grado de
optimización, ya que conoce en todo momento el espacio que ha de asignar.
Manejo de memoria.
Los OOP son lenguajes que utilizan de manera intensiva la memoria de la
computadora.
Hay dos tipos de aproximación a la gestión de memoria.
El sistema en tiempo de ejecución libera la memoria automáticamente a medida
que los objetos dejan de utilizarse.
El sistema tiene instrucciones concretas para liberar l memoria explícitamente.
Este el enfoque adoptado por lenguajes como C++, que aportan dos operadores:
crear y destruir. El primero reserva automáticamente memoria, mientras que el
segundo la libera.
Encapsulación
Consiste en separar aquellos atributos del objeto que deben ser conocidos por el
resto, de aquellos necesario para su funcionamiento propio. No es propio de los
lenguajes orientados a objetos, pero la capacidad de éstos para unir las
estructuras de datos a los procedimientos que los modifican lo hacen más potente
que los lenguajes llamados <<Modulares>>
PANORAMICA DE LOS LENGUAJES OOP
A continuación, una pequeña panorámica de los lenguajes orientados a objetos
SMALLTALK
Fue el primer lenguaje de programación orientado a objetos. Desarrollado en el
Xerox PARC, en sus primeras implementaciones no ofrece solamente un
interprete, sino que es mucho más ambicioso, integrando intérprete on-line y
otros aspectos que le convierten en un <<pseudo>> sistema operativo. Es el
primero en aportar la arquitectura de Modelo/Visor/Controlador. El interface de
usuario se divide en una definición sobre la que se aplican determinado número
de vistas gestionadas por un controlador. El MVC permite al desarrollador
concentrarse en la parte esencial de la aplicación (el modelo) y añadir interfaces
de usuarios ( las vistas y controles) de forma independiente.
Ventajas
• Smalltalk es un lenguaje puro orientado a objetos
• La implementación a través de un intérprete facilita la labor de desarrollo de
programas. Las clases son añadidas, corregidas y depuradas de forma
interactiva.
• Tiene una sintaxis simple, donde las variables y los atributos no necesitan
tener un tipo asociado. Todo está definido en principio como objeto,
incluyendo las propias clases.
Inconvenientes
• Es un lenguaje interpretado, lo que reduce su rendimiento y dificulta su
comercialización.
• Al proporcionar su propio entorno operativo, interactúa mal con otro tipo de
software o hardware
Eiffel
Es un lenguaje de programación escrito por Bertrand Meyer. Al contrario que
Smalltalk, incluye un preprocesador que permite la traducción de código Eiffel a
Lenguaje C. Es ideal para la ingeniería de software, que permite la encapsulación
, control de acceso y ámbito de las modificaciones. Como lenguaje orientado a
objetos <<puro>>, es presumiblemente el mejor por sus capacidades técnicas.
Los programas consisten en la declaración de colecciones de clases que incluyen
métodos. El punto primordial de un programa Eiffel es la declaración de clases,
que asocia atributos. Ambos, clases y atributos, son accesibles a partir de la
implementación de un concepto llamado característica. Una característica es, por
tanto, una agrupación de datos y unas formas típicas de tratarlos.
En Eiffel una declaración de clases puede incluir:
• Una lista de características exportables.
• Una lista de las clases antecesora: clases de la que ésta es una derivación
• Una lista de declaraciones de características.
Ventajas
• Es un lenguaje orientado a objetos <<puro>>
• Eiffel es un lenguaje de programación orientado hacia el diseño de grandes
aplicaciones. Las propiedades anteriores le hacen ideal para el diseño de
aplicaciones en grupos de trabajo.
• El paso intermedio a código C se puede considerar como una ventaja y no
como un inconveniente, ya que aquellas secciones que sean difíciles de tratar
con Eiffel pueden elaborarse a partir de código C. Su compatibilidad con C
asegura también su portabilidad hacia otros sistemas operativos
Desventajas
• El manejo de la memoria , un punto delicado en todos los lenguajes orientados
a objetos no es transparente como en el caso de Smalltalk.
• Las librerías de clases son reducidas
• El rendimiento es mayor que el de Smalltalk, pero al tener que incluir un
módulo Run-time dentro del ejecutable, su tamaño crece y su rendimiento
baja.
C++
Es un lenguaje de uso general que deriva del C.
Añade a su predecesor una serie de características que le convierten en un
lenguaje orientado a objetos. Dentro de estas características debemos resaltar:
• La abstracción de datos
• La programación orientada a objetos, ya que permite asociar a los datos las
funciones que los manipulan
C++ conserva todas las capacidades de su predecesor C. De hecho, el código C
puede tratarse con compiladores C++ y ejecutarse sin ningún problema. En un
principio C++ era traducido a código C a través de una utilidad llamada
precompilador.
También es cierto que se pueden utilizar algunas de las ventajas de C++ (como C
mejorado) para escribir código no orientado a objetos.
Enumeramos los aspectos más importantes que hacen del C++ un lenguaje
orientado a objetos:
• La mayor contribución que realiza C++ al C es la introducción del tipo clase.
Las clases permiten definir conjunto de datos y las funciones que los
manipulan.
• La ocultación de datos es el mecanismo para implementar la abstracción de
datos. La abstracción de datos permite al programador <<olvidar>> el
funcionamiento interno de una clase, ya que sabe que su funcionamiento no va
a alterar anómalamente el funcionamiento de otras clases. Una vez definida la
clase es transparente para el desarrollador y permite operar con ella como si
fuera un tipo básico.
• La herencia extiende el concepto de abstracción de datos al permitir la
construcción de clases a partir de otras (sus antecesores)
• Los operadores definidos por el usuario permiten un tratamiento homogéneo
entre los tipos predefinidos por el lenguaje y los desarrollados por el
programado.
Otras características no relativas a la programación orientada a objetos,
simplifican el diseño y desarrollo.
• Optimización de explotación de memorias, que permite la creación de
estructuras de datos dinámicas.
• Implementación del solapamiento de funciones. Esta técnica permite definir
varias funciones con el mismo nombre pero distintos parámetros de entrada.
Dependiendo de los parámetros que acompañen la llamada de la función, será
ejecutada una u otra.
BASES DE DATOS ORIENTADAS A OBJETOS
La programación orientada a objetos es muy versátil. No se restringe únicamente
al diseño de programas, sino que es posible aplicar los mismo conceptos al diseño
de bases de datos. El uso de una técnica orientada a objetos trasciende a la
elección de la base de datos.
El uso de esta técnica en el diseño de bases de datos aporta las cualidades de esta
metodología a nuestro diseño. Eficiencia, coherencia y un menor coste a la hora
de actualizar la estructura de las bases de datos son los principales beneficios que
aporta.
Como valor añadido, el uso de una misma técnica en el diseño, tanto de los
programas como de las bases de datos proporciona coherencia a nuestro sistema.
Las bases de datos orientadas a objetos unen dos tecnologías:
La de las bases de datos y la de los lenguajes orientados a objetos. Los Lenguajes
OOP aportan gran capacidad en la manipulación de datos, pero no implementan
el almacenamiento y consulta de grandes volúmenes de datos.
Por el contrario, las bases de datos convencionales aportan un dominio de las
técnicas de almacenamiento y consulta de grandes volúmenes de datos, aunque
su capacidad de manipulación es limitada.
Las bases de datos orientadas a objetos pretenden unir la capacidad de
manipulación de datos de los OPP con la capacidad de almacenamiento y
consulta de los DBMS.
Las aplicaciones convencionales que agrupan programas y bases de datos,
separan ambos entornos de manera clara.
El desarrollador usa técnicas procedurales para la descomposición de problemas
y su codificación en funciones. Posteriormente se emplean técnicas como las de
Entidad – Relación para el diseño de la base de datos.
Su codificación suele realizarse en un lenguaje de alto nivel como C, que lleva
embebido código SQL. El término embebido describe la inclusión de un módulo
escrito bajo otro lenguaje de programación dentro del código fuente. El
compilador incorpora durante la fase de enlace el Run-Time correspondiente
para que pueda funcionar el código embebido.
Como podrá observar, esta técnica presenta defectos evidentes:
Por una parte, se utilizan diferentes técnicas para el desarrollo de ambos
apartados, por lo que la tarea de diseño no se puede considerara como un todo
único
Por otra y en gran medida debida a la primera, los lenguajes que se utilizan para
la implementación difieren, dificultando las labores de mantenimiento.
Ejemplos
Como habrá podido observar a lo largo de esta monografía, nuestro propósito no
ha siso el de enseñar una metodología ni la enseñanza de un determinado
lenguaje de programación.
El objetivo es por el contrario dar una panorámica de los conceptos de la
programación orientada a objetos, de las metodologías y de las técnicas de
desarrollo de aplicaciones.
En este apartado nos centraremos en lo aspectos más importantes en el
desarrollo de aplicaciones bajo OOP: identificación de objetos y análisis de
asociaciones.
OBJETOS Y ASOCIACIONES.
La parte más importante de todo diseño es el punto de entrada de la definición de
requerimientos. En la observación atenta de los requerimientos se pueden hallar
la mayoría de los objetos pertenecientes a nuestra aplicación.
En este ejemplo nos centraremos en la identificación de objetos a partir de los
requerimientos básicos de la aplicación.
Este análisis es el primero que debe hacerse dentro de OOP y es también útil para
cualquier otra técnica de programación.
Analicemos la siguiente definición de requerimientos:
El <<sistema de tratamiento de información documental>> es un gestor de
<<documentos>>, de tal manera que puedan clasificar en uno o varios
<<índices>>, recuperar para su modificación, visualizar, para su consulta,
reclasificar, archivar y destruir. El <<sistema>> procesa la petición del
<<usuario>>, devolviendo un mensaje e indicando el éxito o el fracaso de la
petición.
De una manera general hemos indicado entre comillas los sustantivos y en
cursiva los verbos. De esta forma hemos identificado los objetos principales de la
aplicación y las operaciones asociadas a cada uno de los objetos.
Observe el siguiente diagrama.
Hemos traducido los requerimientos a un conjunto de objetos.
Estos están inconexos entre sí, pero aplicando la <<lógica>> podemos ver las
relaciones que existen entre ellos. Sin salirnos de las especificaciones de la
aplicación, vemos que existen las asociaciones que aparecen en la siguiente
figura:
Como podemos observar, algunas asociaciones cíclicas como Indice <->
Documento. Estas asociaciones pueden simplificarse. También existen otras
implícitas que examinaremos más adelante, como Usuario->Documento->Indice.
Observemos gráficamente las asociaciones que mantienen los objetos entre sí en
la siguiente figura
Como puede verse hay dos asociaciones sospechosas, ya que no son verbos sino
los sustantivos <<petición>> y <<mensaje>>. Estas dos asociaciones se pueden
<<objetivar>> de tal manera que reúnan las condiciones de un objeto. Para ello
debemos volver a las especificaciones iniciales.
Cuando se archiva un documento se debe indicar el nombre del documento así
como los índices a los que se va a asociar. Las peticiones de recuperación deben
incluir un índice y el nombre del archivo. Las consultas a los índices deben incluir
el nombre del indice y una condición.
A partir de este análisis se puede depurar con HERENCIA y posteriormente
realizar un <<ajuste fino>>
LA RELACION DE HERENCIA.
A continuación vamos a centrarnos en la relación de herencia.
Como ya sabemos ésta puede agrupar objeto son similares característica o bien
especializar objetos a partir de una genérico. Observemos nuevamente los
requerimientos de nuestro sistema:
www.desarrolloweb.com
Introducimos para los más profanos las bases sobre las que se asienta la
Programación Orientada a Objetos.
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.
Motivación
Durante años, los programadores se han dedicado a construir aplicaciones muy
parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los
esfuerzos de los programadores puedan ser utilizados por otras personas se creó la
POO. Que es una serie de normas de realizar las cosas de manera que otras
personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el
código se pueda reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de
quien la programa, de manera que la forma de hacer las cosas puede ser diferente
según el programador. Aunque podamos hacer los programas de formas distintas, no
todas ellas son correctas, lo difícil no es programar orientado a objetos sino
programar bien. Programar bien es importante porque así nos podemos aprovechar
de todas las ventajas de la POO.
Cómo se piensa en objetos
Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real.
Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema
de POO. Diríamos que el coche es el elemento principal que tiene una serie de
características, como podrían ser el color, el modelo o la marca. Además tiene una
serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o
aparcar.
Pues en un esquema POO el coche sería el objeto, las propiedades serían las
características como el color o el modelo y los métodos serían las funcionalidades
asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una
fracción, es decir, esa estructura matemática que tiene un numerador y un
denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador.
Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o
número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de
matemáticas harás uso de objetos fracción y en un programa que gestione un taller
de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan
muchos objetos para realizar las acciones que se desean realizar y ellos mismos
también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos
coche, herramienta, mecánico, recambios, etc.
Clases en POO
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.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar
tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un
objeto a partir de una clase se llama instanciar (que viene de una mala traducción de
la palabra instace que en inglés significa ejemplar). Por ejemplo, un objeto de la
clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase,
pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o
cualquier otra, la llamamos objeto.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser
distinta dependiendo el lenguaje de programación que se emplee, pero será algo
parecido a esto.
miCoche = new Coche()
Con la palabra new especificamos que se tiene que crear una instancia de la clase
que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros
con los que inicializar el objeto de la clase coche.
Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando
tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo
rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama
estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el
operador punto.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el nombre e la
propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor
del estado de la propiedad del objeto a rojo con una simple asignación.
Mensajes en objetos
Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por
ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos
pasándole el mensaje “ponte en marcha”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del
método que deseamos invocar.
miCoche.ponerseEnMarcha()
En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis
igual que cualquier llamada a una función, dentro irían los parámetros.
Otras cosas
Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a las
cosas más básicas. También existen mecanismos como la herencia y el polimorfismo
que son unas de las posibilidades más potentes de la POO.
La herencia sirve para crear objetos que incorporen propiedades y métodos de otros
objetos. Así podremos construir unos objetos a partir de otros sin tener que
reescribirlo todo.
El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos
trabajando, y abstraernos para definir un código que sea compatible con objetos de
varios tipos.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No hay
que olvidar que existen libros enteros dedicados a la POO y aquí solo pretendemos
dar un repaso a algunas cosas para que os suenen cuando tengáis que poneros
delante de ellas en los lenguajes de programación que debe conocer un desarrollador
del web.
Ejemplo concreto de programación orientada a objetos
Para conseguir un ejemplo concreto de lo que es la programación orientada a
objetos, podemos entrar en el Manual de PHP 5. Realmente este manual explica las
características de orientación a objetos de PHP 5 y ofrece ejemplos concretos de
creación de clases con características como herencia, polimorfismo, etc.
www.java.ciberaula.com
Tecnología orientada a objetos
Hoy en día la tecnología orientada a objetos ya no se aplica
solamente a los lenguajes de programación, además se viene
aplicando en el análisis y diseño con mucho éxito, al igual que
en las bases de datos. Es que para hacer una buena
programación orientada a objetos hay que desarrollar todo el
sistema aplicando esta tecnología, de ahí la importancia del
análisis y el diseño orientado a objetos.
La programación orientada a objetos es una de las formas más
populares de programar y viene teniendo gran acogida en el
desarrollo de proyectos de software desde los últimos años.
Esta acogida se debe a sus grandes capacidades y ventajas
frente a las antiguas formas de programar.
Una Perspectiva Histórica
Tradicionalmente, la programación fue hecha en una manera
secuencial o lineal, es decir una serie de pasos consecutivos
con estructuras consecutivas y bifurcaciones.
Los lenguajes basados en esta forma de programación ofrecían
ventajas al principio, pero el problema ocurre cuando los
sistemas se vuelven complejos. Estos programas escritos al
estilo “espaguetti” no ofrecen flexibilidad y el mantener una
gran cantidad de líneas de código en sólo bloque se vuelve una
tarea complicada.
Frente a esta dificultad aparecieron los lenguajes basados en la
programación estructurada. La idea principal de esta forma de
programación es separar las partes complejas del programa en
módulos o segmentos que sean ejecutados conforme se
requieran. De esta manera tenemos un diseño modular,
compuesto por módulos independientes que puedan
comunicarse entre sí. Poco a poco este estilo de programación
fue reemplazando al estilo “espaguetti” impuesto por la
programación lineal.
Entonces, vemos que la evolución que se fue dando en la
programación se orientaba siempre a ir descomponiendo más
el programa. Este tipo de descomposición conduce
directamente a la programación orientada a objetos.
Pues la creciente tendencia de crear programas cada vez más
grandes y complejos llevó a los desarrolladores a crear una
nueva forma de programar que les permita crear sistemas de
niveles empresariales y con reglas de negocios muy
complejas. Para estas necesidades ya no bastaba la
programación estructurada ni mucho menos la programación
lineal. Es así como aparece la programación orientada a
objetos (POO). La POO viene de la evolución de la
programación estructurada; básicamente la POO simplifica la
programación con la nueva filosofía y nuevos conceptos que
tiene. La POO se basa en la dividir el programa en pequeñas
unidades lógicas de código. A estas pequeñas unidades lógicas
de código se les llama objetos. Los objetos son unidades
independientes que se comunican entre ellos mediante
mensajes. Veamos con mayor detenimiento este tema.
¿Cuáles son las ventajas de un lenguaje orientado a
objetos?
• Fomenta la reutilización y extensión del código.
• Permite crear sistemas más complejos.
• Relacionar el sistema al mundo real.
• Facilita la creación de programas visuales.
• Construcción de prototipos
• Agiliza el desarrollo de software
• Facilita el trabajo en equipo
• Facilita el mantenimiento del software
Lo interesante de la POO es que proporciona conceptos y
herramientas con las cuales se modela y representa el mundo
real tan fielmente como sea posible.
El modelo Orientado a Objetos
Para entender este modelo vamos a revisar 4 conceptos
básicos:
• Objetos
• Clases
• Herencia
• Envío de mensajes
1. Objetos
Entender que es un objeto es la clave para entender cualquier
lenguaje orientado a objetos.
Existen muchas definiciones que se le ha dado al Objeto.
Primero empecemos entendiendo que es un objeto del mundo
real. Un objeto del mundo real es cualquier cosa que vemos a
nuestro alrededor. Digamos que para leer este artículo lo
hacemos a través del monitor y una computadora, ambos son
objetos, al igual que nuestro teléfono celular, un árbol o un
automóvil.
Analicemos un poco más a un objeto del mundo real, como la
computadora. No necesitamos ser expertos en hardware para
saber que una computadora está compuesta internamente por
varios componentes: la tarjeta madre, el chip del procesador,
un disco duro, una tarjeta de video, y otras partes más. El
trabajo en conjunto de todos estos componentes hace operar a
una computadora.
Internamente, cada uno de estos componentes puede ser
sumamente complicado y puede ser fabricado por diversas
compañías con diversos métodos de diseño. Pero nosotros no
necesitamos saber cómo trabajan cada uno de estos
componentes, como saber que hace cada uno de los chips de la
tarjeta madre, o cómo funciona internamente el procesador.
Cada componente es una unidad autónoma, y todo lo que
necesitamos saber de adentro es cómo interactúan entre sí los
componentes, saber por ejemplo si el procesador y las
memorias son compatibles con la tarjeta madre, o conocer
donde se coloca la tarjeta de video. Cuando conocemos como
interaccionan los componentes entre sí, podremos armar
fácilmente una computadora.
¿Que tiene que ver esto con la programación? La
programación orientada a objetos trabaja de esta manera. Todo
el programa está construido en base a diferentes componentes
(Objetos), cada uno tiene un rol específico en el programa y
todos los componentes pueden comunicarse entre ellos de
formas predefinidas.
Todo objeto del mundo real tiene 2 componentes:
características y comportamiento.
Por ejemplo, los automóviles tienen características (marca,
modelo, color, velocidad máxima, etc.) y comportamiento
(frenar, acelerar, retroceder, llenar combustible, cambiar
llantas, etc.).
Los Objetos de Software, al igual que los objetos del mundo
real, también tienen características y comportamientos. Un
objeto de software mantiene sus características en una o más
"variables", e implementa su comportamiento con "métodos".
Un método es una función o subrutina asociada a un objeto.
Para redondear estas ideas, imaginemos que tenemos
estacionado en nuestra cochera un Ford Focus color azul que
corre hasta 260 km/h. Si pasamos ese objeto del mundo real al
mundo del software, tendremos un objeto Automóvil con sus
características predeterminadas:
Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Máxima = 260 km/h
Cuando a las características del objeto le ponemos valores
decimos que el objeto tiene estados. Las variables almacenan
los estados de un objeto en un determinado momento.
Definición teórica: Un objeto es una unidad de código
compuesto de variables y métodos relacionados.
2. Las Clases
En el mundo real, normalmente tenemos muchos objetos del
mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno
de los miles que hay en el mundo. Si hablamos en términos de
la programación orientada a objetos, podemos decir que
nuestro objeto celular es una instancia de una clase conocida
como "celular". Los celulares tienen características (marca,
modelo, sistema operativo, pantalla, teclado, etc.) y
comportamientos (hacer y recibir llamadas, enviar mensajes
multimedia, transmisión de datos, etc.).
Cuando se fabrican los celulares, los fabricantes aprovechan el
hecho de que los celulares comparten esas características
comunes y construyen modelos o plantillas comunes, para que
a partir de esas se puedan crear muchos equipos celulares del
mismo modelo. A ese modelo o plantilla le llamamos CLASE,
y a los equipos que sacamos a partir de ella la llamamos
OBJETOS.
Esto mismo se aplica a los objetos de software, se puede tener
muchos objetos del mismo tipo y mismas características.
Definición teórica: La clase es un modelo o prototipo que
define las variables y métodos comunes a todos los objetos de
cierta clase. También se puede decir que una clase es una
plantilla genérica para un conjunto de objetos de similares
características.
Por otro lado, una instancia de una clase es otra forma de
llamar a un objeto. En realidad no existe diferencia entre un
objeto y una instancia. Sólo que el objeto es un término más
general, pero los objetos y las instancias son ambas
representación de una clase.
Definición Teórica: Una instancia es un objeto de una clase en
particular.
3. Herencia
La herencia es uno de los conceptos más cruciales en la POO.
La herencia básicamente consiste en que una clase puede
heredar sus variables y métodos a varias subclases (la clase
que hereda es llamada superclase o clase padre). Esto significa
que una subclase, aparte de los atributos y métodos propios,
tiene incorporados los atributos y métodos heredados de la
superclase. De esta manera se crea una jerarquía de herencia.
Por ejemplo, imaginemos que estamos haciendo el análisis de
un Sistema para una tienda que vende y repara equipos
celulares.
En el gráfico vemos 2 Clases más que posiblemente
necesitemos para crear nuestro Sistema. Esas 2 Clases nuevas
se construirán a partir de la Clase Celular existente. De esa
forma utilizamos el comportamiento de la SuperClase.
En general, podemos tener una gran jerarquía de Clases tal y
como vemos en el siguiente gráfico:
4. Envío de Mensajes
Un objeto es inútil si está aislado. El medio empleado para que
un objeto interactúe con otro son los mensajes. Hablando en
términos un poco más técnicos, los mensajes son invocaciones
a los métodos de los objetos.
Características asociadas al POO
Abstracción
La abstracción consiste en captar las características esenciales
de un objeto, así como su comportamiento. Por ejemplo,
volvamos al ejemplo de los automóviles, ¿Qué características
podemos abstraer de los automóviles? O lo que es lo mismo
¿Qué características semejantes tienen todos los automóviles?
Todos tendrán una marca, un modelo, número de chasis, peso,
llantas, puertas, ventanas, etc. Y en cuanto a su
comportamiento todos los automóviles podrán acelerar, frenar,
retroceder, etc.
En los lenguajes de programación orientada a objetos, el
concepto de Clase es la representación y el mecanismo por el
cual se gestionan las abstracciones.
Por ejemplo, en Java tenemos:
public class Automovil {
// variables
// métodos
}
Encapsulamiento
El encapsulamiento consiste en unir en la Clase las
características y comportamientos, esto es, las variables y
métodos. Es tener todo esto es una sola entidad. En los
2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos
2983238 programacion-orientada-a-objetos

Más contenido relacionado

La actualidad más candente

Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacionANGIEZAMBRANO57
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosguest160f88
 
Programación orientada a objeto
Programación orientada a objetoProgramación orientada a objeto
Programación orientada a objetoHRS1993
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosricardoloja
 
Programacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos AcostaProgramacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos AcostaMarcos Acosta
 
Inroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetosInroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetosJose Angel Rodriguez
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacionfranciscocain
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosJonathan Abel
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosjuliomancerotroya
 
Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)Fredy Nicolas Moreno Puerto
 
Programacion a objetos estructurados
Programacion a objetos estructuradosProgramacion a objetos estructurados
Programacion a objetos estructuradosMichael Hinostroza
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetoswellington018
 
Programacion orientada a objeto
Programacion orientada  a objetoProgramacion orientada  a objeto
Programacion orientada a objetokcarbache
 
Trabajo investigativo sobre la programación orientada a objetos y java
Trabajo investigativo sobre la programación orientada a objetos y javaTrabajo investigativo sobre la programación orientada a objetos y java
Trabajo investigativo sobre la programación orientada a objetos y javaJulio César Rojas Maza
 
[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con javaEudris Cabrera
 
2clasesdeprogramacion
2clasesdeprogramacion2clasesdeprogramacion
2clasesdeprogramacionAmado Arcaya
 
Clase y Objeto de la POO
Clase y Objeto de la POOClase y Objeto de la POO
Clase y Objeto de la POOjvaldes9928
 

La actualidad más candente (20)

Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacion
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Programación orientada a objeto
Programación orientada a objetoProgramación orientada a objeto
Programación orientada a objeto
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos AcostaProgramacion orientada a objetos by Marcos Acosta
Programacion orientada a objetos by Marcos Acosta
 
Inroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetosInroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetos
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacion
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)
 
Programacion a objetos estructurados
Programacion a objetos estructuradosProgramacion a objetos estructurados
Programacion a objetos estructurados
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion orientada a objeto
Programacion orientada  a objetoProgramacion orientada  a objeto
Programacion orientada a objeto
 
Asignación 1 astrid c.
Asignación 1 astrid c.Asignación 1 astrid c.
Asignación 1 astrid c.
 
Poo
PooPoo
Poo
 
Trabajo investigativo sobre la programación orientada a objetos y java
Trabajo investigativo sobre la programación orientada a objetos y javaTrabajo investigativo sobre la programación orientada a objetos y java
Trabajo investigativo sobre la programación orientada a objetos y java
 
[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java[ES] Programación orientada a objeto con java
[ES] Programación orientada a objeto con java
 
Java
Java Java
Java
 
2clasesdeprogramacion
2clasesdeprogramacion2clasesdeprogramacion
2clasesdeprogramacion
 
Clase y Objeto de la POO
Clase y Objeto de la POOClase y Objeto de la POO
Clase y Objeto de la POO
 

Destacado

Turbo pascal
Turbo pascalTurbo pascal
Turbo pascaljtinoco02
 
Presentación de johnny herrera
Presentación de johnny herreraPresentación de johnny herrera
Presentación de johnny herrerajohnny herrera
 
Introduccion A La Programacion En Pascal
Introduccion A La Programacion En PascalIntroduccion A La Programacion En Pascal
Introduccion A La Programacion En Pascalelmoroco
 
lenguaje pascal
lenguaje pascallenguaje pascal
lenguaje pascalotaru
 
Como templar el chocolate
Como templar el chocolateComo templar el chocolate
Como templar el chocolateAdriana Jimenez
 
Ejercicios resueltos pascal
Ejercicios resueltos pascalEjercicios resueltos pascal
Ejercicios resueltos pascalAdriana Jimenez
 
De Crisis A Prosperidad: Los 7 Secretos
De Crisis A Prosperidad: Los 7 SecretosDe Crisis A Prosperidad: Los 7 Secretos
De Crisis A Prosperidad: Los 7 SecretosAlex Kokin
 

Destacado (8)

Turbo pascal
Turbo pascalTurbo pascal
Turbo pascal
 
Presentación de johnny herrera
Presentación de johnny herreraPresentación de johnny herrera
Presentación de johnny herrera
 
Presentación1
Presentación1Presentación1
Presentación1
 
Introduccion A La Programacion En Pascal
Introduccion A La Programacion En PascalIntroduccion A La Programacion En Pascal
Introduccion A La Programacion En Pascal
 
lenguaje pascal
lenguaje pascallenguaje pascal
lenguaje pascal
 
Como templar el chocolate
Como templar el chocolateComo templar el chocolate
Como templar el chocolate
 
Ejercicios resueltos pascal
Ejercicios resueltos pascalEjercicios resueltos pascal
Ejercicios resueltos pascal
 
De Crisis A Prosperidad: Los 7 Secretos
De Crisis A Prosperidad: Los 7 SecretosDe Crisis A Prosperidad: Los 7 Secretos
De Crisis A Prosperidad: Los 7 Secretos
 

Similar a 2983238 programacion-orientada-a-objetos

Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetosAngel Ordoñez
 
Diseño Orientado a Objetos
Diseño Orientado a ObjetosDiseño Orientado a Objetos
Diseño Orientado a ObjetosMegaMono
 
Inroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetosInroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetosJose Angel Rodriguez
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalJose Angel Rodriguez
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosJuan Carlos Riva
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetosguest160f88
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosmercysalvatierra
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosmercysalvatierra
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetosbetshycastillo
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosCarlos Esteves
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosCarlos Esteves
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetoslindacajaperuiz
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetosbetshycastillo
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosNanda Moran
 
Programación estructurada a objetos.pptm
Programación  estructurada  a objetos.pptmProgramación  estructurada  a objetos.pptm
Programación estructurada a objetos.pptmelvis mendieta
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosSANDRITA RAFAEL
 
Unidad educativa réplica juan pío montúfar
Unidad educativa réplica juan pío montúfarUnidad educativa réplica juan pío montúfar
Unidad educativa réplica juan pío montúfarNiCkyTessa
 

Similar a 2983238 programacion-orientada-a-objetos (19)

Programacion estructurada en objetos
Programacion estructurada en objetosProgramacion estructurada en objetos
Programacion estructurada en objetos
 
Diseño Orientado a Objetos
Diseño Orientado a ObjetosDiseño Orientado a Objetos
Diseño Orientado a Objetos
 
Inroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetosInroduccion al paradigma de la programación orientada a objetos
Inroduccion al paradigma de la programación orientada a objetos
 
Introduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos originalIntroduccion al paradigma de la programacion orientado a objetos original
Introduccion al paradigma de la programacion orientado a objetos original
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Programacion Orientada A Objetos
Programacion Orientada A ObjetosProgramacion Orientada A Objetos
Programacion Orientada A Objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación estructurada a objetos.pptm
Programación  estructurada  a objetos.pptmProgramación  estructurada  a objetos.pptm
Programación estructurada a objetos.pptm
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Curso de Java Intermedio
Curso de Java IntermedioCurso de Java Intermedio
Curso de Java Intermedio
 
Unidad educativa réplica juan pío montúfar
Unidad educativa réplica juan pío montúfarUnidad educativa réplica juan pío montúfar
Unidad educativa réplica juan pío montúfar
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 

Más de johnny herrera

Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900johnny herrera
 
Desarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-parteDesarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-partejohnny herrera
 
13 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-113 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-1johnny herrera
 
10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .netjohnny herrera
 
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0johnny herrera
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetosjohnny herrera
 
Programacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes AguilarProgramacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes Aguilarjohnny herrera
 
Programacioncon Visual Basic 6
Programacioncon Visual Basic 6 Programacioncon Visual Basic 6
Programacioncon Visual Basic 6 johnny herrera
 
Practicas visualbasic60
Practicas visualbasic60Practicas visualbasic60
Practicas visualbasic60johnny herrera
 
Matematica universitaria
Matematica universitariaMatematica universitaria
Matematica universitariajohnny herrera
 
Problemas resueltos de c++
Problemas  resueltos de c++Problemas  resueltos de c++
Problemas resueltos de c++johnny herrera
 

Más de johnny herrera (20)

Tiristores
TiristoresTiristores
Tiristores
 
Programacion o.o.
Programacion o.o.Programacion o.o.
Programacion o.o.
 
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
Introduccin a-programacin-orientada-a-objetos-oop-clases-y-objetos900
 
Desarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-parteDesarrollo de-software-poo-2-parte
Desarrollo de-software-poo-2-parte
 
METODOS Y MODELOS POO
METODOS Y MODELOS POOMETODOS Y MODELOS POO
METODOS Y MODELOS POO
 
13 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-113 desarrollo-de-software-fundamentos-poo-1
13 desarrollo-de-software-fundamentos-poo-1
 
10. programacion orientada a objetos en visual basic .net
10.  programacion orientada a objetos en visual basic .net10.  programacion orientada a objetos en visual basic .net
10. programacion orientada a objetos en visual basic .net
 
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
Mapas conceptual, evolucion de la Web 1.0 hasta la Web 5.0
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Programacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes AguilarProgramacion Orientada a Objetos Luis Joyanes Aguilar
Programacion Orientada a Objetos Luis Joyanes Aguilar
 
Programacioncon Visual Basic 6
Programacioncon Visual Basic 6 Programacioncon Visual Basic 6
Programacioncon Visual Basic 6
 
Visual Basic 6.0
Visual Basic 6.0Visual Basic 6.0
Visual Basic 6.0
 
Tutorial de Visual
Tutorial de  VisualTutorial de  Visual
Tutorial de Visual
 
Practicas visualbasic60
Practicas visualbasic60Practicas visualbasic60
Practicas visualbasic60
 
Modulo Derivadas
Modulo DerivadasModulo Derivadas
Modulo Derivadas
 
Matematica 1 usb
Matematica 1 usbMatematica 1 usb
Matematica 1 usb
 
Matematica universitaria
Matematica universitariaMatematica universitaria
Matematica universitaria
 
Matematica1 usb
Matematica1 usbMatematica1 usb
Matematica1 usb
 
Problemas resueltos de c++
Problemas  resueltos de c++Problemas  resueltos de c++
Problemas resueltos de c++
 
Manual cpp
Manual cppManual cpp
Manual cpp
 

2983238 programacion-orientada-a-objetos

  • 1. Programación orientada a objetos De Wikipedia, la enciclopedia libre Saltar a navegación, búsqueda La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos. • Introducción [editar] Los objetos son entidades que combinan estado, comportamiento e identidad: • El estado está compuesto de datos, serán uno o varios atributos a los que se habrán asignado unos valores concretos (datos). • El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él. • La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar. De esta forma, un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan ni deben separarse el estado y el comportamiento. Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado
  • 2. y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos. Esto difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean éste nuevo paradigma, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos. Origen [editar] Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cómputo Noruego en Oslo. Al parecer, en este centro, trabajaban en simulaciones de naves, y fueron confundidos por la explosión combinatoria de cómo las diversas cualidades de diversas naves podían afectar unas a las otras. La idea ocurrió para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron refinados más tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "en marcha" en lugar de tener un sistema basado en programas estáticos. La programación orientada a objetos tomó posición como el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos. Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por otra parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a
  • 3. la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha ido modificando y soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos. Conceptos fundamentales [editar] La programación orientada a objetos es una nueva forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes: • Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas, (de c a d),Es la facilidad mediante la cual la clase D ha definido en ella cada uno de los atributos y operaciones de C, como si eso atributos y operaciones hubiesen sido definidos por la misma D. • Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos). Corresponden a los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase. • Método: algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema. • Evento: un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera. • Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó. • Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método. • Estado interno: es una propiedad invisible de los objetos, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). • Componentes de un objeto:atributos, identidad, relaciones y métodos. • Representación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes. En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.
  • 4. Características de la POO [editar] Hay un cierto desacuerdo sobre exactamente qué características de un método de programación o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que las características siguientes son las más importantes (para más información, seguir los enlaces respectivos): • Abstracción: Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción. • Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente. • Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos. • Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++. • Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento. Esto suele hacerse habitualmente agrupando los objetos en
  • 5. clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple. Lenguajes orientados a objetos [editar] Entre los lenguajes orientados a objetos destacan los siguientes: • ActionScript • ActionScript 3 • Ada • C++ • C# • Clarion • Lenguaje de programación D • Object Pascal (Delphi) • Harbour • Eiffel • Java • JavaScript (la herencia se realiza por medio de la programación basada en prototipos) • Lexico (en castellano) • Objective-C • Ocaml • Oz • Lenguaje de programación R • Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede modificarse al algoritmo C3 por medio del módulo Class::C3 en CPAN) • PHP (en su versión 5) • Python • Ruby • Smalltalk • Magik (SmallWorld) • VB.NET • Visual FoxPro • XBase++ • Gambas • Flex builder (adobe) Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino que son híbridos que combinan la POO con otros paradigmas. Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de programación clásico.
  • 6. Un nuevo paso en la abstracción de paradigmas de programación es la Programación Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en todo el mundo. Monografías.com Programación Orientada a Objetos Sistemas de Procesamiento de Datos 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 dificil de modificar, ciclos de desarrollo largos y tecnicas de codificacion no intuituvas. Un lenguaje orientado a objetos ataca estos problemas. Tiene tres características basicas: debe estar basado en objetos, basado en clases y 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.
  • 7. 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: Las relaciones permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos. 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. 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. 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á distribuída 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 ordenes 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 construído, 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.
  • 8. Organización 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 tipos de jerarquías: serán simples cuando su estructura pueda ser representada por medio de un "arbol". 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. -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. Veamos ahora en detalle los tres elementos mencionados en "Estructura de un Objeto". 1. RELACIONES 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). Una organización jerárquica simple puede definirse como aquella en la que un objeto puede tener un solo padre, mientras que en una organizacion jerárquica compleja un hijo puede tener varios 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
  • 9. 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. Veamos un ejemplo: estableceremos la relación trabajo 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, pués no establece ninguna connotación jerárquica entre NEWTON y OPTICA y su interpretación depende exclusivamente del significado de ambos objetos. 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 trabajo. 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 pregunta sin necesidad de establecer una relación entre NEWTON y FISICA, apoyandonos 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. 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 mas 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.
  • 10. 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. Estan definidas en un objeto diferente, antepasado de éste (padre,"abuelo", etc.). A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase. 3. METODOS 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 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 incluídos dentro de la cápsula del objeto. -Métodos heredados. Estan 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. 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) 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 autmáticamente
  • 11. 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. CONSIDERACIONES FINALES Beneficios que se obtienen del desarrollo con OOP 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 interaccionan 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 concepual 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 mas intuitivo porque la gente piensa naturalmente en términos de objetos más que en términos de algoritmos de software. 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 ajena a los programadores actuales. Específicamente los siguientes temas suelen aparecer repetidamente: 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.
  • 12. 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 multiple mientras que SmallTalk no lo soporta; en consecuencia la elección de un lenguaje tiene ramificaciones de diseño muy importamtes. Determinacion 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. Performance. En un sistema donde todo es un objeto y toda interaccion 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 situacion 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. Deberia existir una metodología fácil de aprender e independiente del lenguaje, y facil de reestructurar que no drene la performance del sistema . Monografías.com Programación orientada a Objetos (OOP, Object Oriented Programming) 1. Introducción 2. Objetos 3. Diseño de aplicaciones y elección de entorno. 4. Aplicaciones orientadas a objetos 5. Características de los lenguajes OOP 6. Panorámica de los lenguajes OOP 7. Bases de datos orientadas a objetos 8. Objetos y asociaciones.
  • 13. 9. La relación de herencia. 10. Bibliografía / infografía Introducción l término de Programación Orientada a Objetos indica más una forma de diseño y una metodología de desarrollo de software que un lenguaje de programación, ya que en realidad se puede aplicar el Diseño Orientado a Objetos (En inglés abreviado OOD, Object Oriented Design), a cualquier tipo de lenguaje de programación. El desarrollo de la OOP empieza a destacar durante la década de lo 80 tomando en cuenta la programación estructurada, a la que engloba y dotando al programador de nuevos elementos para el análisis y desarrollo de software. El propósito de este trabajo es explicar el diseño orientado a objeto y no una explicación de su programación, puesto que no nos alcanzaría toda la currícula para hacerlo. Básicamente la OOP permite a los programadores escribir software, de forma que esté organizado en la misma manera que el problema que trata de modelizar. Los lenguajes de programación convencionales son poco más que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia. Si en algún punto del programa modificamos la estructura de los datos o la acción realizada sobre ellos, el programa cambia. La OOP aporta un enfoque nuevo, convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones. De esta forma, cualquier modificación de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella,
  • 14. siendo esta una de la diferencias radicales respecto a la programación estructurada. Para quienes no están familiarizados con la programación estructurada diré que una de las bases de esta escuela de programación parte del diseño arriba – abajo. En esta forma de diseño se descomponen los requerimientos del programa paso a paso, hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones. La OOP estructura los datos en objetos que pueden almacenar, manipular y combinar información. En resumen, la programación estructurada presta atención al conjunto de acciones que manipulan el flujo de datos (desde la situación inicial a la final), mientras que la programación orientada a objetos presta atención a la interrelación que existe entre los datos y las acciones a realizar con ellos. Muchos habrán oído comentarios sobre la incidencia de la OOP sobre la programación convencional. Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparición del ensamblador sobre el código de máquina. La OOP proporciona las siguientes ventajas sobre otros lenguajes de programación Uniformidad. Ya que la representación de los objetos lleva implica tanto el análisis como el diseño y la codificación de los mismos. Comprensión. Tanto los datos que componen los objetos, como los procedimientos que los manipulan, están agrupados en clases, que se corresponden con las estructuras de información que el programa trata. Flexibilidad. Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar, cualquier cambio que se realice sobre ellos quedará reflejado automáticamente en cualquier lugar donde estos datos aparezcan. Estabilidad. Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo. Reusabilidad. La noción de objeto permite que programas que traten las mismas estructuras de información reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan. De esta forma, el desarrollo de un programa puede llegar a ser una simple combinación de objetos ya definidos donde estos están relacionados de una manera particular. Uno de los puntos clave a remarcar en esta introducción es que la programación orientada a objetos no sustituye a ninguna metodología ni lenguaje de programación anterior. Todos los programas que se realizan según OOD se pueden realizar igualmente mediante programación estructurada. Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas
  • 15. basadas en un interface de usuario gráfico como Windows, OS/2, x-Windows, etc. Es mucho más sencillo OBJETOS Características de los Objetos Identidad del Objeto La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos, son distintos entre sí. De esta forma incluso una serie de Objetos coches, recién fabricados son distintos los unos de los otros. La afirmación anterior, aunque parece obvia, tiene importancia cuando descendemos al nivel de programación. En este ámbito cada uno de los objetos tiene un controlador pro el cual se identifica. Este puede ser una variable, una estructura de datos, una cadena de caracteres, etc. El controlador será distinto para cada uno de los objeto, aunque las referencias a éstos sean uniformes e independientes del contenido, permitiendo crear agrupaciones de objetos con el mismo tratamiento. Clasificación Con la clasificación comienza la verdadera programación orientada a objetos. Ellos nos obliga a una abstracción del concepto de objeto denominada clase. Las clases permiten la agrupación de objetos que comparten las mismas propiedades y comportamiento. Si bien clase y objeto suelen usarse como sinónimos, no lo son. El esfuerzo del programador ante una aplicación orientada a objetos se centra en la identificación de las clases, sus atributos y operaciones asociadas Las propiedades de cada clase deben cumplir una serie de premisas Las propiedades deber ser significativas dentro del entorno de la aplicación es decir, deben servir para identificar claramente y de una manera única (y univoca) a cada uno de los objetos El número de propiedades de un objeto debe ser el mínimo para realizar todas las operaciones que requiera la aplicación. Definamos una clase rectángulo. Esta clase puede tener como atributos un punto (x,y), la anchura (a) y la longitud (l). Las operaciones a realizar son: mover, agrandar, reducir, et. ¿Es posible realizarlas con las propiedades de la clase? Un análisis posterior nos indica que es posible la realización de estas operaciones con los atributos definidos. Pero si incluimos la operación girar , vemos que con las propiedades definidas para la clase esta operación no se puede realizar. Para incluir esta nueva operación debemos redefinir las propiedades del objeto, en este caso las coordenadas de los vértices. Encapsulación y ocultación de datos
  • 16. La capacidad de presentación de información dentro de un objeto se divide en dos partes bien diferenciadas: Interna: La información que necesita el objeto para operar y que es innecesaria para los demás objetos de la aplicación. Estos atributos se denominada privados y tienen como marco de aplicación únicamente a las operaciones asociadas al objeto. Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos . Estas propiedades se denominan públicas y corresponde a la información que necesitan conocer los restantes objetos de la aplicación respecto del objeto definido para poder operar. Podemos imaginarla encapsulación como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida. Si introducimos datos por la entrada automáticamente obtendrá un resultado en la salida. No necesita conocer ningún detalle del funcionamiento interno de la caja. El término encapsulación indica l capacidad que tienen los objetos de construir una cápsula a su alrededor, ocultando la información que contienen (aquélla que es necesaria para su funcionamiento interno, pero innecesaria para los demás objetos) a las otras clases que componen la aplicación. Aunque a primera vista la encapsulación puede parecer superflua, tengamos en cuenta que existen muchas variables utilizadas de forma temporal: contadores y variables que contienen resultados intermedios, etc. D no ser por la encapsulación estas variables ocuparían memoria y podrían interferir en el funcionamiento del resto de los objetos. La encapsulación no es exclusiva de los lenguajes de programación orientados a objetos. Aparece en los lenguajes basados en procedimientos (PASCAL, C, COBOL, ETC) como una forma de proteger los datos que se manipulan dentro de las funciones. Los lenguajes OOP incorporan la posibilidad de encapsular también las estructuras de datos que sirven como base a las funciones. Aportan por tanto un nivel superior en cuanto a protección de información. La encapsulación nos permite el uso de librerías de objetos para el desarrollo de nuestros programas. Recordemos que las librerías son definiciones de objetos de propósito general que se incorporan a los programas. Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde está definido, ya que contiene y define todo lo que necesita para poder funcionar, es fácil utilizarlo en los mas variados tipos de aplicaciones. Si aseguramos , depurando las propiedades y las operaciones dentro de la clase que el objeto función bien dentro de una aplicación, con una correcta encapsulación el objeto podrá funcionar en cualquier otra. Otra de las ventajas de la encapsulación es que , al definir el objeto como una caja negra con entradas y salida asociadas, en cualquier momento podemos cambiar el contenido de las operaciones del objeto, de manera que no afecte al funcionamiento general del programa.
  • 17. La encapsulación está en el núcleo de dos grandes pilares de la construcción de sistemas; mantenibilidad y reusabilidad. Mantenibilidad Cualidad que indica que un programa o sistema debe ser fácilmente modificable. Es decir que los cambios en las condiciones externas (como la definición de una nueva variable) implicarán modificaciones pequeñas en el programa / sistema. El concepto de mantenibilidad implica que un programa, al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante. Reusabilidad Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confección de otros programas. Ello implica que los objetos definidos en un programa pueden ser extraídos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el código del objeto. El objeto final es que el programador construya una librería de objetos que le permita realizar programas basándose en la técnica de cortar y pegar. Esta extrae (corta) código de otras aplicaciones ya realizadas y las implementa (pega) en la aplicación a realizar donde, tras algunos retoques, la nueva aplicación estará lista para funcionar. Como podrá observar el concepto de reusabilidad, permite reducir el tiempo de realización , ganando en claridad, mantenibilidad y productividad. La encapsulación de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad, con el único coste adicional de definir con precisión las entradas y salida de nuestras operaciones. Poliformismo
  • 18. El polimorfismo es una nueva característica aportada por la OOP. Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre, diferenciándolas únicamente en los parámetros de entrada. Dependiendo del objeto que se introduzca como parámetro de entrada, se elegirá automáticamente cual de las operaciones se va a realizar. Ya está habituado al operador <<suma>> que está presente en todos los lenguajes de programación. Sin embargo, los operadores <<suma de fracciones>> y <<suma de números complejos>> no existen en casi ningún lenguaje de programación. Los lenguajes OOP permiten definir un operador <<suma>> tal que reconozca que tipo de objeto se le está aplicando, a través de operaciones de objetos. Previamente deberá definir la fracción y el número complejo como una clase y la operación suma como una operación de una clase. Definiendo adecuadamente las operaciones suma de fracciones y suma de números imaginarios, el operador suma devolverá, en el caso que los operandos sean fracciones, una fracción y , en el caso de los números imaginarios, otros número imaginario. Es posible extender el concepto e incluso definir operaciones como suma de bases de datos El operador suma de base de datos. Aunque a primera vista la expresión C= A+B, siendo A y B bases de datos, nos pudiera parecer una extraordinaria simplificación, nos conduce a la pregunta: ¿Qué es la suma de una base d datos? Consideremos varias posibilidades:
  • 19. Introducción de registros: Lo que exige que A y B tengan la misma estructura. Unión de campos: Aquellos campos que aparezcan en B pero no en A serán añadidos a C ¿Alguna de estas dos opciones es verdaderamente una suma? Es decir ¿Cumple las propiedades conmutativa, asociativa, de elemento neutro, etc.? ¿Qué ocurre si sumo dos bases de datos con estructuras distintas? Como puede observar, la definición de un operador sobre un tipo complejo de datos, intentando utilizar identificadores de operadores de datos simples, puede tener resultados impredecibles. Una de las ventajas más importantes, sin entrar en la redefinición de operadores es permitir la realización de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan. Gracias a la encapsulación y el polimorfismo, aunque se utilicen los mismos nombre con las operaciones en dos clases distintas, el programa reconoce a que clase se aplica durante la ejecución. Como se podrá observar el polimorfismo y la encapsulación de datos están íntimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolución que ha supuesto la introducción de los lenguajes orientados a objetos dentro de la programación. Herencia La herencia es la última de las propiedades relativas a la OOP, Consiste en la propagación de los atributos y las operaciones a través de distintas sub-clases definidas a partir de una clase común. Introduce, por tanto, una posibilidad de refinamiento sucesivo del concepto de clase. Nos permite definir una clase principal y , a través de sucesivas aproximaciones, cualquier característica de los objetos. A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales. La herencia nos permite crear estructuras jerárquicas de clases donde es posible la creación de sub-clases que incluyan nuevas propiedades y atributos. Estas sub- clases admiten la definición de nuevos atributos, así como crear, modificar o inhabilitar propiedades. Para pensarlo de manera más fácil podemos abstraernos al siguiente ejemplo. Pensemos en los distintos sub-modelo s asociados a un modelo básico de automóvil. A partir de este modelo básico, los fabricantes introducen distintas características (aire acondicionado, ABS, distintas tapicerías , acabados, etc.) que crean sub – clases. Todas estas sub-clases tienen en común la estructura básica (chasis , dirección , etc.) u varían sólo en algunos de sus componentes. Asociemos a este tipo básico una clase cuyos atributos representen las piezas que componen el coche. Las sub-clases aportarán sus propios atributos (en el caso de
  • 20. vehículos con aire acondicionado, todos aquellas piezas que lo componen), permitiendo la definición de todos los posibles modelos. Además, es posible que una sub-clase herede atributos y propiedades de más de una clase. Este proceso se denomina herencia múltiple y lo veremos con más detalle en capítulos posteriores. La herencia es, sin duda alguna, una de las propiedades más importantes de la OOP, ya que permite, a través de la definición de una clase básica, ir añadiendo propiedades a medida que sean necesarias y, además, en el sub-conjunto de objetos que sea preciso. La herencia permite que los objetos pueden compartir datos y comportamientos a través de las diferentes sub-clases, sin incurrir en redundancia. Más importante que el ahorro de código, es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa. Conclusión. Identidad, clasificación, polimorfismo y herencia caracterizan a los lenguajes orientados a objetos. Cada uno de estos conceptos puede utilizarse aisladamente, incluso aparecen en otras metodologías de programación, pero juntos se complementan en una relación sinérgica. Los beneficios de la programación orientada a objetos son más que los que pueden verse a simple vista. El énfasis en las propiedades esenciales de un objeto, fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente más preciso, general y robusto que si pusiéramos el énfasis en los procedimientos y los datos por separado
  • 21. Construcción de clases Tal como hemos definido con anterioridad, una clase de objeto describe a un grupo de objetos con similares: o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos La abreviatura clase es utilizada en lugar de clase de objetos. Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase. Cada objeto <<conoce>> cuál es su clase. La mayoría de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecución del programa. A continuación expondremos una serie de pasos para definir una clase. Identificar los objetos. Para ello examine la aplicación e identifique las distintas estructuras de datos, algunos tips a tener en cuenta son los siguientes: • El nombre de la aplicación a veces nos da la del nombre del objeto principal • Los objetos software pueden imitar el mundo real, modelizando las propiedades de los objetos a través de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a través de variables. • Los objetos no se han de corresponder siempre con objetos físicos, sino que también pueden ser entidades que se utilizan dentro de la construcción del programa.
  • 22. • Piense en el objeto en <<primera persona>>. Este truco nos puede identificar claramente los atributos y sus operaciones asociadas: <<Soy un cuadrado y me muevo, giro, agrando y reduzco. Las partes que me componen son los puntos de mis vértices>>. • Una clase es un tipo de dato que puede ser usado para declarar objetos, de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables. Definir las operaciones Defina las operaciones a partir de los objetos, examinando las distintas operaciones asociadas a un conjunto de datos. Los atributos del objeto se deben definir de tal manera que éstos satisfagan todos los requerimientos de cada una de las operaciones. A estas operaciones añada dos más: Crear y Destruir. Estas operaciones nos servirán para inicializar y borrar el objeto dentro de la aplicación. A partir de la definición de las propiedades, un objeto siempre debe ser capaz de responder a estas tres preguntas: ¿Qué soy ?, ¿Qué hago? ¿Qué dejo ver al resto del mundo? Algunas de las operaciones sólo se aplicarán a determinados objetos pertenecientes a las clases. Hemos visto que a través de la herencia podemos <<especializar>> un sub conjunto de objetos creando una sub-clase. Únicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase. El resto, que corresponden a las operaciones de sub-Grupos de objetos, se deben definir dentro de la especializaciones de la clase. Definir los atributos de los objetos Una vez identificados los objetos, defina los atributos de la clase. Un atributo es un valor almacenado en los objetos de la clase. Aplicaciones orientadas a objetos A lo largo de la historia de la programación, los lenguajes y las metodologías han pasado de una relativa simplicidad a una complejidad creciente. Los lenguajes de programación orientados a objetos pretenden aportar simplicidad a la tarea de programación de grandes aplicaciones. Cuando se crearon las primeras computadoras todavía no existían los lenguajes de programación, tal como ahora los entendemos. El lenguaje ensamblador puede considerarse como el primer lenguaje de programación propiamente dicho. Permitía al usuario un diálogo más fluido con la máquina a través de instrucciones que tenían relación directa con el conjunto de operaciones que la máquina podía realizar. A partir de este momento empezó la evolución de los lenguajes de programación. _cada uno tenía su entorno definido y aunque en realidad todos los lenguajes son
  • 23. polivalentes (en teoría, con cualquiera de ellos se puede desarrollar cualquier programa de gestión o científico). Pronto apareció la especialización funcional. Así, COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el diseño de aplicaciones de gestión.; FORTRAN (Formula Translator) para el diseño de aplicaciones científicas; APL (A Programming Language) para el cálculo matemático, etc. A medida que el software tomaba importancia, aparecieron los primeros problemas relacionados con la programación. Al tiempo que aumenta el volumen de un programa, disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento. En un intento de solucionar estos problemas aparecen las metodologías de programación. Una metodología es un conjunto de reglas destinadas a simplificar las tareas de diseño, estimación de costes, desarrollo y mantenimiento de un sistema informático. A menudo se ven acompañadas con unas herramientas (CASE: Computer Aided Software Engeneering) que permiten la elaboración estructurada y documentada de los sistemas informáticos. DISEÑO DE APLICACIONES Y ELECCIÓN DE ENTORNO. En entorno de programación implica tanto el lenguaje de programación como al empleo de una determinada metodología. Los lenguajes de programación no se producen por generación espontánea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar. De esta manera se crea un conjunto de reglas para simplificar la tarea de programación. Generalizadas y codificadas, se convierten en <<principios>> de los que surgen los lenguajes de programación en un afán por darles soporte. Estos <<principios>> son modelos que proporcionan técnicas que , a su vez, deben aplicarse en el diseño e implementación de los programas. Estas técnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar. Decimos que un lenguaje de programación <<soporta>> un conjunto de <<principios>> si el lenguaje simplifica la aplicación de estas técnicas. A estos <<principios>> se les denomina metodologías de programación. Las metodologías de programación son modelos sobre como diseñar e implementar los programas. Diferentes modelos tienen como resultado diferentes técnicas. Que cada técnica sea distinta no implica que una sea la verdadera y que las demás falsas. Por el contrario, las metodologías se complementan entre sí. Lo que todas las metodologías tienen en común es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver, y que la implementación de la solución se debe realizar mediante un conjunto de módulos preferiblemente reutilizables. Las metodologías orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales. La base de esta metodología es que una estructura de datos debe contener las operaciones
  • 24. que los modifican. La técnica que se utiliza para obtener esta <<abstracción de datos>> es la encapsulación de los mismos en una estructura conocida como clase. El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define. Por tanto, la metodología orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos, al asociar a cada dato el conjunto de operaciones que lo modifican. Como podrá ver, ambos enfoques son complementarios. Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos, considere el diseño de un <<compilador>> El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el código objeto que posteriormente se convierte en programa. Para realizar su trabajo, el compilador lee el fichero fuente y separa de él las variables y las instrucciones. Las variables constituyen la tabla de símbolos del programa, mientras que las instrucciones se organizan en un árbol sintáctico donde se plasman todas la referencias que realizan los mandatos y funciones entre sí. El modelo mejor establecido es el basado en funciones (procedural) que trata de la construcción de un programa como una colección de funciones. Las metodologías proporcionan una gruía sobre cómo diseñar, organizar e implementar las funciones que componen un programa. El método de diseño es la descomposición funcional que identifica las funciones como los pasos a seguir en la resolución de un problema. La organización en archivos permite que las funciones se agrupen módulos separados, mientras que las técnicas de
  • 25. programación estructurada permiten que las implementaciones de las funciones sean fáciles de consultar y mantener. La programación orientada a objetos está basada en un modelo de construcciones de programas como un conjunto de clases. El diseño orientado a objetos identifica los tipos que representan los distintos objetos en el programa. Las operaciones a realizar con cada uno delos objetos son, al igual que en el modelo procedural, los pasos destinados a solucionar el problema. El objeto sirve además de módulo que puede reutilizarse para la solución de un problema de similares características en otro programa. Ninguna metodología resuelve con acierto todos los tipos de problemas. La programación requiere una especialización como la que se produce en la ingeniería pero todavía no es posible identificarla como una ciencia. Las técnicas a emplear se han de utilizar con exquisito cuidado, sin perder de vista el objetivo de resolver un determinado problema. Actualmente existe la tendencia de identificar la programación con una disciplina como la ingeniería. Sin embargo, debe considerarse más como un arte como la arquitectura, donde se unen la inspiración y el dominio de la técnica. Para la elección de un determinado entorno debemos fijar los criterios necesarios, como los que describimos a continuación.: Tamaño de la aplicación Cuanto mayor sea el volumen de información a procesar, mas necesidad habrá de estructurar dicha información de forma que se fácil su manipulación. 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 método para la obtención de nuevos datos es complicado o requiere un esfuerzo de programación importante. Aunque tratados como grupos independientes, ambos están generalmente interrelacionados. De esta forma una estructura de datos compleja suele ir acompañada de un conjunto de funciones de diseño complejo. Asimismo, una mayor abstracción se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos más complejas. Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en código ejecutable por la máquina) ha de introducir una cantidad grande de código auxiliar para poder ejecutar el código fuente. Si ha programado en C o en Turbo Pascal, habrá observado que los ejecutables son en general de pequeño tamaño. Un simple programa <<Hola mundo>>, clásico de programación. Nunca es mayor de seis líneas de código y su ejecutable es siempre inferior a 10 Kbytes. Si tomamos Clipper el programa no ocupa más de una línea pero más de 200 Kbytes.
  • 26. Rapidez En algunos problemas la rapidez de respuesta es crítica. Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia. Portabilidad La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos. La realización de un programa portable , en general, depende de la elección de un lenguaje de programación , así como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo. La creación de un programa portable a menudo incide negativamente en los apartados de tamaño y rapidez, ya que un alejamiento de la plataforma hardware y del sistema operativo, a menudo se consigue emulando sus características. Esto conlleva un aumento del tamaño y la complejidad del programa, así como un incremento en el tiempo de ejecución. Gestión de recursos Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado. El más limitado, aun más que el espacio en disco, es la memoria. Un programa grande que gestione de manera incorrecta la memoria pronto agotará todos los recursos del sistema. Interface de usuario. Aunque no se puede contar como un factor a considerar, la importancia que el interface de usuario está tomando en los últimos años hace que lo consideremos por separado. El diseño del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones. De hecho, se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programación, para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad. La aparición de interfaces gráficos de usuario estándar (Windows, os2, X- Windows, etc.) ha hecho que factores como la rapidez o el tamaño vuelvan a tomarse en cuenta, después de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular. APLICACIONES ORIENTADAS A OBJETOS Cómo afectan los requerimientos anteriores para la elección de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas? Claridad Al ligar de forma evidente la estructura de la información con los procedimientos que la manipulan, los programas ganan en claridad a la hora de desarrollarlos y mantenerlos. Esto supone una ventaja frente a los lenguajes procedurales , aunque éstos podrían suplir esta deficiencia mediante una correcta elección de los nombres de las variables y funciones, lo que se denomina una <<oportuna codificación>>. Complejidad
  • 27. Cuando la complejidad de un problema es abarcable por una sola persona, resolverlo con una herramienta u otra no aporta grandes ventajas. Pero cuando este desarrollo la tiene que realizar un equipo grande, debe existir una forma para aislar partes de problema. Uno de los problemas más comunes , y a su vez más simples de solucionar en el diseño de grandes sistemas, es el nombre que se da a las funciones y que tipo de datos manipulan éstas. En la realización de un sistema informático se utiliza un equipo de varias personas. El trabajo se divide en tres áreas funcionales: una parte del equipo se encarga del interface de usuario, otra de la manipulación de datos y, la última del diseño de salidas impresas. Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez diseña funciones para su uso interno y para el uso del resto de los grupos. Si no se realiza la división del trabajo de forma adecuada puede producirse el caos. He aquí una pequeña enumeración de los problemas que se pueden encontrar. • Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demás. • Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo. Estas funciones y variables son prácticamente iguales a las desarrolladas por nosotros, pero varían ligeramente en el tratamiento de la información, por lo que no podemos sustituir nuestras funciones. Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria. • El resto de los grupos sólo cubren determinados aspectos de la información a tratar, pero no proporcionan toda la información necesaria para que el programa funcione. El resto de información debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos. • Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los módulos. Tamaño Las aplicaciones orientadas a objetos son ideales para la realización de programas de gran tamaño. Las facilidades de encapsulación y asociación de las funciones a los datos que manipulan, simplifican el proceso de desarrollo. De hecho las bases de datos orientadas a objetos suponen un gran adelanto, ya que aúnan la flexibilidad en la manipulación de los OOP con la capacidad de consulta de un DBMS (Data Base Management System) Relación entre Datos Por el mismo motivo se verán beneficiados aquellos programas que impliquen una relación compleja entre los datos. Este tipo de complejidad permite la utilización de todas las ventajas de los lenguajes de programación orientados a objetos. Propiedades como la herencia ( donde los objetos pueden heredar
  • 28. estructura y operaciones de objetos predecesores), la encapsulación, etc. Muestran en este tipo de programas todas sus ventajas. Rapidez En este aspecto, los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan más a las especificaciones de la máquina. Si la rapidez es crítica, puede elegir un lenguaje de programación como C++, que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C. Gestión de recursos Las aplicaciones orientadas a objetos demandan normalmente más recursos del sistema que las aplicaciones procedurales. La creación dinámica de objetos, que ocupa un lugar en la memoria del ordenador, puede acarrear graves problemas. Una de las soluciones, que incluye alguno delos lenguajes OOP, es liberar a menudo el espacio que los objetos dejan de utilizar. Este procedimiento de optimización como garbage collection (recolección de basura, implementado en java), minimiza los efecto de la creación dinámica de objetos. Interface de usuario. El interface de usuario es uno de los aspectos más importantes en la programación actual. La aparición de sistemas de explotación que soportan un interface gráfico de usuario como Windows, X-Windows o Presentation Manager hace que la mayoría de los usuarios prefieran que sus programas corran bajo este tipo de interface. Este es uno de los puntos fuertes para la elección de un lenguaje OOP. La mayoría de los interfaces gráficos actuales han sido diseñados o rediseñados en base a la OOP. Existen en el mercado librerías de clases que soportan todos los dispositivos de control de ventanas como menús, combo box, listas, barras de herramientas, etc. Lenguajes orientados a objetos Los lenguajes OOP implementan de manera distinta los conceptos de programación orientada a objetos. No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos A Continuación unos consejos que nos facilitarán la elección del lenguaje de programación adecuado: • Si los programas se van a sentar en una cualidad concreta de los OOP como herencia, elija el que mejor soporte le dé. • Los lenguajes interpretados sirven para realizar un desarrollo rápido o para aquellos programas que necesiten una actualización constante. Si el programa necesita rapidez o es crítico respecto al tamaño, considere el uso de lenguajes que incorporen compilador. • No <<reinvente la rueda>>. Si el lenguaje le proporciona una librería de clases no intente reescribrlas de nuevo, use las que le ofrece el sistema. Es más tome como factor de elección las librerías de clases que el compilador incorpora o que estén disponibles en el mercado.
  • 29. • Si necesita mejorar la calidad del programa previniendo errores, utilice un lenguaje que le permita definir las variables con sus tipos asociados. • Si la memoria del sistema es limitada, utilice lenguajes que permitan la creación y destrucción automática de clases dependiendo de su utilización. CARACTERÍSTICAS DE LOS LENGUAJES OOP Herencia múltiple Esta característica suele ser común a la mayoría de los lenguajes OOP, aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo, aunque con distinto tipo y valor, de mas de un predecesor. Alguno de los lenguajes de programación solucionan este problema de forma automática, aunque los más populares generan un error en el tiempo de compilación. Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores. Eficiencia. Los lenguajes OOP arrastraron en un principio la reputación de ser ineficaces. Esto se debía en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados. La existencia de compiladores permite a los desarrolladores ganar rapidez. Actualmente, usando un buen lenguaje orientado a objetos como C++, Java, etc. Junto con las librerías apropiadas para la realización de un programa, puede que se ejecute más rápidamente que el mismo programa compilado con un lenguaje procedural. Asignación de tipos. Los lenguajes orientados a objetos varían de forma sustancial la forma por la que se aproximan a la asignación de tipos. Por asignación de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignación fuerte) o sea simplemente un objeto indeterminado (asignación débil). Eiffel y C son dos lenguajes basados en la asignación fuerte, frente a Smalltalk, en el que todas las variables definidas pertenecen a una clase indeterminada. La asignación fuerte sirve a dos propósitos. Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operación. De forma concreta, en aquellos lenguajes donde está implementado el operator overloading (refefinición de operador), el compilador puede reconocer a través de las clases que entran como parámetros en la operación que operación tiene que utilizar. Por otra, este tipo de declaración permite al compilador un mayor grado de optimización, ya que conoce en todo momento el espacio que ha de asignar. Manejo de memoria. Los OOP son lenguajes que utilizan de manera intensiva la memoria de la computadora. Hay dos tipos de aproximación a la gestión de memoria.
  • 30. El sistema en tiempo de ejecución libera la memoria automáticamente a medida que los objetos dejan de utilizarse. El sistema tiene instrucciones concretas para liberar l memoria explícitamente. Este el enfoque adoptado por lenguajes como C++, que aportan dos operadores: crear y destruir. El primero reserva automáticamente memoria, mientras que el segundo la libera. Encapsulación Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto, de aquellos necesario para su funcionamiento propio. No es propio de los lenguajes orientados a objetos, pero la capacidad de éstos para unir las estructuras de datos a los procedimientos que los modifican lo hacen más potente que los lenguajes llamados <<Modulares>> PANORAMICA DE LOS LENGUAJES OOP A continuación, una pequeña panorámica de los lenguajes orientados a objetos SMALLTALK Fue el primer lenguaje de programación orientado a objetos. Desarrollado en el Xerox PARC, en sus primeras implementaciones no ofrece solamente un interprete, sino que es mucho más ambicioso, integrando intérprete on-line y otros aspectos que le convierten en un <<pseudo>> sistema operativo. Es el primero en aportar la arquitectura de Modelo/Visor/Controlador. El interface de usuario se divide en una definición sobre la que se aplican determinado número de vistas gestionadas por un controlador. El MVC permite al desarrollador concentrarse en la parte esencial de la aplicación (el modelo) y añadir interfaces de usuarios ( las vistas y controles) de forma independiente. Ventajas • Smalltalk es un lenguaje puro orientado a objetos • La implementación a través de un intérprete facilita la labor de desarrollo de programas. Las clases son añadidas, corregidas y depuradas de forma interactiva. • Tiene una sintaxis simple, donde las variables y los atributos no necesitan tener un tipo asociado. Todo está definido en principio como objeto, incluyendo las propias clases. Inconvenientes • Es un lenguaje interpretado, lo que reduce su rendimiento y dificulta su comercialización. • Al proporcionar su propio entorno operativo, interactúa mal con otro tipo de software o hardware Eiffel
  • 31. Es un lenguaje de programación escrito por Bertrand Meyer. Al contrario que Smalltalk, incluye un preprocesador que permite la traducción de código Eiffel a Lenguaje C. Es ideal para la ingeniería de software, que permite la encapsulación , control de acceso y ámbito de las modificaciones. Como lenguaje orientado a objetos <<puro>>, es presumiblemente el mejor por sus capacidades técnicas. Los programas consisten en la declaración de colecciones de clases que incluyen métodos. El punto primordial de un programa Eiffel es la declaración de clases, que asocia atributos. Ambos, clases y atributos, son accesibles a partir de la implementación de un concepto llamado característica. Una característica es, por tanto, una agrupación de datos y unas formas típicas de tratarlos. En Eiffel una declaración de clases puede incluir: • Una lista de características exportables. • Una lista de las clases antecesora: clases de la que ésta es una derivación • Una lista de declaraciones de características. Ventajas • Es un lenguaje orientado a objetos <<puro>> • Eiffel es un lenguaje de programación orientado hacia el diseño de grandes aplicaciones. Las propiedades anteriores le hacen ideal para el diseño de aplicaciones en grupos de trabajo. • El paso intermedio a código C se puede considerar como una ventaja y no como un inconveniente, ya que aquellas secciones que sean difíciles de tratar con Eiffel pueden elaborarse a partir de código C. Su compatibilidad con C asegura también su portabilidad hacia otros sistemas operativos Desventajas • El manejo de la memoria , un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk. • Las librerías de clases son reducidas • El rendimiento es mayor que el de Smalltalk, pero al tener que incluir un módulo Run-time dentro del ejecutable, su tamaño crece y su rendimiento baja. C++ Es un lenguaje de uso general que deriva del C. Añade a su predecesor una serie de características que le convierten en un lenguaje orientado a objetos. Dentro de estas características debemos resaltar: • La abstracción de datos • La programación orientada a objetos, ya que permite asociar a los datos las funciones que los manipulan C++ conserva todas las capacidades de su predecesor C. De hecho, el código C puede tratarse con compiladores C++ y ejecutarse sin ningún problema. En un
  • 32. principio C++ era traducido a código C a través de una utilidad llamada precompilador. También es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir código no orientado a objetos. Enumeramos los aspectos más importantes que hacen del C++ un lenguaje orientado a objetos: • La mayor contribución que realiza C++ al C es la introducción del tipo clase. Las clases permiten definir conjunto de datos y las funciones que los manipulan. • La ocultación de datos es el mecanismo para implementar la abstracción de datos. La abstracción de datos permite al programador <<olvidar>> el funcionamiento interno de una clase, ya que sabe que su funcionamiento no va a alterar anómalamente el funcionamiento de otras clases. Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo básico. • La herencia extiende el concepto de abstracción de datos al permitir la construcción de clases a partir de otras (sus antecesores) • Los operadores definidos por el usuario permiten un tratamiento homogéneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado. Otras características no relativas a la programación orientada a objetos, simplifican el diseño y desarrollo. • Optimización de explotación de memorias, que permite la creación de estructuras de datos dinámicas. • Implementación del solapamiento de funciones. Esta técnica permite definir varias funciones con el mismo nombre pero distintos parámetros de entrada. Dependiendo de los parámetros que acompañen la llamada de la función, será ejecutada una u otra. BASES DE DATOS ORIENTADAS A OBJETOS La programación orientada a objetos es muy versátil. No se restringe únicamente al diseño de programas, sino que es posible aplicar los mismo conceptos al diseño de bases de datos. El uso de una técnica orientada a objetos trasciende a la elección de la base de datos. El uso de esta técnica en el diseño de bases de datos aporta las cualidades de esta metodología a nuestro diseño. Eficiencia, coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta. Como valor añadido, el uso de una misma técnica en el diseño, tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema. Las bases de datos orientadas a objetos unen dos tecnologías:
  • 33. La de las bases de datos y la de los lenguajes orientados a objetos. Los Lenguajes OOP aportan gran capacidad en la manipulación de datos, pero no implementan el almacenamiento y consulta de grandes volúmenes de datos. Por el contrario, las bases de datos convencionales aportan un dominio de las técnicas de almacenamiento y consulta de grandes volúmenes de datos, aunque su capacidad de manipulación es limitada. Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulación de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS. Las aplicaciones convencionales que agrupan programas y bases de datos, separan ambos entornos de manera clara. El desarrollador usa técnicas procedurales para la descomposición de problemas y su codificación en funciones. Posteriormente se emplean técnicas como las de Entidad – Relación para el diseño de la base de datos. Su codificación suele realizarse en un lenguaje de alto nivel como C, que lleva embebido código SQL. El término embebido describe la inclusión de un módulo escrito bajo otro lenguaje de programación dentro del código fuente. El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el código embebido. Como podrá observar, esta técnica presenta defectos evidentes: Por una parte, se utilizan diferentes técnicas para el desarrollo de ambos apartados, por lo que la tarea de diseño no se puede considerara como un todo único Por otra y en gran medida debida a la primera, los lenguajes que se utilizan para la implementación difieren, dificultando las labores de mantenimiento. Ejemplos Como habrá podido observar a lo largo de esta monografía, nuestro propósito no ha siso el de enseñar una metodología ni la enseñanza de un determinado lenguaje de programación. El objetivo es por el contrario dar una panorámica de los conceptos de la programación orientada a objetos, de las metodologías y de las técnicas de desarrollo de aplicaciones. En este apartado nos centraremos en lo aspectos más importantes en el desarrollo de aplicaciones bajo OOP: identificación de objetos y análisis de asociaciones. OBJETOS Y ASOCIACIONES. La parte más importante de todo diseño es el punto de entrada de la definición de requerimientos. En la observación atenta de los requerimientos se pueden hallar la mayoría de los objetos pertenecientes a nuestra aplicación.
  • 34. En este ejemplo nos centraremos en la identificación de objetos a partir de los requerimientos básicos de la aplicación. Este análisis es el primero que debe hacerse dentro de OOP y es también útil para cualquier otra técnica de programación. Analicemos la siguiente definición de requerimientos: El <<sistema de tratamiento de información documental>> es un gestor de <<documentos>>, de tal manera que puedan clasificar en uno o varios <<índices>>, recuperar para su modificación, visualizar, para su consulta, reclasificar, archivar y destruir. El <<sistema>> procesa la petición del <<usuario>>, devolviendo un mensaje e indicando el éxito o el fracaso de la petición. De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos. De esta forma hemos identificado los objetos principales de la aplicación y las operaciones asociadas a cada uno de los objetos. Observe el siguiente diagrama. Hemos traducido los requerimientos a un conjunto de objetos. Estos están inconexos entre sí, pero aplicando la <<lógica>> podemos ver las relaciones que existen entre ellos. Sin salirnos de las especificaciones de la aplicación, vemos que existen las asociaciones que aparecen en la siguiente figura:
  • 35. Como podemos observar, algunas asociaciones cíclicas como Indice <-> Documento. Estas asociaciones pueden simplificarse. También existen otras implícitas que examinaremos más adelante, como Usuario->Documento->Indice. Observemos gráficamente las asociaciones que mantienen los objetos entre sí en la siguiente figura
  • 36. Como puede verse hay dos asociaciones sospechosas, ya que no son verbos sino los sustantivos <<petición>> y <<mensaje>>. Estas dos asociaciones se pueden <<objetivar>> de tal manera que reúnan las condiciones de un objeto. Para ello debemos volver a las especificaciones iniciales. Cuando se archiva un documento se debe indicar el nombre del documento así como los índices a los que se va a asociar. Las peticiones de recuperación deben incluir un índice y el nombre del archivo. Las consultas a los índices deben incluir el nombre del indice y una condición. A partir de este análisis se puede depurar con HERENCIA y posteriormente realizar un <<ajuste fino>> LA RELACION DE HERENCIA. A continuación vamos a centrarnos en la relación de herencia. Como ya sabemos ésta puede agrupar objeto son similares característica o bien especializar objetos a partir de una genérico. Observemos nuevamente los requerimientos de nuestro sistema: www.desarrolloweb.com Introducimos para los más profanos las bases sobre las que se asienta la Programación Orientada a Objetos.
  • 37. 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. Motivación Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar. La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la POO. Cómo se piensa en objetos Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar. Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar. Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2. La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc. Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos
  • 38. también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc. Clases en POO 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. Objetos en POO Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instace que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto. Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el lenguaje de programación que se emplee, pero será algo parecido a esto. miCoche = new Coche() Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de la clase coche. Estados en objetos Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama estado.
  • 39. Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto. miCoche.color = rojo El objeto es miCoche, luego colocamos el operador punto y por último el nombre e la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignación. Mensajes en objetos Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasándole el mensaje “ponte en marcha”. Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar. miCoche.ponerseEnMarcha() En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier llamada a una función, dentro irían los parámetros. Otras cosas Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a las cosas más básicas. También existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades más potentes de la POO. La herencia sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos construir unos objetos a partir de otros sin tener que reescribirlo todo. El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos para definir un código que sea compatible con objetos de varios tipos. Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No hay que olvidar que existen libros enteros dedicados a la POO y aquí solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengáis que poneros delante de ellas en los lenguajes de programación que debe conocer un desarrollador del web. Ejemplo concreto de programación orientada a objetos Para conseguir un ejemplo concreto de lo que es la programación orientada a objetos, podemos entrar en el Manual de PHP 5. Realmente este manual explica las características de orientación a objetos de PHP 5 y ofrece ejemplos concretos de creación de clases con características como herencia, polimorfismo, etc.
  • 40. www.java.ciberaula.com Tecnología orientada a objetos Hoy en día la tecnología orientada a objetos ya no se aplica solamente a los lenguajes de programación, además se viene aplicando en el análisis y diseño con mucho éxito, al igual que en las bases de datos. Es que para hacer una buena programación orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnología, de ahí la importancia del análisis y el diseño orientado a objetos. La programación orientada a objetos es una de las formas más populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los últimos años. Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar. Una Perspectiva Histórica Tradicionalmente, la programación fue hecha en una manera secuencial o lineal, es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones. Los lenguajes basados en esta forma de programación ofrecían ventajas al principio, pero el problema ocurre cuando los sistemas se vuelven complejos. Estos programas escritos al estilo “espaguetti” no ofrecen flexibilidad y el mantener una gran cantidad de líneas de código en sólo bloque se vuelve una tarea complicada.
  • 41. Frente a esta dificultad aparecieron los lenguajes basados en la programación estructurada. La idea principal de esta forma de programación es separar las partes complejas del programa en módulos o segmentos que sean ejecutados conforme se requieran. De esta manera tenemos un diseño modular, compuesto por módulos independientes que puedan comunicarse entre sí. Poco a poco este estilo de programación fue reemplazando al estilo “espaguetti” impuesto por la programación lineal. Entonces, vemos que la evolución que se fue dando en la programación se orientaba siempre a ir descomponiendo más el programa. Este tipo de descomposición conduce directamente a la programación orientada a objetos. Pues la creciente tendencia de crear programas cada vez más grandes y complejos llevó a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas. Para estas necesidades ya no bastaba la programación estructurada ni mucho menos la programación lineal. Es así como aparece la programación orientada a objetos (POO). La POO viene de la evolución de la programación estructurada; básicamente la POO simplifica la programación con la nueva filosofía y nuevos conceptos que tiene. La POO se basa en la dividir el programa en pequeñas unidades lógicas de código. A estas pequeñas unidades lógicas de código se les llama objetos. Los objetos son unidades independientes que se comunican entre ellos mediante mensajes. Veamos con mayor detenimiento este tema. ¿Cuáles son las ventajas de un lenguaje orientado a objetos? • Fomenta la reutilización y extensión del código. • Permite crear sistemas más complejos. • Relacionar el sistema al mundo real. • Facilita la creación de programas visuales. • Construcción de prototipos • Agiliza el desarrollo de software • Facilita el trabajo en equipo • Facilita el mantenimiento del software Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.
  • 42. El modelo Orientado a Objetos Para entender este modelo vamos a revisar 4 conceptos básicos: • Objetos • Clases • Herencia • Envío de mensajes 1. Objetos Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos. Existen muchas definiciones que se le ha dado al Objeto. Primero empecemos entendiendo que es un objeto del mundo real. Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor. Digamos que para leer este artículo lo hacemos a través del monitor y una computadora, ambos son objetos, al igual que nuestro teléfono celular, un árbol o un automóvil. Analicemos un poco más a un objeto del mundo real, como la computadora. No necesitamos ser expertos en hardware para saber que una computadora está compuesta internamente por varios componentes: la tarjeta madre, el chip del procesador, un disco duro, una tarjeta de video, y otras partes más. El trabajo en conjunto de todos estos componentes hace operar a una computadora. Internamente, cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compañías con diversos métodos de diseño. Pero nosotros no necesitamos saber cómo trabajan cada uno de estos componentes, como saber que hace cada uno de los chips de la tarjeta madre, o cómo funciona internamente el procesador. Cada componente es una unidad autónoma, y todo lo que necesitamos saber de adentro es cómo interactúan entre sí los componentes, saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre, o conocer donde se coloca la tarjeta de video. Cuando conocemos como interaccionan los componentes entre sí, podremos armar fácilmente una computadora. ¿Que tiene que ver esto con la programación? La programación orientada a objetos trabaja de esta manera. Todo
  • 43. el programa está construido en base a diferentes componentes (Objetos), cada uno tiene un rol específico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas. Todo objeto del mundo real tiene 2 componentes: características y comportamiento. Por ejemplo, los automóviles tienen características (marca, modelo, color, velocidad máxima, etc.) y comportamiento (frenar, acelerar, retroceder, llenar combustible, cambiar llantas, etc.). Los Objetos de Software, al igual que los objetos del mundo real, también tienen características y comportamientos. Un objeto de software mantiene sus características en una o más "variables", e implementa su comportamiento con "métodos". Un método es una función o subrutina asociada a un objeto. Para redondear estas ideas, imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 km/h. Si pasamos ese objeto del mundo real al mundo del software, tendremos un objeto Automóvil con sus características predeterminadas: Marca = Ford Modelo = Focus Color = Azul Velocidad Máxima = 260 km/h Cuando a las características del objeto le ponemos valores decimos que el objeto tiene estados. Las variables almacenan los estados de un objeto en un determinado momento. Definición teórica: Un objeto es una unidad de código compuesto de variables y métodos relacionados. 2. Las Clases
  • 44. En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.). Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla le llamamos CLASE, y a los equipos que sacamos a partir de ella la llamamos OBJETOS. Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo tipo y mismas características. Definición teórica: La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares características.
  • 45. Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una clase. Definición Teórica: Una instancia es un objeto de una clase en particular. 3. Herencia La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia. Por ejemplo, imaginemos que estamos haciendo el análisis de un Sistema para una tienda que vende y repara equipos celulares. En el gráfico vemos 2 Clases más que posiblemente necesitemos para crear nuestro Sistema. Esas 2 Clases nuevas se construirán a partir de la Clase Celular existente. De esa forma utilizamos el comportamiento de la SuperClase. En general, podemos tener una gran jerarquía de Clases tal y como vemos en el siguiente gráfico:
  • 46. 4. Envío de Mensajes Un objeto es inútil si está aislado. El medio empleado para que un objeto interactúe con otro son los mensajes. Hablando en términos un poco más técnicos, los mensajes son invocaciones a los métodos de los objetos. Características asociadas al POO Abstracción La abstracción consiste en captar las características esenciales de un objeto, así como su comportamiento. Por ejemplo, volvamos al ejemplo de los automóviles, ¿Qué características podemos abstraer de los automóviles? O lo que es lo mismo ¿Qué características semejantes tienen todos los automóviles? Todos tendrán una marca, un modelo, número de chasis, peso, llantas, puertas, ventanas, etc. Y en cuanto a su comportamiento todos los automóviles podrán acelerar, frenar, retroceder, etc. En los lenguajes de programación orientada a objetos, el concepto de Clase es la representación y el mecanismo por el cual se gestionan las abstracciones. Por ejemplo, en Java tenemos: public class Automovil { // variables // métodos } Encapsulamiento El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto es, las variables y métodos. Es tener todo esto es una sola entidad. En los