380 likes | 570 Views
Taller N°1. Programación Orientada a Objetos. Creasys Ltda. Agosto 2008. Objetivos. Lograr conocer los elementos de la Programación a los Objetos. Lograr comprender características básicas de los objetos. ¿ A quién está dirigido este taller ?.
E N D
Taller N°1 Programación Orientada a Objetos Creasys Ltda. Agosto 2008
Objetivos Lograr conocer los elementos de la Programación a los Objetos. Lograr comprender características básicas de los objetos.
¿ A quién está dirigido este taller ? Ingenieros de Software que tienen conocimientos de Visual Basic 6.0 Ingenieros de software que desean conocer e implementar la plataforma dotNET en los desarrollos de sus proyectos. Jefes de proyecto que deseen ampliar sus competencias. Tiempo estimado 1.5 Horas
Contenidos Introducción ¿ Qué es la OOP ? Conceptos básicos Clase Objeto Herencia Encapsulación Polimorfismo
Evolución de los lenguajes de programación • Los avances tecnológicos. • Los avances conceptuales (de planteamiento) • Los avances en cuanto a enfoque de la programación. • Existen distintos paradigmas de programación, tales como:
Paradigmas de programación de software • Programación imperativa • Programación lógica • Programación funcional • Programación estructurada o declarativa • Programación dirigida por eventos • Programación modular • Programación Orientada a Aspectos • Programación Orientada a Objetos • Programación con restricciones • Programación por capas
Pero, toda la historia de los lenguajes de programación se ha desarrollado en base a una sola idea conductora: hacer que la tarea de realizar programas para computadores sea cada vez lo más simple, flexible y portable posible.
Anterior a la POO existían otros modelos de programación --entre ellos la programación estructurada-- los cuales presentaban ciertos problemas, tales como: • Programas monolitos difíciles de mantener. • Dificultad de modificación de una parte sin afectar al sistema entero. • Aprovechamiento muy difícil de código existente, siendo cada programa construido desde cero ( o casi ). • Dificultad en la separación de tareas y responsabilidades, todo programador tenía que conocer cada parte del sistema. • Dificultad para transmitir los modelos de negocios en los modelos de programación. • Dificultad en la integración de sistemas.
El hecho de utilizar un lenguaje POO no implica que ya no tendremos los problemas citados, para ello debemos realmente programar orientados a objetos y olvidar antiguas prácticas de la programación. De nada sirve tener una sola clase llamada “Programa” con un sólo método llamado “principal”.
Las metodologías Orientados a Objetos resuelven en cierta medida los problemas anteriores y nos dan los siguientes beneficios: • Transición intuitiva de los modelos de análisis de negocios a los modelos de implementación de software. • Mantenimiento e implementación de cambios más eficiente y rápida. • Permite separar partes del sistema para trabajar en ellos sin afectar al resto del mismo. • Permite la reutilización de código de componentes en otros sistemas e incorporar componentes de terceros. • Permite una mejor integración de sistemas distribuidos con un bajo acoplamiento. • Mejores interfaces graficas y componentes al aprovechar frameworks (marcos de trabajo) pre construidos y probados.
Pero… para obtener éstas ventajas debemos de aplicar a nuestro software los principios y metodologías de la POO (OOP).
Que es la OOP La OOP son un conjunto de técnicas que nos permiten incrementar enormemente nuestro proceso de producción de software. Aumenta drásticamente nuestra productividad por un lado y permitiéndonos abordar proyectos de mucha mayor envergadura. Usando estas técnicas, nos aseguramos la reusabilidad de nuestro código, es decir, los objetos que hoy escribimos, si están bien escritos, nos servirán para "siempre".
En la OOP podemos re-usar ciertos comportamientos de un objeto, ocultando aquellos otros que no nos sirven, o redefinirlos para que los objetos se comporten de acuerdo a las nuevas necesidades.
Conceptos básicos Clase Abstracción que hacemos de nuestra experiencia sensible. (Agrupación, generalización, tipificación). Cada clase posee cualidades que la diferencian de las otras. Clase Abstracta Una clase abstracta es aquella que construimos para derivar de ella otras clases, pero de la que no se puede hacer una instancia. Clase Padre Una clase padre es aquella que posee clases hijas que heredan sus características.
Objeto Es un conjunto de datos y métodos. Datos: Características o atributos (propiedades en un lenguaje OOP). Métodos: Comportamientos (Procedimientos y/o funciones en lenguaje OOP). Una instancia particular de una clase particular. Importancia de los datos y métodos están tan intrínsecamente ligados, que forman una misma unidad conceptual y operacional.
Herencia Es la capacidad que poseen los objetos de “transmitir” los datos y métodos a sus hijos. Esta es la cualidad más importante de la programación OOP. Al implementarla nos dará mayor potencia y productividad. Permite ahorrar horas y horas de codificación y de depuración de errores.
Aspectos Técnicos A la clase heredada se le llama subclase o clase hija A la clase de la que se hereda superclase o clase padre. Al heredar, la clase heredada toma directamente el comportamiento de su superclase
Se heredan los datos y los métodos, por lo tanto, ambos pueden ser redefinidos en las clases hijas, aunque lo más común es redefinir métodos y no datos. Al redefinir un método queremos o bien sustituir el funcionamiento del método de la clase padre o bien ampliarlo.
Encapsulación Capacidad de ocultar datos y metodos a los demas objetos.
Polimorfismo • Por polimorfismo entendemos aquella cualidad que poseen los objetos para responder de distinto modo ante el mismo mensaje. • Importancia • Nos facilita el trabajo ya que el nombre de los métodos que tenemos que recordar disminuye ostensiblemente.
Sobrecarga (Overloads) Puede ser considerada como un tipo especial de polimorfismo que casi todos los lenguajes de OOP incluyen. Varios métodos (incluidos los “constructores”) pueden tener el mismo nombre siempre y cuando el tipo de parámetros que recibe o el número de ellos sea diferente.
Ejemplo: La clase File (que escribe en un Archivo) puede tener tantos métodos Write() como tipos de datos queramos escribir (no se preocupe si no entiende la nomenclatura, céntrese en la idea):
Planteamiento de la implementación A este respecto no hay ninguna regla invariable que seguir, ya que esto es más un arte que una ciencia. Solo existen recomendaciones para diseñar las clases.
RecomendacionesDivide y vencerás Procure construir un método para realizar cada pequeña tarea que necesite. Cuanto menor sea el ámbito de actuación de un método, más probablemente le resultará reutilizable en otro momento y más fácil le resultará codificarlo. Haga lo mismo con las clases: no escatime en su número. Ante la duda, siempre es mejor dividir una clase en dos que agrupar dos en una.
No piense de forma procedural En OOP no se puede pensar de una forma procedural, una clase no es un conjunto de funciones relacionadas, es un objeto tan real como los demás que están fuera del computador. Los objetos son de verdad, no son cajas de almacenamiento de código.
Los métodos no son funciones No defina métodos como si fueran funciones, sino como acciones inherentes al objeto: así podrá cambiar el funcionamiento interno completamente sin que cambie ni el nombre de la clase ni los nombres de los métodos. Si al cambiar el funcionamiento de una clase el nombre de la clase y de los métodos no tienen sentido es que estaba mal diseñado.
Recomendación especial • Para plantear el diseño de las clases: • Identificar el ámbito de trabajo: Para así ver qué clases están en la raiz de la jerarquía (las más abstractas). • Especificar los objetos finales: Las relaciones entre las clases del mismo ámbito y las relaciones con las clases de los otros ámbitos.
De la teoría a la realidad • El operador de envío • Para poder mandar mensajes a los objetos, necesitamos un operador, a este le llamamos el operador de envío. Cada lenguaje puede tener el suyo, pero es frecuente que se utilicen los dos puntos (':') o el punto ('.‘), otras implementacioes OOP tienen el simbolo flecha (‘->’).
Así, si queremos enviarle el mensaje Caminar al objeto Juan de la clase hombre, escribiríamos lo siguiente.
El operador de envío hace que se ejecute la porción del código agrupada bajo el nombre del método, y el método trabajará con los datos propios de la instancia de la clase a ala que se refiera.
Constructores y Destructores Para poder utilizar un objeto, previamente hemos de crearlo, lo que hacemos mediante el constructor de la clase Puede haber más de un constructor (por la sobrecarga), por ejemplo (cercano a VB.Net):
Accesibilidad de Datos y Métodos Indican la visibilidad que una variable o un método tienen. Tanto los distintos tipos posibles, como la palabra reservada para denotarlos dependen, como es lógico, de cada lenguaje. De todos modos, todos los lenguajes OOP incluyen al menos los tres siguientes:
Públicos : Son visibles dentro y fuera de la clase sin restricción alguna. La palabra reservada más común para denotarlos es "public". • Como ya hemos comentados, los datos no deben ser nunca públicos, ya que romperían el principio de Encapsulación que debe seguir todo proyecto OOP.
Protegidos : Estos miembros de la clase (ya sean datos o métodos) son visibles desde dentro del la clase y desde cualquier otra clase heredada, es decir, clases hijas (o subclases, como prefiera llamarlas). La palabra reservada más común para denotarlos es "protected" o " friend".
Privados : Lo miembros privados son solo accesibles desde dentro de la clase donde existen. La palabra reservada más común para denotarlos es "private".
Resumen • Resumamos brevemente las ideas más importante: • Una clase es un conjunto de reglas de creación y comportamiento de los objetos. • Un objeto es un conjunto de datos que se comporta de acuerdo a las reglas de su clase. • Resumamos para terminar qué es, internamente, una clase y qué un objeto. • Una clase es un conjunto de funciones -métodos- e información para construir objetos de la clase -los datos-. • Los métodos están almacenados en la clase y trabajan con los datos de cada objeto. • La clasecontiene los métodos y los objetos los datos. • La clase también tiene que ser capaz de crear objetos, por lo que los datos de la clase (comunes a todos los objetos) tienen que estar declarados en la clase, pero ella solo los usa para generar objetos. • Cuando el constructor de una clase crea un nuevo objeto, lo que está fabricando es una estructura de datos (Podemos imaginarlo como un array (vector) en otros lenguajes), que puede contener valores. Existirán tantos casilleros para almacenar valores como datos existan en la clase. Los constructores pueden inicializar todos o algunos de estos datos si lo deseamos.