Issuu on Google+

PROGRAMACIร“N ORIENTADA A OBJETOS El mapa de POO explicado fรกcilmente.


AUTORES 

La mayoría de textos en estas diapositivas son citaciones completas de textos publicados en Internet con sus respectivos autores. Este material no es de mi total autoría. Agradezco a los autores la publicación del material referido: son la base para esta exposición. La finalidad de este material es apoyar en su formación a los estudiantes que están ingresando al mundo de la programación. Este material no tiene alguna intención de tomar derechos sobre su contenido. Agradezco su comprensión y espero les sea de utilidad. Su expositor Ing. Argelio E. Romero O.

Abril de 2009


ENTRANDO EN UNA NUEVA REALIDAD Una nueva forma de programar…

Primero


ENTRANDO EN UNA NUEVA REALIDAD 

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


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.  Ejemplo 1: Un televisor puede tener varios atributos como el color, tamaño de la pantalla, forma de los botones, entre otros; y puede tener varias funciones comunes como lo son subir y bajar el volumen, cambiar el canal, colocar entradas de línea externas, etc. Un televisor seria el objeto, ese objeto puede o no ser diferente a otro televisor por sus atributos, pero hay un conjunto de métodos que todos los televisores realizan. Se deduce que el televisor tiene un esquema común, muchas veces hasta implícito. 


CÓMO SE PIENSA EN OBJETOS 

Ejemplo 2: vamos a ver cómo colocamos 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. Esta 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.


ENTREMOS AL TEMA… CLASES, OBJETOS, ATRIBUTOS Y MÉTODOS Segundo


CLASES Y OBJETOS Hay una diferencia fundamental cuando nos referimos a “El televisor” como un invento electrónico y a “El televisor” cuando lo señalamos en nuestra sala... Vuelvan a leer lo anterior.  Sabemos que todos los televisores muestran imágenes, sonidos y demás; pero todos los televisores son diferentes porque físicamente son cuerpos distintos aunque sean idénticos…  Con este ejemplo podemos asimilar la relación entre una Clase y un Objeto. Los televisores se refieren a una Clase, mientras un televisor en particular (el que esta en la sala) se refiere a un Objeto. 


CLASES Y OBJETOS Un Objeto es la instancia de una Clase. “Mi televisor es una instancia de „El Televisor‟ creado por el ser humano”. Se refiere a instancia a algo que se crea a partir de un modelo, de una plantilla, de una Clase. (Instanciar viene de una mala traducción de la palabra instace en inglés que significa ejemplar).  Luego podemos plantear que una Clase es una “plantilla” que define una estructura y un funcionamiento. Y un Objeto es una instancia de una Clase el cual se estructura según esta última (la Clase). 


ATRIBUTOS Y MÉTODOS Los atributos son aquellas propiedades o “variables” que definen a un objeto: el color, el tamaño, etc. Me refiero a “variables” porque es como comúnmente se expresa, pero al final son otros objetos.  Los métodos son las funciones o subrutinas que el objeto emplea: el televisor puede cambiar de canal, luego un método del objeto es “cambiarCanal(int nuevocanal)”. Al igual que habíamos visto en la materia anterior (Fundamentos de Programación 2), los métodos pueden o no devolver un valor, pueden o no ser recursivos, pueden llamar a otros métodos si así lo requieren. 


Y COMO UTILIZO LAS CLASES Y LOS OBJETOS 

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. 

miTelevisor = new Televisor()

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 Televisor. Para acceder a los atributos* y métodos miTelevisor.color=gris  miTelevisor.cambiarCanal(48) 

*Más adelante vemos como referirnos correctamente.


EL POR QUÉ SURGIÓ LA POO Herencia, Polimorfismo, Abstracción, y Encapsulación. Tercero


POR QUÉ SURGIÓ POO  

Aquí viene el “por qué” que tanto nos llama la atención de POO. Como comentamos anteriormente, lo que nos interesa es no repetir lo que ya esta hecho, la reutilización de código. Esta ideología fue la fundamental para despegar. El primer paso fueron las funciones y subrutinas, de cierta manera reutilizamos un código ¿no?. Luego no fue lo único necesario, se buscaba, además de reutilizar el codigo, organizarlo y que sea solido y exponencialmente funcional. Por esto aparecieron nuestros queridos amigos, compadres de toda sus vida de aquí en adelante, se los presento:

Herencia, Polimorfismo, Abstracción y Encapsulación.


HERENCIA El padre y los hijos

Tercero. Primero


HERENCIA 

Herencia es una forma de generalizar las clases que de cierta manera lógica obedecen a una descendencia o jerarquía. De los padres se heredan atributos y métodos (públicos y protegidos, de esto se habla en Encapsulamiento). Coloquemos algo como ejemplo: Hacemos una clase general Persona, la cual tiene como atributos Nombre, Apellido, Edad, Estatura. Hacemos varias clases hijas de Persona llamadas Estudiante, Profesor, Directivo; todas tres tienen los mismos* atributos de la clase padre Persona. Estas tres clases hijas pueden tener otros atributos y métodos nuevos.


HERENCIA De modo pedagógico, un profesor tiene sus funciones adicionales como docente, al igual que el estudiante tiene sus obligaciones adicionales, pero no dejan de ser personas.  Es decir que a pesar de ser Profesores y Estudiantes… son Personas y pueden actuar como tal.  Ejemplo Graphics y Graphics2D. Graphics es una clase que dibuja en el lienzo de un panel y tiene un metodo drawLine, Graphics2D es una subclase de Graphics (hijo) y tiene muchas otros métodos para pintar, pero también tiene drawLine (por herencia), luego Graphics2D puede actuar como su padre Graphics. 


POLIMORFISMO Tercero. Segundo


POLIMORFISMO 

Comencemos con un ejemplo clásico. Tenemos una clase Rectángulo la cual tiene como atributos sus dimensiones y métodos como hallar el área. La clase Rectángulo es un Cuadrilátero (superclase) y sabemos que a cada Cuadrilátero se le puede hallar el área también, por ello cada clase que se derive de ella tienen disponible el método de hallar el área. Luego digamos que todos los cuadriláteros (de diferentes tipos) están en un mismo arreglo y necesito sacar el área de cada uno, basta con recorrer el arreglo y en cada posición ejecutar el método hallarArea(). Por supuesto cada resultado se calcula diferente.


POLIMORFISMO 

 

La facilidad de uso de métodos que son comunes hacen mucho mas fácil la manipulación de acceso a la información que necesitamos, es como generalizar el funcionamiento del sistema. Esta forma de trabajo se denomina Polimorfismo. En el ejemplo final vemos la tremenda utilidad de esta concepción. Se incluye en esta metodología el “final” que se le agrega a atributos, métodos y hasta las clases. “final” traduce que ese atributo no puede cambiar de valor, que ese método no puede modificarse (sobrecargar) o que esa clase no puede ser heredada. Se utiliza muchas veces para mantener una estructura solida o por seguridad de la información y/o de la plataforma.


ABSTRACCIÓN Tercero. Tercero


ABSTRACCIÓN ¿Cuando conduces un carro como aceleras? ¿Cómo haces giras la dirección del carro? Preguntas como estas son fáciles de saber si sabes conducir un automóvil, como todo usuario de ese sistema debe saber…  Ahora ¿Qué pasa en el motor cuando aceleras el carro?¿Sabias que lo que conecta la palanca del acelerador con el motor es una guaya? ¿Cómo funciona el cloche? 


ABSTRACCIÓN En programación sabemos que hay mucho codigo tras métodos que normalmente utilizamos como un subtring… pero saber lo que pasa por debajo es poco probable que nos interese, simplemente aprovechamos esa funcionabilidad y que la clase encargada haga lo que tenga que hacer para darnos el resultado pedido.  Dejar a cargo una función útil especifica o general a una parte del programa es algo ventajoso, en un siguiente nivel no es necesario saber como se hace, solo el resultado y la utilidad que su función brinda. Esto es lo que se conoce como Abstracción. 


ENCAPSULACIÓN ¿Que datos debes obtener?

Tercero. Cuarto


ENCAPSULACIÓN 

Supongamos una programación fácil… tenemos un banco y este maneja un atributo que se llama SaldoTotalBanco. Yo soy una revista que quiere sacar las estadísticas de los bancos con más capital simplemente me voy al banco que quiero y escribo 

Escriba (miBanco.SaldoTotalBanco)

El banco me devuelve el valor y listo, termine mi trabajo… pero si soy malo y en vez de eso pongo 

miBanco.SaldoTotalBanco=5

El banco se declara en quiebra supuestamente… Error. Otro punto a analizar es que si yo consigno en una cuenta me toca actualizar 2 campos, el de mi cuenta y el de SaldoTotalBanco. Y si se actualizan 100 cuentas… Lento y no estable.


ENCAPSULACIÓN 

Para obtener la información del SaldoTotalBanco totalmente válido necesitamos hacer un método que nos devuelva este valor. 

int getSaldoTotalBanco(){ ciclo para que recorre todas las cuentas y las suma en una variable entera “total” retornar total }

Y para que no nos cambien el valor de la variable deberíamos hacer un método falso que no haga nada como setSaldoTotalBanco() o simplemente no declararlo. De esta manera el que quiera obtener esta información no tiene que manipular alguna otra variable del objeto y mucho menos saber como sacar el resultado, simplemente ejecuta el método indicado y el se encarga de todo.


ENCAPSULACIÓN Aja y ¿De qué nos sirve eso si igual puedo acceder de las dos formas (miBanco.SaldoTotalBanco y miBanco.getSaldoTotalBanco() )? Aun puedo hacer mis daños.  Para esto se implementó algo como políticas de visibilidad. 

Publico: algo que se puede acceder desde fuera del objeto o la clase.  Privado: algo que se puede acceder solamente dentro de esa clase o objeto.  Protegido: algo que se puede acceder solamente dentro de esa clase o objeto o de sus hijos o padres (herencia). 


ENCAPSULACIÓN De esta manera entonces podemos controlar el acceso a nuestros atributos y métodos.  El atributo SaldoTotalBanco es privado. 

El metodo getSaldoTotalBanco es publico. 

private int SaldoTotalBanco public int getSaldoTotalBanco()

El arte de saber como manipular la información privada del objeto haciendo que no haya alguna posibilidad de alteración provocada por agentes externos malintencionados se llama Encapsulación.


多Y COMO PUEDO APLICAR TODO ESTO? Desarrollamos presencialmente el siguiente enunciado.


MYPAINT Ejercicio en Tablero…  Haga una aplicación que simule el Paint. Se pueden dibujar líneas, óvalos, círculos, rectángulos, rectángulos bordes suaves.  Utilice herencia, polimorfismo, abstracción, y encapsulación y señale en que parte se utiliza la teoría de cada uno. 


BIBLIOGRAFÍA 

Introducimos para los más profanos las bases sobre las que se asienta la Programación Orientada a Objetos. Miguel Angel Alvarez. http://www.desarrolloweb.com/articulos/499.php Java How to Program, 7th Edition, (Harvey & Paul) Deitel & Deitel, 2006 Pearson, Prentice Hall. (No hay citaciones explicitas de este libro, solo el fundamento teórico).


¡GRACIAS POR SU ATENCIÓN! ÉXITOS CON EL TEMA.

"Ganar no lo es todo, pero querer ganar sí lo es." Vince Lombardi


Segunda Pasada a la teoria de programación Orientada a Objetos (POO)