Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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.
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.
Al mismo tiempo que se da la Crisis del Software, por otro lado la Orientación a Objetos
(OO) se empezó a discutir a fines de los años 60 con el desarrollo del lenguaje SIMULA67
por Nygaard y Ole-Johan Dahl en el Centro de Cálculo Noruego, en él, introdujeron los
conceptos de clase, subclases y rutinas, muy parecidos los conceptos a los lenguajes
orientados a objetos de hoy en día. A mitad de la década de los 70 los científicos del
Centro de Investigaciones Palo Alto de XEROX (PARC) (XEROX Palo Alto Research Center)
crearon el lenguaje SMALLTALK, el primer lenguaje orientado a objetos consistente y
completo. En él cada elemento del lenguaje fue realizado un objeto. Este último lenguaje
evolucionó a través de varios lanzamientos realizados por PARC.
A pesar de este movimiento temprano hacia los lenguajes orientados a objetos, sólo se
lograron pequeñas incursiones en la comunidad de la programación general. El progreso
reciente se ha acelerado debido principalmente a la disponibilidad de las extensiones
orientadas a objetos para dos lenguajes populares: C y PASCAL, y a las extensiones
prometidas para otros lenguajes comerciales populares como BASIC y COBOL.
Luego los programas se fueron haciendo más grandes y complejos, así que las cosas se
comenzaron a hacer dificiles de manejar (es decir aún más dificiles de manejar), allí nació
una nueva forma de programación... una nueva metodología, la programación
estructurada.
Programación Estructurada
Cuando las cosas se hicieron demasiado complejas, fue necesario tomar decisiones
radicales, cuando nació la programación estructurada la solución fue sencilla...
demasiado sencilla, agrupar las cosas en funcionalidades... funcionó y de hecho funciona
tanto que si se hubiese deseado disminuir nuevamente la complejidad de los problemas
de la programación a gran escala simplemente se hubiesen creado niveles de
agrupamiento de funcionalidades, algo como funcionalidades de funcionalidades, pero
el problema se volvería a repetir entre más grande fuera el software, así que hubo
necesidad de cambiar las cosas de una manera más profunda.
Bien, el banco ha crecido un poco más razón por la cual necesitan modernizar su sistema
(hardware, programas etc...) se ponen en la labor de crear nuevos programas, como los
requieren en el menor tiempo imposible dividieron su área de desarrollo en varios
grupos: uno que hará toda la parte con cuentas corrientes, otro que funciona con
cuentas de ahorro, y otro con tarjetas débito, otro con CDT etc. Para evitar algunos
problemas definen una serie de estándares de nomenclatura y ese tipo de cosas. Tiempo
después los módulos del programa ya están casi listos así que se disponen a integrar
todos esos programas en un programa único, pero cuando iniciaron con eso pasó algo
inesperado...
Los señores del grupo de cuentas de ahorros crearon unas funciones, se llaman débito
y crédito, mientras tanto los señores del grupo de CDT´s , los de tarjetas, los de cuenta
corriente etc. crearon también todos funciones llamadas débito y crédito, pero todas
hacen cosas diferentes cada una para su caso puntual... resultado de la operación: hay
que renombrar todas las funciones débito crédito para que todas se llamen diferentes,
cosa que todos los grupos... con desagrado decidieron acatar, todos excepto dos.
Así las cosas les tardara un poco de tiempo a los señores hacer los cambios que necesitan
porque definitivamente el programa integrador no se puede crear si hay dos funciones
con el mismo nombre dentro del paquete, imaginemos todas las variables que habrán
quedado con nombres parecidos, sino es que iguales... en un programa tan enorme
evitar esa situación es algo muy complicado.
Pero en POO las cosas habrían sido diferentes, puesto que desde que se han creado los
módulos cada uno es un componente por separado y las funciones de los Sre del CDT
serian accedidas algo así como:
CDT.debito
CDT.crédito
Ahorros.debito
Ahorros.crédito
Y así sucesivamente con cada uno de los módulos, de hecho todos podrían tener las mismas
variables: a, b, c, d, e, f y no pasaría absolutamente nada.
Otro problema con el sistema estructurado es que si los señores de CDT tienen una función para
encripción única que no debe ser usada por nadie más... no hay garantía de que más adelante
los señores de tarjeta de crédito la usen, y pueden hacerlo por que hace parte del mismo
programa enlazado, eso sería muy difícil sino imposible de evitar en programación estructurada,
pero en POO sería muy sencillo ya que le diríamos a nuestra función que fuera de uso privado,
es decir solo utilizable dentro del grupo de CDT.
Según el texto leído sobre programación estructura y POO explique de forma sencilla
porque afirmaría usted que la POO posee más ventajas que la Programación
estructurada.
Esta es la forma en que la gente normal ve el mundo, así es que este pensamiento tiene
intrínsecamente sentido.
Todos los sistemas que merecen la descripción de Orientado a Objetos contienen estos
mecanismos esenciales, aunque los mecanismos pueden no estar realizados
exactamente de la misma forma. Analicemos ahora los términos de la ecuación.
Defina con sus propias palabras que es un objeto y las partes que este consta
CLASE. Una clase es una descripción de un conjunto de objetos casi idénticos. Una clase
consta de métodos y datos que resumen las características comunes de los objetos,
incluyendo una descripción de cómo crear un nuevo objeto de la clase. En otras
palabras, las clases contienen los anteproyectos para crear objetos.
Los objetos serían PuntoA, PuntoB donde tanto PuntoA como PuntoB tienen las
características de posición.
Veamos ahora cómo sería la aplicación con el sistema de los números complejos en
forma orientada a objetos.
Algunos objetos son p y q que por ser números complejos son de la forma (real,
imaginaria).
Ejemplo 1:
Ejemplo 1:
Ejemplo 2
Ejemplo 2:
Para este ejemplo usaremos la clase publicación.
Los objetos tienen la posibilidad de actuar, la acción sucede cuando un objeto recibe un
mensaje, que es, una solicitud que pide al objeto que se comporte de alguna forma.
Cuando se ejecutan los programas orientados a objetos, los objetos reciben, interpretan
y responden a mensajes procedentes de otros objetos.
Los mensajes pueden contener información para clasificar una solicitud. El objeto
emisor del mensaje no necesita conocer la forma en que el objeto receptor está llevando
a cabo la solicitud, solamente conoce que se está sucediendo.
Los procedimientos residen en el objeto y determinan cómo actúa el objeto cuando
recibe un mensaje.
De hecho, los métodos proporcionan el único mecanismo para cambiar los valores de
las variables del objeto. (A este hecho se le conoce como encapsulamiento). Los
mensajes que reciben el objeto son los únicos conductos que conectan al objeto con el
mundo exterior.
En base al ejemplo anterior escriba otro ejemplo donde represente al objeto, clase
método y herencia.
Características deseadas de la Programación Orientada a Objetos
Las características deseadas pueden variar y es difícil ponerse de acuerdo.
1. Principio de Abstracción
• Datos
• Procedimientos
2. Encapsulamiento
3. Herencia
• Simple
• Múltiple
4. Comunicación con mensajes
5. Polimorfismo
Antes de ver cada uno de estos conceptos es importante mencionar que los ejemplos
de los mismos se darán con seudo código, por lo que daremos una idea de este
concepto.
En el seudo código se utilizan palabras en nuestro lenguaje que son similares a las
palabras utilizadas por los lenguajes de programación. En realidad el seudo código es
muy similar a un algoritmo pero más estructurado, ya que se le deben de dar sangrías a
la escritura de las instrucciones para hacerlo más legible en la lectura. Iniciamos:
Principio de abstracción:
• Es el principio de ignorar los aspectos de un sujeto que no son relevantes en un
propósito de orden de concentración más exacto.
• El proceso de representar entidades reales como elementos internos a un programa
recibe el nombre de abstracción.
• De esta forma, un tipo de dato abstracto se puede escribir concentrándose en las
operaciones que manipulan a los objetos de este tipo, sin caer en detalles de
representación y manipulación de datos.
Procedimiento. Es una operación que lleva a cabo un servicio a los atributos del
objeto.
Ejemplo 1:
En el ejemplo de la posición en el espacio se quiere representar en objetos, queremos
abstraer esta parte del mundo real a un programa que pueda representarlos. Una
posición en el plano la determinan las coordenadas (x, y), que serían nuestros datos y
los procedimientos que las manipulen pueden ser:
iniciar posición
leer x
leer y
saluda
Ejemplo 2:
En el ejemplo de los números complejos se tiene que éstos son de la forma (real,
imaginaria), donde real e imaginaria son números reales, de lo que podemos intuir que
los datos sean: real e imaginaria
Los atributos que manipulan estos datos pueden ser todos los operadores aritméticos
(+, -, *, /) y los
operadores de relación ( =, < > ).
Comunicación con mensajes. Las variable de un objeto sólo pueden ser manipuladas por
sus propios métodos. Es decir, los mensajes mandan una petición de acción a un objeto,
mientras que los métodos del objeto deciden cómo llevar a cabo la acción.
Polimorfismo
Es cuando una clase tiene varios procedimientos con el mismo nombre, pero con distinto
tipo y/o número de argumentos.
Ejemplo 1:
Se puede tener más de un procedimiento saluda en la clase posición.
a) Se puede tener un procedimiento procedimiento Saluda escribe "Hola soy posición";
b) Se puede tener un procedimiento procedimiento Saluda (mensaje) escribe mensaje;
El primer suceso dice: "Se crean los objetos cuando se necesitan." y el tercer suceso
indica: "Se borran los objetos cuando ya no son necesarios y se recupera la memoria.".
Estos sucesos se desarrollan con los constructores y destructores.
• Constructores
Los constructores son procedimientos de la clase que permiten crear objetos. Un
constructor es llamado para asignar memoria a un objeto, para asignar valores a los
datos del objeto y realizar tareas iniciales para un nuevo objeto.
Esto implique que si no podemos trabajar con un objeto que no haya sido creado a
través de un constructor y si sólo se pueden modificar mediante los procedimientos de
la clase NO TENEMOS FORMA DE CORROMPER EL OBJETO, lo cual aumenta la
confiabilidad y facilita la rehusabilidad.
• Destructores
Un destructor es un procedimiento de la clase que realiza la tarea opuesta a su
constructor, libera la memoria que fue asignada al objeto que fue creado por el
constructor. Es deseable que el destructor se invoque implícitamente cuando el objeto
abandone el bloque donde fue declarado.
Métodos Virtuales. Una jerarquía de clases unidas por la herencia, con nombres de
métodos comunes para operaciones que son similares conceptualmente, pero que
realizan tareas diferentes. Como consecuencia, cuando diferentes objetos de las
diferentes clases de la jerarquía reciben el mismo mensaje, éste provoca acciones
totalmente distintas.
Ejemplo:
En el ejemplo 1, Posición, Punto y Círculo pueden recibir cada uno el mensaje saluda y
responder de distinta forma, los procedimientos serían:
a) posición saluda
"Hola, soy posición";
b) punto saluda
"Hola, soy punto";
c) círculo saluda
"Hola, soy círculo"
Se puede hacer algo más complejo como hacer procedimientos que mostrará el punto
o mostrará el círculo.
Ejemplo:
En el ejemplo 2 de números complejos se tienen los operadores aritméticos un ejemplo
de sobrecarga de operadores sería:
complejos operador + (complejo,complejo)
complejos operador *(complejo,complejo)
Con sus propias palabras defina una a una las características de la programación
Orientada a Objetos
Mapa Conceptual
POO
Posee Datos
Es principios
Consta
Consta
Abstracción
Comunicación con
mensajes
Polimorfismo