presentación de powerpoint• reutilización: la herencia respalda el concepto de...
TRANSCRIPT
POOPROGRAMACIÓN ORIENTADA
A OBJETOS
Docente: Rafael Mourglia
INTRODUCCIÓN
• La POO (o OOP de sus siglas en inglés)
es un paradigma y puede aplicarse a
cualquier lenguaje.
• Actualmente está disponible en mayor o
menor medida en todos los lenguajes
tradicionales y en los más actuales(java,
Delphi, php, Python, VB.net, C#, Ruby,
etc)
PARADIGMAS DE PROGRAMACIÓN
• “Un paradigma de programación indica un
método de realizar cómputos y la manera en
que se deben estructurar y organizar las tareas
que debe llevar a cabo un programa ”
• Se asocian a un determinado estilo de
programación.
• Los lenguajes de programación suelen
implementar, a menudo de forma parcial, varios
paradigmas (Imperativo, orientado a eventos,
declarativos).
PARADIGMA ORIENTACIÓN A OBJETOS
• Ofrece mayor dominio sobre el programa
liberándonos aún más de su control.
• Utiliza objetos como bloque esencial de
construcción de software.
• Permite construir programas basándose
en los objetos presentes en la realidad.
• Permiten crear en la computadora
representaciones de esos objetos de la
realidad.
PARADIGMA ORIENTACIÓN A OBJETOS
• En POO, el programador se libera
enormemente de los problemas relacionados
al funcionamiento del programa en sí,
enfocándose más en los requerimientos del
cliente, pudiendo realizar aplicaciones
mucho más complejas.
• Los objetos nos impiden mezclar sus datos
con otros métodos distintos a los suyos.
Conceptos de ingeniería detrás de la
POO
• Cohesión y acoplamiento
• Alta cohesión
– Modularización mediante la utilización de clases
– Cada clase tiene propiedades y métodos que resuelven
problemas de su realidad.
– Cada método de una clase resuelve problemas sólo de la
clase
• Bajo acoplamiento
– La relación de una clase con otra debe ser a nivel de objeto
(no relacional).
– La modificación de una clase no repercutirá en la otra.
Mejora de la mantenibilidad
– Los atributos de un objeto son privados para que otro objeto
no tenga acceso directo a los mismos.
Conceptos de ingeniería detrás de la
POO
• Legibilidad.- si se requiere analizar cierta funcionalidad
estará enfocada a uno o muy pocas clases.
• Mantenibilidad.- los cambios que se requieran realizar
en el código serán reducidos a una sola clase
específica.
• Reusabilidad.- las clases bien definidas a un solo
propósito pueden ser fácilmente reusadas en otros
segmentos de nuestro código. También aquí aplica la
herencia y polimorfismo
• Alta capacidad de prueba.- las clases requeridas para
realizar pruebas unitarias serán mínimas y bien
delimitadas.
¿QUÉ NO ES LA POO?
• No es un sistema de comunicación con los
programas basados en ventanas, y entorno
gráfico en general. – Puesto que, normalmente, los lenguajes de POO suelen
presentar estas características y habitualmente estos entornos
suelen desarrollarse con estas técnicas, algunas personas
tienden a identificar la POO a entornos de este tipo.
• No es un un lenguaje. – De hecho las técnicas de POO pueden utilizarse en cualquier
lenguaje conocido. (JAVA, C#, VB.NET, Python, Ruby, PHP)
CARACTERÍSTICAS DE LA POO
• La POO, agrupa un conjunto de técnicas
que nos permiten desarrollar y mantener
mucho más fácilmente programas de una
gran complejidad.
• Concéptos fundamentales:
– Clase y Objeto
– Abstracción
– Encapsulación
– Herencia
– Polimorfismo
DEFINICIÓN DE OBJETO
Según RAE:1. m. Todo lo que puede ser materia de conocimiento o sensibilidad
de parte del sujeto, incluso este mismo.
2. m. Cosa
Para POO:
•“Cosa", real o imaginaria, física o intangible, viva
o inerte que existe enmarcado en alguna realidad.
•La idea fundamental es que un objeto es una
entidad (o noción) única. Cada objeto es una
individualidad, que puede estar relacionado o
constituido por otros objetos.
DEFINICIÓN DE OBJETO
• Conceptualmente los objetos se componen de
dos elementos: 1. Atributos: son los datos (o propiedades) que nos interesa
trabajar dentro de una determinada realidad.
2. Métodos: son las acciones u operaciones que trabajan sobre
el objeto.
• En un objeto las datos y los métodos deben
estar intrínsecamente relacionados de tal
manera que formen una misma unidad
conceptual y operacional.
• Cada objeto debe contener sólo sus propios
atributos y métodos.
DEFINICIÓN DE CLASE
• Conceptualmente una Clase es una plantilla o
molde imaginario que sirve para definir objetos.
• Analogía: La clase es como el plano de un
edificio, mientras que los objetos son todos los
edificios concretos que yo puedo construir con
ese plano.
• En la clase se definen las características y
acciones en común que tienen las entidades u
objetos que representa.
• Decimos que un objeto es una instancia de una
clase.
ABSTRACCIÓN
• Se refiere a concentrarse en las características esenciales
ignorando detalles específicos de las mismas y dejando de
lado otras características que no interesen.
• Ejemplo: realidad referente a una automotora y los autos que
vende a sus clientes.
– Concentrarnos en los autos y en los clientes que lo comprarán. Esto
puede implicar planes de pago, investigar si está en el clearing de
informes. Otros elementos como de donde sacó el dinero con que va a
pagar, o para que quiere el vehículo son irrelevantes.
– De los autos nos puede interesar su marca, modelo, potencia,
procedencia, rodado. Datos como cuanto tiempo demoró en armarse, o
quien lo trajo a la automotora, son irrelevantes.
– De los clientes no puede interesar su documento, nombre y apellido,
teléfono, dirección. Datos como estado civil, si ya tiene otro auto o incluso
fecha de nacimiento son irrelevantes.
– Otro punto es detectar que acciones puede hacer un cliente. El mismo
puede, comprar un vehículo al contado, puede entregar uno como parte
de pago. O la venta puede ser en efectivo, con tarjeta de debito o de
crédito. Otras acciones serán irrelevantes.
RELACIÓN ENTRE CLASE Y
OBJETO• En la clase se definen aquellas propiedades un
común a un grupo de objetos
Un Vehículo en términos generales tiene:
•Marca
•Modelo
•Motor
•ABS
•Color
•Cantidad puertas
A su vez realiza acciones:
•Encender
•Andar
•Cambiar velocidad
RELACIÓN ENTRE CLASE Y
OBJETO
Marca: FIAT
Modelo: Uno Sporting
Motor: 1.4 8V
ABS: SI
Color: Gris claro
Cantidad puertas: 5
NUEVO
Marca: Renault
Modelo: Symbol
Motor: 1.6
ABS: NO
Color: Rojo
Cantidad puertas: 4
NUEVO
DEFINICIÓN DE ENCAPSULACIÓN
• Una clase debe ser una estructura
cerrada, no se debe poder acceder a ella
si no es a través de los métodos definidos
para la misma.
• Por lo tanto todos los datos de una clase
son privados y se accede a ellos
mediante métodos públicos.
• Cada dato o atributo de una clase deberá
tener un método accesor y/u otro
modificador.
DEFINICIÓN DE ENCAPSULACIÓN
• Siguiendo con el ejemplo de un auto
(observándolo como objeto), actualmente
es posible saber el estado general del
mismo con solo ver un tablero.
• Si el auto tiene temperatura, habrá un
“método” llamado termómetro que nos lo
indica. De otra forma tendríamos que
acceder al motor y comprobarlo
manualmente.
ENCAPSULACIÓN EN VB.NET
• En VB.NET podemos y debemos aplicar
el concépto de encapsulación de la
siguiente forma.
• Definir atributos:
– Private _marca As String
– Private _color As String
ENCAPSULACIÓN EN VB.NET
• Para los métodos accesores y
modificadores debemos definir las
propiedades de la clase mediante la
intrucción Property.
• La instrucción Property genera un método
accesor Get y un método modificador Set.
• Por defecto una instrucción Property
contiene un Get y un Set, pero es posible
utilizar sólo uno de los dos.
ENCAPSULACIÓN EN VB.NET
ENCAPSULACIÓN EN VB.NET
• Al momento de establecer un valor a una
propiedad y de obtenerlo, se hace de la
misma forma que si fuera un atributo, solo
que ahora estaremos accediendo a la
propiedad (ya que el atributo se encuentra
oculto)
ENCAPSULACIÓN EN VB.NET
Set
Get
Objetos que se componen de otros
objetos– En un sistema bien diseñado tendremos que un objeto
se relaciona (o se asocia) con otro, y de alguna forma
debemos establecer una relación entre un objeto y otro.
– En el ejemplo vemos al objeto Empresa y al objeto
Empleado.
– Sabemos que Empresa tiene RazonSocial, Direccion,
RUT y además tiene un Trabajador que es un
Empleado.
Empresa
+RazonSocial: String+Direccion: String+RUT: Long+Trabajador: Empleado
Empleado
+Cedula: Long+Nombre: String+FechaNacimiento: Date+Telefono: String+Direccion: String
Asociación entre objetos• En ningún momento la Empresa debe conocer
propiedades que son propios del empleado, como por
ejemplo su cédula.
• Porque además de estar duplicando datos, no
estaríamos aplicando una de las características de un
objeto donde dice que “Cada objeto debe contener
sólo sus propios atributos y métodos”
Empresa
+RazonSocial: String+Direccion: String+RUT: Long+CedulaTrabajador: Long
Empleado
+Cedula: Long+Nombre: String+FechaNacimiento: Date+Telefono: String+Direccion: String
Asociación entre objetos
• Por lo tanto, siguiendo con el ejemplo, la
Empresa sólo sabe quien es su empleado, pero
nada más. Si desea conocer algún dato del
mismo, debe «preguntar» a su empleado y él
con gusto le brindará todos los datos que
necesite.Empresa
+RazonSocial: String+Direccion: String+RUT: Long+Trabajador: Empleado
Empleado
+Cedula: Long+Nombre: String+FechaNacimiento: Date+Telefono: String+Direccion: String
Dim cedulaEmp = Empresa.Trabajador.Cedula
CONSTRUCTORES
• Para poder utilizar un objeto, previamente
hemos de crearlo; esto es lo que hacemos
mediante el constructor de la clase.
• Para esto se utiliza un operador especial
proporcionado por el lenguaje de
programación que normalmente se llama
‘New’.
• El constructor o los constructores son
notados de una forma especial:
• En VB.NET:
CONSTRUCTORES
• Así, para crear un objeto de la clase
Persona, llamado Juan, escribiremos lo
siguiente:
Dim Juan As Persona
Juan = New Persona()
• Le estamos diciendo al método
constructor que nos devuelva un nuevo
objeto Persona.
CONSTRUCTORES
• Supongamos que este objeto tiene tres
datos y que queremos darle valores a
esos datos del objeto luego de creado:
Edad, Estatura y Color_Ojos. Haremos lo
siguiente:
Juan.Edad = 32
Juan.Estatura = 180
Juan.Color_Ojos = “Marron”
CREAR CONSTRUCTORES
• Habitualmente, los constructores de clase se crean de
tal modo que podamos hacer las dos cosas a la vez:
crear el objeto y dar valores a sus datos, veamos cómo:
Dim Juan As Persona
Juan = New Persona(32, 180, “Marron”)
• Para esto el constructor en la clase Persona de crearà
de la siguiente forma:
Public Sub New(ByVal pEdad As Integer, ByVal pEstatura As Integer,
ByVal pColor_Ojos As String)
Edad = pEdad
Estatura = pEstaturaColor_Ojos = pColor_Ojos
End Sub
VARIOS CONSTRUCTORES
• Normalmente las clases tiene más de un
constructor, de esta forma podemos crear
objetos e inicializarlos de distintas formas.
Así, podemos tener un constructor de la
clase Persona que recibe solo la edad,
otro la edad y la estatura, otro la edad, la
estatura y el color de ojos, etc.
• El número y tipo de constructores solo
depende de nuestras necesidades y del
sentido común.
CONSTRUCTOR ARGUMENTO CERO
• Existe un constructor especial al que se le llama
"constructor argumento-cero" y es aquel que no
recibe ningún parámetro.
• Él inicializa el objeto con los valores por defecto.
De este modo, podríamos tener un constructor
por defecto de la clase Persona que pusiera el
dato edad a 30, la estatura a 175 y el Color-de-
ojos a marrón. O todos los datos en cero, o
simplemente el cosntructor vacío.
• En todos las clases siempre es conveniente
crear un constructor de este tipo.
DEFINICIÓN DE HERENCIA
• Se define como: un mecanismo por el cual una
clase existente permite compartir las
características (atributos y métodos) comunes a
una nueva clase que se crea a partir de la
anterior. Esta nueva clase puede a su vez
contener atributos y métodos propios.
• A la clase existente se le denomina superclase.
• A la clase que hereda de otra se le denomina
subclase.
• Cada subclase puede ser superclase de otras
TERMINOLOGÍA RELACIONADA A
LA HERENCIA• Superclase: la clase cuyas características se heredan se
conoce como superclase (o una clase base o una clase
principal).
• Subclase: la clase que hereda la otra clase se conoce como
subclase (o una clase derivada, clase extendida o clase hija).
La subclase puede agregar sus propios campos y métodos
además de los campos y métodos de la superclase.
• Reutilización: la herencia respalda el concepto de
“reutilización”, es decir, cuando queremos crear una clase
nueva y ya hay una clase que incluye parte del código que
queremos, podemos derivar nuestra nueva clase de la clase
existente. Al hacer esto, estamos reutilizando los
campos/atributos y métodos de la clase existente.
Definición extraída de Deitel
• La herencia, es una forma de reutilización de software en la que se
crea una nueva clase absorbiendo los miembros de una clase
existente, y se mejoran con nuevas capacidades, o con
modificaciones en las capacidades ya existentes. Con la herencia,
los programadores ahorran tiempo durante el desarrollo, al reutilizar
software probado y depurado de alta calidad. Esto también aumenta
la probabilidad de que un sistema se implemente con efectividad.
• Al crear una clase, en vez de declarar miembros completamente
nuevos, el programador puede designar que la nueva clase herede
los miembros de una clase existente. Esta clase existente se
conoce como superclase, y la nueva clase se conoce como
subclase.
• Cada subclase puede convertirse en la superclase de futuras
subclases.
“Como programar en JAVA” Deitel. Pág.: 378
EJEMPLO DE HERENCIA
• Se desea representar a los distintos integrantes de una
selección e futbol.
• Se desea representar tres objetos importantes: Futbolista,
Entrenador y Masajista.
EJEMPLO DE HERENCIA
• Observar: en las tres clases tenemos atributos y métodos que
son iguales ya que los tres tienen los atributos id, Nombre,
Apellidos y Edad; y los tres tienen los métodos de Viajar y
Concentrarse:
EJEMPLO DE HERENCIA
• Si se tuviera que implementar en código cada
clase, se estaría repitiendo atributos y
métodos que son comunes a todas las clases.
• Como solución al problema anterior se crea
una clase padre (superclase) llamada
SeleccionFutbol con las características en
común, y luego cada clase heredará de
SeleccionFutbol e implementará sólo
aquellas características no comunes al resto
EJEMPLO DE HERENCIA
VENTAJAS DE LA HERENCIA
• Se ahorra código
• Si necesitamos un cambio que deba
afectar a todas las clases, sólo bastará
con modificar la superclase.
• Solucionar un error en la superclase
implicará solucionar el error en todas
las subclases.
• Un objeto de una clase hija puede
crearse dentro de un objeto de una
clase padre.
DESVENTAJAS DE LA HERENCIA
Atención: No es que existan desventajas por el solo
hecho de utilizar herencia. Mas bien son elementos que
se deben considerar en el diseño de un programa,
donde se deberá evaluar si sirve o no su aplicación.
• Un error en la superclase repercutirá en las
subclases.
• Cuando un objeto de una clase hija es instanciada
dentro de un objeto de una clase padre, sólo serán
visibles los atributos y métodos de la clase padre.
(Aunque esto puede ser utilizado a favor)
• La vinculación con una base de datos puede tener
una mayor complejidad de implementación.
• Sólo se puede heredar de una clase padre.
¿CUANDO DEBO UTILIZAR
HERENCIA?
• Depende de la realidad y los requerimientos del
programa a desarrollar.
• La herencia debe aportar una solución concreta.
Que una realidad concuerde con la definición de
herencia, no significa que se deba aplicar.
• Aplicar herencia sólo por ahorrar unas pocas
líneas de código, puede no tener sentido.
• Si la herencia forma parte de un determinado
patrón de diseño o determinado método se utiliza
de forma muy recurrente, se puede considerar la
herencia como solución.
IMPLEMENTACIÓN EN VB.NET
La clase padre o
superclase se crea
como cualquier
otra
IMPLEMENTACIÓN EN VB.NET
La clase hija o
subclase se crean
sólo las
características
propias de la clase.
Luego se hereda
de la clase padre
utilizando inherits
seguido del
nombre de la
superclase.
CLASE ABSTRACTA
• Una clase abstracta es aquella que
construimos para heredar de ella otras
clases, pero de la que no se puede
instanciar.
• Siguiendo con el ejemplo de la selección
de futbol, podríamos considerar que
nunca habrá un objeto SelecciónFutbol,
pero sí será necesaria la herencia para
otras funcionalidades.
CLASE ABSTRACTASeleccionFutbolEn el diagrama de
clases la
representación no
cambia mucho, sólo
que el nombre de la
clase se coloca con
estilo de fuente
cursiva
CLASE ABSTRACTA –
IMPLEMENTACIÓN EN VB.NET
• En la declaración de clase de la clase padre, se
debe agregar MustInherits antes de Class
DEFINICIÓN DE POLIMORFISMO
• Por polimorfismo entendemos aquella cualidad
que poseen los objetos para responder de
distinto modo ante el mismo mensaje.
• Tomemos las clases barco, avión y auto, todas
ellas derivadas de la clase padre vehículo. Un
vehículo cuenta con el método Desplazarse, el
cual será heredado por las clases hijas.
• Sin embargo, si bien todos son vehículos, cada
objeto se desplaza de una forma distinta que
cada una conoce.
DEFINICIÓN DE POLIMORFISMO
• En este caso si llamamos al métotodo
Desplazarse desde Auto, se ejecutará el
método de la clase padre, pero lo mismo pasará
si lo ejecutamos desde Barco o Avión.
Vehiculo
+Marca+Modelo
+Desplazarse(pCoordenadas)
Barco
+Ancla
Avion
+Turbinas
Auto
+Ruedas
DEFINICIÓN DE POLIMORFISMO
• Para solucionar este problema, debemos
sobreescribir el método de la clase padre en
cada clase hija para que de esta forma un
mismo métdo, en este caso Desplazarse realice
distintas acciones dependiendo de cada objeto.Vehiculo
+Marca+Modelo
+Desplazarse(pCoordenadas)
Barco
+Ancla
+Desplazarse(pCoordenadas)
Avion
+Turbinas
+Desplazarse(pCoordenadas)
Auto
+Ruedas
+Desplazarse(pCoordenadas)
POLIMORFISMO - SOBRECARGA
• La sobrecarga puede ser considerada
como un tipo especial de polimorfismo que
casi todos los lenguajes de POO incluyen.
• Varios métodos pueden tener el mismo
nombre siempre y cuando el tipo de
parámetros que recibe o el número de
ellos sea diferente.
POLIMORFISMO - SOBRECARGA
• Por ejemplo la clase Hoja puede tener
tantos método Escribir() como tipos de
datos queramos escribir.
POLIMORFISMO - SOBRECARGA
• Luego al invocar la función, al momento
de asignar los parámetros, nos mostrará
las distintas opciones:
1 de 3: nos indica que existen 3
sobrecargas para el método Escribir