Taller N°1 Programación Orientada a Objetos Creasys Ltda. Agosto 2008.
-
Upload
nacio-rosas -
Category
Documents
-
view
219 -
download
0
Transcript of Taller N°1 Programación Orientada a Objetos Creasys Ltda. Agosto 2008.
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:
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
Paradigmas de programación de software
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”.
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).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.
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.
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 classFFMMDim oFFMM2 as NEW classFFMMDim oFFMM3 as NEW classFFMMDim oVentaFFMM as New classVentaoFFMM1.Precio = 100oFFMM1.Cantidad = 10oFFMM1.Calcular ‘ calcula PxQ
oFFMM2.Precio = 50oFFMM2.Cantidad = 10oFFMM2.Calcular ‘ calcula PxQ
oFFMM3.Precio = 1500oFFMM3.Cantidad = 1oFFMM3.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
Public Class FrmGPIEjemplo Inherits frmGPIBase
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load lblTituloGrande.Text = "Formulario de Prueba" End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End SubEnd Class
Public Class TPersonaPrivate _Nombre as String Private _Edad as Integer
Private _CuantosPasosLLeva as Integer
Public Property Nombre() As String Get Return _Nombre End Get Set(ByVal value As String) _Nombre = value End Set
End Property
Public Property Edad() As Integer Get Return _Edad End Get Set(ByVal value As Integer) _Edad = value End Set
End Property
Public ReadOnly Property Pasos() As Integer Get Return _CuantosPasosLLeva End Get
Public Sub Caminar() _CuantosPasosLLeva += 1
End Sub
End Property
End Class