El Modelo de Objetos - dsi.fceia.unr.edu.ar estado y comportamiento de un Objeto Todo objeto tiene...

51
Repaso Modelo de Objetos y el lenguaje Java

Transcript of El Modelo de Objetos - dsi.fceia.unr.edu.ar estado y comportamiento de un Objeto Todo objeto tiene...

Repaso Modelo de Objetosy el lenguaje Java

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)

Un programa Orientado a Objetos

Abstracciones(objetos)

Colaboraciones

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

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

Palabras clave de Java

Tipos de datos en Java

Tipos de datos en Java

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