Download OOP: Programacion Orientada a Objetos

Document related concepts

Polimorfismo (informática) wikipedia , lookup

Visitor (patrón de diseño) wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Objeto inmutable wikipedia , lookup

Common Lisp wikipedia , lookup

Transcript
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):
File:Write( int i );
Escribe un integer
File:Write( long l );
Escribe un long
File:Write( float f );
Escribe un flot
File:Write( string s );
Escribe una cadena
File:Write( string s, boolean b );
Escribe una cadena pasándola a
Mayúsculas
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.
Recomendaciones
Divide 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.
erJuan.Caminar()
+-++--+¦+-------+
¦ ¦ ¦ +---- Mensaje. Invoca el método de igual nombre1.
¦ ¦ +--------- Operador de envío2.
¦ +------------ Objeto de la clase hombre Juan.
+--------------- El prefijo hombre denota su clase.
1.En algunos lenguajes OOP se puede hacer que un mensaje invoque un
método con nombre distinto.
2. Como hemos comentado, cada lenguaje puede utilizar su propio
operador de envío.
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):
Dim oFFMM1 as NEW classFFMM
Dim oFFMM2 as NEW classFFMM
Dim oFFMM3 as NEW classFFMM
Dim oVentaFFMM as New classVenta
oFFMM1.Precio = 100
oFFMM1.Cantidad = 10
oFFMM1.Calcular
‘ calcula PxQ
oFFMM2.Precio = 50
oFFMM2.Cantidad = 10
oFFMM2.Calcular
‘ calcula PxQ
oFFMM3.Precio = 1500
oFFMM3.Cantidad = 1
oFFMM3.Calcular
‘ calcula PxQ
oVentaFFMM.Agregar(oFFMM1)
oVentaFFMM.Agregar(oFFMM2)
oVentaFFMM.Agregar(oFFMM3)
oVentaFFMM.Calcular
‘ calcula sumatoria de los tres FFMM
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 clase contiene 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.
Ejemplo (VB.NET)
Public Class frmGPIBase
Inherits System.windows.forms
Private Sub
frmGPIBase_Load(ByVal sender As
Object, ByVal e As System.EventArgs)
Handles Me.Load
Me.BackColor = Color.Blue
me.ForeColor = Color.Yellow
End Sub
End Class