Está en la página 1de 21

Dedicatoria

Esta monografía se la dedico al profesor que con tanto esfuerzo hace todo lo
posible para hacernos entender clase por clase, le agradezco su paciencia, su
motivación y elocuencia a la hora de dictar cada clase su preciso dominio del tema
y la ayuda extra que nos da al dejar que podamos consultar nuestras dudas y
aclarar nuestras ideas.

pág. 1 Alumno: Vidal Corbalan Edward


Programación orientada a objetos

pág. 2 Alumno: Vidal Corbalan Edward


Índice
 Dedicatoria……………………………………………………01
 Título del tema………………………………………………02
 Índice……………………………………………………………03
 Generalidades……………………………………………….04
 Introducción…………………………………………………05
 Objeto…………………………………………………………..06
 Estructura del objeto……………………………………..08
 Encapsulamiento y ocultación………………………..09
 Organización de los objetos……………………..…….10
 Características………………………………………………15
 Ventajas y desventajas del POO(OOP)………………16
 Lenguajes orientados a objetos………………………..17
 Consideraciones finales…………………………………..19
 Conclusiones………………………………………………….20
 Bibliografía…………………………………………………….21

pág. 3 Alumno: Vidal Corbalan Edward


Generalidades

Pensar en objetos

Pensar en objetos, puede resultar -al inicio- una tarea difícil. Sin embargo, difícil
no significa complejo. Por el contrario, pensar en objetos representa la mayor
simplicidad que uno podría esperar del mundo de la programación. Pensar en
objetos, es simple... aunque lo simple, no necesariamente signifique sencillo.

Y ¿qué es un objeto?

Pues, como dije antes, es “simple”. Olvidemos los formalismos, la informática y


todo lo que nos rodea. Simplemente, olvida todo y concéntrate en lo que sigue. Lo
explicaré de manera “simple”:
Un objeto es “una cosa”. Y, si una cosa es un sustantivo, entonces un objeto es un
sustantivo

Ahora ¿qué me dices si describimos las cualidades de un objeto?

Describir un objeto, es simplemente mencionar sus cualidades. Las cualidades


son adjetivos. Si no sabes que es un adjetivo, estamos jodidos (y mucho). Pero,
podemos decir que un adjetivo es una cualidad del sustantivo.

Entonces, para describir “la manera de ser” de un objeto, debemos preguntarnos


¿cómo es el objeto? Toda respuesta que comience por “el objeto es”, seguida de un
adjetivo, será una cualidad del objeto.

Algunos ejemplos: – El objeto es verde – El objeto es grande etc.


Teniendo en cuenta en si el objeto, pasamos a nuestro tema que es POO.
La Programación Orientada a Objetos (POO u OOP por sus siglas en inglés), es un
paradigma de programación.
Cómo tal, nos enseña un método -probado y estudiado- el cual se basa en las
interacciones de objetos (como en el texto anterior “Pensar en objetos”) para
resolver las necesidades de un sistema informático.

pág. 4 Alumno: Vidal Corbalan Edward


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 difícil de modificar,
ciclos de desarrollo largos y técnicas de codificación no intuitivas.
Un lenguaje orientado a objetos ataca estos problemas. Tiene tres características básicas: 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 cumple 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.

pág. 5 Alumno: Vidal Corbalan Edward


El Objeto
El objeto es la entidad en torno a la cual gira la POO. Un objeto es un ejemplar concreto
de una clase, como por ejemplo el curso de metodología de la programación es un curso
concreto dentro de todos los tipos de cursos que pueden existir. Un objeto pertenece a
una clase, por lo tanto, dispondrá de los atributos (datos) y operaciones (métodos) de
la clase a la que pertenece. Un objeto responde al comportamiento definido por las
operaciones de la clase a la que pertenece. Es decir, si la clase coche dispone del
atributo color y del método arrancar, un coche concreto tendrá un color, y podrá
arrancar, exclusivamente.

Un objeto se puede ver como una "cápsula" de datos y algoritmos que trabajan sobre
esos datos. Un objeto no puede acceder directamente a sus datos (atributos). Los
atributos son sólo accesibles desde la implementación de los métodos de una clase. Un
objeto no puede "manipular" sus propios datos, para ello están los métodos de la clase
de dicho objeto: el comportamiento (métodos) de un objeto puede variar el valor
(estado) de sus datos (atributos). Por ejemplo, nunca debemos hacer lo
siguiente:miCoche.color := 'rojo'. Para esto definiremos métodos que actualicen el
valor de los atributos de un objeto, por ejemplo: miCoche.ponerColor('rojo').

En la POO, un objeto no es algo "eterno", se instancian (crean) y se destruyen. Una


vez que se haya instanciado un objeto puede recibir mensajes. Los objetos pueden
instanciarse de forma estática o de forma dinámica (recordar estos conceptos de
capítulos anteriores). Un objeto estático comienza su existencia una vez es declarado
(instanciación de objetos estáticos), sin embargo, un objeto dinámico no comienza su
existencia al ser declarado, sino al recibir un espacio de memoria (instanciación
dinámica de objetos). Por ejemplo:

pág. 6 Alumno: Vidal Corbalan Edward


Los objetos "se declararán" como atributos de las clases, en las clausulas var de los
métodos o en la lista de parámetros de los métodos. El único objeto que debe ser
"declarado" en el programa principal será el de la clase raíz de toda la jerarquía de
clases (por cuestiones del lenguaje Pascal orientado a objetos). Los objetos estáticos
existen durante la ejecución del programa. Los objetos dinámicos existen mientras no
sean destruidos (liberación de la memoria del objeto), mediante la sentencia dispose.

Tras ser instanciado, un objeto consta de los atributos de la clase a la que pertenece,
y puede recibir mensajes. Dicho objeto determinará a qué método de su clase
corresponde dicho mensaje. Un objeto no podrá recibir mensajes correspondientes a
métodos de una clase a la que no pertenezca. Por ejemplo:

pág. 7 Alumno: Vidal Corbalan Edward


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 inserte 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.
Modificadores de Acceso
Es la forma en cómo clasificamos nuestras propiedades o métodos para hacerlos visibles
o invisibles a quienes usen un objeto de una clase que creamos.

Los modificadores de acceso son: Public, Private, Protected.

En seguida muestro en una tabla la visibilidad de los miembros de una clase dependiendo
del modificador de acceso que tengan.

pág. 8 Alumno: Vidal Corbalan Edward


Encapsulamiento y ocultación
Se facilita a los programadores que vaya a usar el tipo de dato (programadores clientes) el
aprendizaje de cómo trabajar con él, pues se le pueden ocultar todos los detalles relativos a su
implementación interna y sólo dejarle visibles aquellos que puedan usar con seguridad. Además,
así se les evita que cometan errores por manipular inadecuadamente miembros que no deberían
tocar.
Se facilita al creador del tipo la posterior modificación del mismo, pues si los programadores
clientes no pueden acceder a los miembros no visibles, sus aplicaciones no se verán afectadas si
éstos cambian o se eliminan. Gracias a esto es posible crear inicialmente tipos de datos con un
diseño sencillo aunque poco eficiente, y si posteriormente es necesario modificarlos para aumentar
su eficiencia, ello puede hacerse sin afectar al código escrito.
La encapsulación se consigue añadiendo modificadores de acceso en las definiciones de
miembros y tipos de datos. Estos modificadores son partículas que se les colocan delante para
indicar desde qué códigos puede accederse a ellos, entendiéndose por acceder el hecho de usar
su nombre para cualquier cosa que no sea definirlo, como llamarlo si es una función, leer o escribir
su valor si es un campo, crear objetos o heredar de él si es una clase, etc.
Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y
programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en
una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en
la OOP.
Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los
programadores conozcan cómo está distribuida la información o qué información hay
disponible. Esta propiedad de los objetos se denomina ocultación de la información.
Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto
y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. 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 órdenes 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 construido,
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.

pág. 9 Alumno: Vidal Corbalan Edward


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 "árbol". En otros casos puede ser más compleja.
En cualquier caso, sea la estructura simple o compleja, podrán distinguirse en ella tres niveles
de objetos.
-La raíz de la jerarquía. Se trata de un objeto único y especial. Este se caracteriza por estar en
el nivel más alto de la estructura y suele recibir un nombre muy genérico, que indica su
categoría especial, como por ejemplo objeto madre, Raíz o Entidad.
-Los objetos intermedios. Son aquellos que descienden directamente de la raíz y que a su vez
tienen descendientes. Representan conjuntos o clases de objetos, que pueden ser muy
generales o muy especializados, según la aplicación. Normalmente reciben nombres genéricos
que denotan al conjunto de objetos que representan, por ejemplo, VENTANA, CUENTA,
FICHERO. En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o
subclase.
-Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen
descendientes. Suelen llamarse casos particulares, instancias o ítems porque representan los
elementos del conjunto representado por la clase o subclase a la que pertenecen.
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 organización 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.

pág. 10 Alumno: Vidal Corbalan Edward


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, pues 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, apoyándonos 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. Están definidas en un objeto diferente, antepasado de éste (padre,
“abuelo", etc.). A veces estas propiedades se llaman propiedades miembros porque el objeto las
posee por el mero hecho de ser miembro de una clase.

pág. 11 Alumno: Vidal Corbalan Edward


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 incluidos dentro de la cápsula del objeto.
-Métodos heredados. Están definidos en un objeto diferente, antepasado de éste (padre,
“abuelo", etc.). A veces estos métodos se llaman métodos miembros porque el objeto los posee
por el mero hecho de ser miembro de una clase.

Polimorfismo

Concepto

Esta característica permite definir distintos comportamientos para un método


dependiendo de la clase sobre la que se realize la implementación. En todo momento
tenemos un único medio de acceso, sin embargo se podrá acceder a métodos distintos.

Veamos el siguiente ejemplo, en el que se define una clase forma de la que se heredan
las clases círculo y cuadrado.

pág. 12 Alumno: Vidal Corbalan Edward


La clase forma define los métodos dibujar y borrar. En la definición de estos métodos se
implementará el código común a todos los objetos de la clase. Sin embargo cuando
definamos las clases hijas, círculo y cuadrado, será necesario modificar estos métodos
para adaptarlos a las nuevas subclases. El método de la clase padre implementa aquellas
acciones comunes. Las clases hijas añaden las operaciones particulares que necesiten.
Cuando utilicemos los métodos de la clase forma no tendremos que hacer distinción
entre cuadrados y círculos. Gracias al polimorfismo se ejecutará el método adecuado en
función de la subclase a la que pertenezca el objeto.

En la declaración de una clase estamos definiendo el conjunto de métodos y campos que


son accesibles desde fuera de una clase o lo que a menudo se denomina contrato de la
clase. Este contrato determina cual va a ser la funcionalidad de la clase. Pero cuando
extendemos una clase para crear otra estamos ampliando este contrato añadiendo mas
funcionalidades. Por tanto cuando creamos esa nueva clase hacemos uso de dos
mecanismos. Por un lado la herencia para reutilizar las partes comunes de la super-
clase. Y por otro el polimorfismo, es decir el cambio en la forma en la que se
implementa el contrato de la superclase. Como vemos al escribir una subclase podemos
sobreescribir el contrato añadiendo nuevas funcionalidades, pero no cambiarlo.

A la hora de implementar el polimorfismo tendremos dos mecanismos de los que echar


mano para sobreescribir una clase: reemplazar la implementación de un método o añadir
funcionalidades a un método.

Continuando con el ejemplo de Publicacion, habíamos definido dos


subclases Libro y Revista, vamos a ver cómo se implementan estas subclases:

La superclase Publicacion implementaba un método llamado toString() que devolvía una


cadena compuesta en base al identificador, título y autor de una publicación. Al
sobreescribir el método se utiliza el código de la superclase y se añade a la cadena el
número de páginas.

Veamos ahora como afecta la sobrescritura a la subclase Revista:

pág. 13 Alumno: Vidal Corbalan Edward


En este caso vemos como se reemplaza completamente la implementación dada por la
super-clase para el método toString(). Normalmente las revistas no son firmadas por un
único autor, por tanto es un campo que no vamos a utilizar. Es necesario reescribir
completamente el método y añadirle la periodicidad de la revista, campo que sí es
importante en este tipo de publicaciones.

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 automá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, más que al objeto entero.

pág. 14 Alumno: Vidal Corbalan Edward


Características:

Existe un acuerdo acerca de qué características contempla la "orientación a objetos". Las


características siguientes son las más importantes:

 Abstracción: denota las características esenciales de un objeto, donde se capturan sus


comportamientos. 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. El proceso de
abstracción permite seleccionar las características relevantes dentro de un conjunto e
identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo
real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya
que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la
realidad o el problema que se quiere atacar.
 Encapsulamiento: significa reunir 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.
 Modularidad: se denomina modularidad a la propiedad que permite subdividir una
aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser
tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos
módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al
igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.
 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 puedan cambiar el estado interno de un objeto de manera inesperada,
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

pág. 15 Alumno: Vidal Corbalan Edward


especializados de objetos preexistentes. Estos pueden compartir (y extender) su
comportamiento sin tener que volver a implementarlo. 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.
 Recolección de basura: la recolección de basura o garbage collector es la técnica por la
cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular
la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto
significa que el programador no debe preocuparse por la asignación o liberación de
memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie
lo esté usando.
En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de
Programación Orientada a Objetos como C++ u Object Pascal, esta característica no
existe y la memoria debe desasignarse expresamente.

Ventajas y desventajas del POO (OOP)


Vamos a ver las ventajas más importantes de la programación orientada a objetos:

 Reusabilidad. Cuando hemos diseñado adecuadamente las clases, se pueden


usar en distintas partes del programa y en numerosos proyectos.
 Mantenibilidad. Debido a las sencilleces para abstraer el problema, los
programas orientados a objetos son más sencillos de leer y comprender, pues
nos permiten ocultar detalles de implementación dejando visibles sólo aquellos
detalles más relevantes.
 Modificabilidad. La facilidad de añadir, suprimir o modificar nuevos objetos nos
permite hacer modificaciones de una forma muy sencilla.
 Fiabilidad. Al dividir el problema en partes más pequeñas podemos probarlas de
manera independiente y aislar mucho más fácilmente los posibles errores que
puedan surgir.

La programación orientada a objetos presenta también algunas desventajas como


pueden ser:

 Cambio en la forma de pensar de la programación tradicional a la orientada a


objetos.
 La ejecución de programas orientados a objetos es más lenta.
 La necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y
entrenamiento.

pág. 16 Alumno: Vidal Corbalan Edward


Lenguajes Orientados a Objetos
Simula (1967) es aceptado como el primer lenguaje que posee las características
principales de un lenguaje orientado a objetos. Fue creado para hacer programas de
simulación, en donde los "objetos" son la representación de la información más
importante. Smalltalk (1972 a 1980) es posiblemente el ejemplo canónico, y con el que
gran parte de la teoría de la programación orientada a objetos se ha desarrollado.

Entre los lenguajes orientados a objetos se destacan los siguientes:

 ABAP
 ABL Lenguaje de programación de OpenEdge de Progress Software
 ActionScript
 ActionScript 3
 Ada
 C++
 C#
 Clarion
 Clipper (lenguaje de programación) (Versión 5.x con librería de objetos Class(y))
 D
 Object Pascal (Delphi)
 Gambas
 Harbour
 Eiffel
 Java
 JavaScript (la herencia se realiza por medio de la programación basada en
prototipos)
 Lexico (en castellano)
 Objective-C
 Ocaml
 Oz
 R
 Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede
modificarse al algoritmo linearization C3 por medio del
módulo Class::C3 en CPAN)
 PHP (a partir de su versión 5)
 PowerBuilder
 Python
 Ruby
 Smalltalk (Proyecto investigativo. Influenció a Java.)
 Magik (SmallWorld)
 Vala
 VB.NET
 Visual FoxPro (en su versión 6)
 Visual Basic 6.0
 Visual Objects
 XBase++
 Lenguaje DRP
 Lenguaje de programación Scala (lenguaje usado por Twitter) http://www.scala-
lang.org/page.jsp

pág. 17 Alumno: Vidal Corbalan Edward


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.

pág. 18 Alumno: Vidal Corbalan Edward


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 multimedia
les, automatización de oficinas, ambientes de ingeniería de software, etc. Aún en las
aplicaciones tradicionales encontramos que definir interfaces 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
conceptual para analizar, diseñar e implementar aplicaciones permite obtener aplicaciones más
modificables, fácilmente entendibles 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 más 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.
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 múltiple mientras que SmallTalk no lo soporta; en
consecuencia la elección de un lenguaje tiene ramificaciones de diseño muy importantes.
Determinación de las clases. Una clase es un molde que se utiliza para crear nuevos objetos. En
consecuencia, es importante crear el conjunto de clases adecuado para un proyecto.
Desafortunadamente la definición de las clases es más un arte que una ciencia. Si bien hay
muchas jerarquías de clase predefinidas usualmente se deben crear clases específicas para la
aplicación que se esté 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.

pág. 19 Alumno: Vidal Corbalan Edward


conclusiones:

En la P.O.O un objeto no es un dato simple, tiene contenido en su interior un gran número de


componentes muy bien estructurados, ese objeto no es un ente aislado, sino que forma parte de una
organización jerárquica o de otro tipo.

Este tipo de programación contiene una identidad, una clasificación, un polimorfismo y una herencia
para caracterizar un lenguaje orientado a objetos, estos términos podrían utilizarse de un modo
independiente uno de otro, pero juntos complementan una relación sinérgica. Son muchos los
beneficios que se pueden obtener de la programación orientada a objetos de los que podemos ver a
simple vista.

El concepto de programación orientada a objetos no es un término nuevo, ya que ha sido utilizado


en ocasiones anteriores, dado que 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.

pág. 20 Alumno: Vidal Corbalan Edward


Bibliografía:

https://www.monografias.com/trabajos/objetos/objetos.shtml
http://www.ciberaula.com/articulo/polimorfismo
http://www.ciberaula.com/articulo/objeto
http://www.ciberaula.com/articulo/lista_programas_que_usan_poo
https://es.scribd.com/document/324933216/POO-Generalidades
https://es.wikipedia.org/wiki/Objeto_(programaci%C3%B3n)
http://udg.theagoraonline.net/comparte/published/674

pág. 21 Alumno: Vidal Corbalan Edward