El Modelo de Objetos - dsi.fceia.unr.edu.ar estado y comportamiento de un Objeto Todo objeto tiene...
Transcript of El Modelo de Objetos - dsi.fceia.unr.edu.ar estado y comportamiento de un Objeto Todo objeto tiene...
Lenguajes y Paradigmas de Programación
◼ Imperativos: Fortran, C, Basic, Assembler, …
◼ Estructurado: Algol, Pascal, Ada,…
◼ Orientado a Objetos: Smaltalk, C++, C#, VB, Java, Python, …
◼ Procedimentales
◼ Modular
◼ Declarativos
◼ Funcional: Lisp, Haskel, Python, …
◼ Lógico: Prolog
◼ …
Lenguajes y Paradigmas de Programación
◼ Lenguaje imperativo puro
vs.
◼ Lenguaje Orientado a Objetos
Programación orientada a objetos
◼ Encontrar los conceptos (objetos) centrales del problema
◼ Definir las responsabilidades de cada concepto (objeto)
◼ Encontrar las colaboraciones entre los conceptos (objetos)
Conceptos centrales de la POO
◼ Abstracción: características esenciales del objeto
◼ Jerarquía: clasificación de abstracciones
◼ Encapsulamiento: ocultación de la implementación
◼ Modularidad: paquetes de abstracciones agrupadas en unidades discretas
Objetos
◼ Un objeto representa una entidad individual identificable, real o abstracta, con un papel definido y preciso en el dominio del problema.
Propiedades, estado y comportamiento de un Objeto
◼ Todo objeto tiene un comportamiento perfectamente definido siempre y su estado va cambiando en función de los estímulos que recibe.
◼ Un objeto tiene propiedades (campos) y su estado está constituido por los valores actuales de cada una de ellas.
◼ Un objeto implementa operaciones (métodos) para reaccionar a los estímulos (proveniente de otros objetos).
◼ Estas operaciones implementadas por los métodos pueden no solo cambiar el estado (campos) del objeto sino ocasionar la producción de estímulos dirigidos a otros objetos.
Propiedades, estado y comportamiento de un Objeto
◼ Los objetos interactúan unos con otros enviándose mensajes entre ellos, que serían los estímulos a los que los objetos reaccionan ejecutando las operaciones que tienen definidas.
◼ El envío de un determinado mensaje a un objeto se realiza mediante la invocación de un método de ese objeto.
Propiedades, estado y comportamiento de un Objeto
Color exterior
Color tapizado
Año
Patente
…
Acelerar()
Frenar()
EncenderLuces()
…
Propiedades o campos
Métodos
estímulo
(invocación a método)
Ejemplo:MiAuto.Acelerar();
(si MiAuto un auto)
Operaciones
◼ Llamamos operación a la reacción producida por un objeto ante la recepción de un estímulo (invocación al método).
◼ Las operaciones pueden expresarse en términos de un contrato, que el objeto debe respetar, donde el cliente (otro objeto) solicita un servicio asegurando precondiciones y espera postcondiciones
Contrato
◼ Precondiciones: son las cosas que deben asegurarse antes de invocar la operación (que el auto esté moviéndose; no se frenaran autos detenidos; etc.)
◼ Postcondiciones: son las cosas que el receptor garantiza al finalizar la ejecución de la operación (el auto quedará detenido)
◼ Invariantes: son aquellas cosas que permanecen inmutables durante la ejecución de la operación
Tipos de Operaciones
◼ Modificador (set) operación que altera todo o parte del estado del objeto (sus propiedades).
◼ Selector (get) operación que accede al estado interno del objeto (sus propiedades) pero no lo altera.
◼ Constructor: operación que crea un objeto, inicializando su estado (sus propiedades)
◼ Comportamientos específicos
Excepciones
◼ Son el mecanismo utilizado por un objeto para indicar que una operación solicitada no pudo cumplirse:
◼ Porque no se dan todas las precondiciones, o
◼ porque no pueden asegurarse los invariantes, o
◼ porque no pueden asegurarse las poscondiciones de la operación
Métodos
◼ Un método es la implementación de un comportamiento (ejecución de una operación) dentro de un objeto.
◼ Cada método tiene una visibilidad:
◼ público: es accesible por otros objetos
◼ privado: sólo es utilizable por el propio objeto
◼ protegido: es utilizable por el objeto y los objetos instancias de clases derivadas
Métodos
◼ Cada método tiene una signatura con tres componentes:
◼ El objeto receptor
◼ El nombre del método
◼ Los argumentos
◼ La ejecución de un método puede devolver uno, ninguno o varios objetos (dentro de un objeto).
Ejemplo:
this.resultado = lampara.encender(luminosidad_media);
Ciclo de vida de un Objeto
◼ Todo objeto es creado por otro objeto
◼ Un objeto ocupa un espacio de memoria durante un tiempo determinado
◼ Un objeto puede sobrevivir al objeto que lo creo
Destrucción
Construcción Utilización Finalización
Persistencia
Clases y objetos
◼ Cada objeto pertenece a una CLASE
◼ Es en la especificación de la CLASE donde se definen las propiedades, los constructores, los métodos, etc. y por lo tanto todos los objetos de la misma clase tienen el mismo comportamiento y contrato.
Relaciones entre clases
◼ Generalización/Especialización: herencia
Vehículo
Auto
sedan monovolumen
Moto Camión …Un “auto” ES UN “vehículo”(inevitablemente)
Relaciones entre clases
◼ Todo/Parte: agregación
Comprobante
FacturaNota de Crédito
Cliente
Empresas Instituciones Individuos
Comprobante
Fecha
Numero
Cliente
…
Un “comprobante” TIENE UN “cliente” (y no hay forma de que no lo tenga)
Relaciones entre clases
◼ Asociación: dependencia semántica entre clases independientes
Personas Vehículos
Una “persona” puede o no tener uno o mas “vehículos” y un “vehículo” puede o no transportar una o mas “personas”
(es una relación “débil”)
Polimorfismo
◼ Es un concepto esencial que permite construir código reutilizable
◼ Significa que objetos de clases distintas pueden ‘entender’ mensajes iguales
◼ El objeto cliente envía un mismo mensaje a objetos diferentes. Cada receptor implementará un comportamiento específico
Polimorfismo
Objeto cliente
imprimir
imprimir
Imágen
Texto
Cada objeto proveeuna implementacióndistinta de ‘Imprimir’que produce elcomportamientobuscado por el cliente
Polimorfismo
◼ Mensajes que tienen sentido semejante deben tener el mismo nombre para maximizar la flexibilidad que otorga el polimorfismo.
◼ El cliente delega en el objeto receptor la responsabilidad de proveer la implementación correcta
Clases vs. Interfaces
◼ Una interfaz es una definición abstracta de comportamiento deseado.
◼ Mientras que la Clases permiten definir objetos concretos precisando las propiedades de los mismos y su comportamiento mediante los métodos que deben ser implementados al efecto,
◼ Una interfaz se constituye como un enunciado de métodos sin implementar. Es una definición de métodos que deberán ser implementados por las clases que decidan adherir a la interfaz.
El lenguaje de programación Java
◼ Es un lenguaje orientado a objetos
◼ La sintaxis de las expresiones, los operadores y su uso son similares a los del lenguaje C en general y al C++ en particular (por su OO)
◼ También lo son, con algunas excepciones, las instrucciones de asignación a variables, de control de flujo, los tipos primitivos de datos, etc.
◼ A diferencia de C, el código Java se puede escribir usando caracteres Unicode (aunque en general se usan caracteres ASCII)
Maquina Virtual Java (JVM)
◼ Un código fuente java (.java) se compila dando lugar a código ejecutable (.class) que corre en la Máquina Virtual Java.
◼ Mientras exista una maquina virtual java para una plataforma dada, el programa corre.
◼ La JVM puede/podía estar implementada en baremetal.
Estructura de un programa en Java
◼ Un programa Java es un conjunto de clases
◼ Toda la programación se hace dentro de clases
◼ Por lo menos una clase debe tener un método llamado main() que es el punto de entrada al programa.
◼ Las clases pueden agruparse formando paquetes y subpaquetes, generalmente conteniendo clases de funcionalidades afines.
◼ Toda clase debería estar dentro de un paquete, el que se declara al inicio del archivo donde están las clases
Código Java
class HolaMundo {
public static void main(String [] args){
System.out.println(“Hola, mundo”);
}
}
Clase definidaModificadores
Tipo de dato devuelto
Nombre del método
Tipo de argumento (clase)
arregloNombre del argumento
ClasePropiedad (objeto) Método
Una String
Código Java
@Override
public void encryptData(String plaintext) {
System.out.println("-------Encrypting data using AES algorithm-------
");
try {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
byte[] plaintTextByteArray =plaintext.getBytes("UTF8");
Código Java
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherText = cipher.doFinal(plaintTextByteArray);
System.out.println("Original data: " + plaintext);
System.out.println("Encrypted data:");
for (int i = 0; i < cipherText.length; i++) {
System.out.print(cipherText[i] + " ");
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
Clases, referencia y objetos en Java
◼ Las clases se crean con la instrucción class
◼ Creada la clase Punto,
una declaración como esta:Punto estePunto;
crea una referencia a un objeto de tipo Punto, pero no crea el objeto en si mismo.
class Punto{
public double x,y;
public void clear(){
x = 0;
y = 0;
}
}
Clases, referencia y objetos en Java
◼ Para crear objetos se usa la instrucción newPunto supIzq = new Punto();
Punto infDer = new Punto();
luego en un método de otra clase podría hacer:supIzq.x = 0.0;
supDer.y = 0.0;
infDer.x = 1440.0;
infDer.y = 960.0;
debido a que los campos de Punto son públicos (lo cual no es común)
Invocación a un método
◼ Los métodos comunes operan sobre el objeto:
supIzq.clear();
◼ Los métodos de clase (declarados static) operan
sobre la clase y no sobre un objeto en particular:
Math.sqrt(144);
(es lo mas aproximado a una función de C)
Invocación a un métodoclass Punto{
private double x,y;
public void clear(){
x = 0;
y = 0;
}
public double distancia(Punto otro){
double xdif,ydif;
xdif = this.x – otro.x;
ydif = this.y – otro.y;
return Math.sqrt(xdif*xdif+ydif*ydif);
}
}
En otro lugar podría hacer:double d = supIzq.distancia(infDer);
Extensión de clases (herencia)
◼ Al extender una clase (Java no admite mas de una), la clase hija hereda todas las propiedades (campos y métodos) de la clase padre (super clase)
class Pixel extends Punto {
private Color micolor;
public void clear(){
super.clear();
micolor=null;
}
}
Extensión de clases (herencia)
◼ Todas las clases que no extiende explícitamente una clase, extienden implícitamente la clase Object
◼ Una referencia del tipo de una clase puede referenciar objetos de cualquier clase heredada de aquella, sin limites en la jerarquía:
Punto punto = new Pixel();
punto.clear(); //invoca el método del
tipo real de objeto (pixel, en este caso)
Interfaces en Java
interfaz lookup {
Object find(String nombre);
//… mas métodos declarados aquí
}
class baja extends alta implements lookup {
//en esta clase deberá implementar un método
find adecuado para objetos tipo “baja”
}
Interfaces en Java
◼ La interfaces se pueden extender (y en este caso en forma múltiple)
◼ Las clases pueden implementar muchas interfaces.
◼ La interfaces puede definir constantes (son campos static y final)
Mas sobre la herencia en Java
◼ Modificadores de acceso: public, private, protected o package
◼ Constructores: al crear un objeto con new se invoca
un constructor, encargado de inicializar el objeto
◼ Si:
Punto p = new Punto (100,100);
en la clase debe estar implementado un constructor que tome dos argumentos
Mas sobre la herencia en Java
◼ Los constructores de las subclases deben invocar en la primer línea a un constructor de la superclase con la instrucción super (super tambien sirve para invocar
métodos de la superclase)
◼ Si en una subclase se define un método con el mismo nombre y numero y tipo de argumentos de un método de la superclase, se dice que este “oculta” al de la superclase
◼ Un método marcado como final no podrá ocultarse
Arreglos en Java
◼ Java soporta arreglos en formas similares a otros lenguajes, con los índices comenzando en cero:
◼ Int [] ia = new int[3]; // crea arreglo de 3 enteros
◼ Carta [] cartas=new Carta[52]; //crea un arreglo de 52 cartas
◼ En esto ejemplos ia y cartas son referencias. De hecho, en el segundo caso se crean 52 referencias pero ninguna Carta. Faltaría hacer cartas[i]= new Carta() con i variando de 0 a 51 para crear los objetos (usando un for, por
ejemplo)
Cadenas en Java
◼ Están implementadas mediante la clase String
String nombre=“Jacinto”;
◼ La clase String proporciona métodos adecuados
para manipular los objetos de tipo String como length, equals, replace, etc.
Manejo de excepciones en Java
◼ Las excepciones con objetos en Java, se crean extendiendo la clase Exception y son “verificadas” y lanzadas con la instrucción throw
if(atributo==null)
throw new NoSuchAttributeException(attr,this);
◼ Las situaciones imprevistas que producen excepciones (errores en el flujo del programa) se manejan con las instrucciones try – catch - finnally
Manejo de excepciones en Java
public class ExcDemo {
public static void main(String[] args) {
int nums[]=new int[4];
try {
System.out.println("Antes de que se genere la excepción.");
//generar una excepción de índice fuera de límites
nums[7]=10;
}
catch (ArrayIndexOutOfBoundsException exc){
//Capturando la excepción
System.out.println("Índice fuera de los límites!");
}
System.out.println("Después de que se genere la excepción.");
}
}
Paquetes en Java
◼ Los paquetes contienen clases, interfaces y subpaquetesrelacionados
◼ Los archivos fuentes de estas clases e interfaces deben comenzar con:
package nombre_del_paquete
◼ Si un programador quiere utilizar los elementos del un paquete debe importarlo antes de que se usen en el código un elemento del paquete:
import nombre_del_paquete.* //importa todo el paquete
Paquetes en Java
◼ Como los nombre de los paquetes suelen ser sencillos, una convención para obtener nombre únicos se basa en invertir el nombre de internet de la empresa, anteponiéndolo al nombre del paquete “corto”:
package COM.mi_empresa.mi_paquete;
◼ Las clases e interfaces de un paquete tiene dos accesos public o
package
◼ El paquete java.io contiene todas las clases que brindan
funcionalidad de entrada/salida
◼ java.util contiene utilidades de diferente tipo
◼ Aquí puede consultar toda la jerarquía de paquetes Java:
◼ https://docs.oracle.com/javase/7/docs/api/overview-summary.html