repaso de javamaterias.fi.uba.ar/7562/2008/repaso-java.pdf · 2008. 8. 26. · es una solución al...

28
Facultad de Ingeniería Universidad de Buenos Aires 75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2008 Repaso de Java

Upload: others

Post on 17-Mar-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

Facultad de IngenieríaUniversidad de Buenos Aires

75-62 Técnicas de Programación Concurrentes II

Lic. Ing. Osvaldo Clúa

2008

Repaso de Java

Page 2: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 2

Orientación a Objetos● Hay Orientación a Objetos cuando hay:

– Tipos Abstractos de Datos (TAD).– Herencia.– Polimorfismo.

● Se llaman Basados en Objetos los lenguajes que solo soportan los TAD.

● Los TAD se llaman Clases.● Las Instancias de las Clases se llaman Objetos.● Las operaciones se llaman Métodos.

Page 3: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 3

Invariantes de Representación

• El comportamiento de un TAD es independiente de su representación (Invariante de representación).

● Su desarrollo histórico abarca:– Built-in types (integer, boolean ...) El compilador

controla las operaciones que se pueden hacer sobre ellos.

– User defined types (Wirth). Permiten al programador definir tipos en función de tipos ya existentes.

– Abstract Data Types. Juntan la definición del tipo con sus operaciones en una misma construcción del lenguaje.

Page 4: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 4

Función de Abstracción

● El conjunto de valores que debe soportar un tipo de datos se conoce como valores abstractos.

● Sigue un desarrollo histórico paralelo al del invariante de representación. (Built-in, User defined, TAD).

● La función de abstracción relaciona los valores abstractos con los reales de TAD.

Page 5: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 5

Especificación de un TAD

● Invariante de Representación: Indica si un TAD está bien formado.– Permite un razonamiento modular acerca del TAD.– Conviene escribirlo, aunque sea informalmente. De los

contrario deben leerse todas las operaciones para entender un TAD.

● Función de abstracción: indica como un determinado valor del TAD se corresponde con un valor abstracto.– A veces el esfuerzo de escribirla no ayuda demasiado al

diseño.

Page 6: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 6

Relaciones entre las Clases

• Uso de un objeto de una clase (servidor) por parte de un objeto de otra clase (cliente).

• Composición (agregación) de clases para crear una nueva. (has_a).

• Generalización o especialización de las clases. (is_a).

• Ver por ejemplo el libro de Champeaux

Page 7: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 7

Relación de Uso● El diagrama de la Relación de Uso puede

tener una forma de:– Árbol.– Capas.– Ciclos.

● Conocer un diagrama de uso permite:– Hacer un análisis de Impacto de un cambio.– Identificar oportunidades de reuso de código.– Determinar un orden de construcción.

Page 8: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 8

Reuso

● Se pensó que la cohesión funcional permitiría el reuso. Sin embargo los módulos del modelo clásico no eran autocontenidos.

● La cohesión de un TAD u Objeto bien diseñado se conoce como Informacional.

● Si el TAD modela correctamente todos los aspectos de una entidad (real o abstracta) y oculta los detalles de su implementación, hace mas fácil su reuso.

Page 9: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 9

Casos de Reuso

● Puede haber Reuso del Diseño, Reuso de la Implementación o situaciones intermedias. – Design Patterns Los patrones son soluciones generales a

problemas recurrentes. Dan una guía para el desarrollo de las relaciones entre objetos.

– Architecture: describe la estructura de la estructura de una aplicación. Da una guía para el desarrollo global de la aplicación.

– Framework: Se reusa la lógica de control de un diseño. El desarrollador solo se ocupa de las operaciones específicas del producto a construir (hot spots).

– Component: se basa en desarrollar clases que luego se integren a una Arquitectura por medio de un Framework.

Page 10: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 10

Clases● La unidad de definición de datos y Comportamiento.

– Convención Java: se escriben con la primer letra en mayúsculas.

UML

Class Fraccion {private int numerador;private int denominador;public Fraccion (int num, int den){…}public int getNum(){…}public int getDen(){…}

}

Java

"+" public"#" protected"-" private"~" package Convenciones del Diagrama de Clases UML

Page 11: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 11

Atributos y métodos

Atributos, Variables de Instancia, Miembros de datos, campos.

Class Fraccion {private int numerador;private int denominador;public Fraccion (int num, int den){…}public int getNum(){…}public int getDen(){…}

}

Métodos, Miembros funcionales, Mensajes.

Page 12: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 12

Atributos

● Conservan el estado de un objeto.– Variables de instancia (cambian con cada objeto).– Variables de clase (tienen el mismo valor para

todos los objetos).– Convención Java: se escriben con la primer letra

en minúscula.– Constantes.

● Convención Java: se escriben todo en mayúscula.

Page 13: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 13

Atributos

• static– Es la forma de

indicar que se mantiene su valor para toda la clase.

• final– Es la forma de

indicar que es inmutable.

Public class Ejemplo{

private int variable_de_instancia; 

private static int variable_de_clase;

public static final int CONSTANTE=360;

. . .

}

Page 14: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 14

Métodos

● Son los que hacen las operaciones.– Construcción de un Objeto.– Mutación del estado de un objeto.– Producción de un Objeto a partir de otro.– Observación del estado de un objeto.

● Pueden ser de instancia o de clase.● Se invocan en el ambiente de un objeto o

de una clase.

Page 15: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 15

public class Fraccion{private int num;private int den;Fraccion (int n, int d){

num=n;den=d;}public int getNum(){return num;}public int getDen(){return den;}public void setNum(int n){

num=n;}public void setDen(int n){

den=n;}public boolean esMayor

(Fraccion f){..}public static Fraccion max

(Fraccion f1, Fraccion f2){..}

   private int static mcd (int u, int d){..}

   public void simplificar(){..}; }

Métodos

Constructor

Observador

Mutador

Productor

Page 16: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 16

Refinando la clase Fracción

● Función de Abstracción: – Números racionales.

● Invariante de representación– 1/2=2/4=3/6 etc. …

public class Fraccion{private int num;private int den;Fraccion (int n, int d){

num=n;den=d; simplificar()}public int getNum(){return num;}public int getDen(){return den;}public void setNum(int n){

num=n; simplificar();}public void setDen(int n){

den=n; simplificar();}public boolean esMayor

(Fraccion f){..}public static Fraccion max

(Fraccion f1, Fraccion f2){..}

   private int static mcd (int u, int d){..}

   private void simplificar(){..}; }

•Se oculta la representación.

•Se asegura la coherencia de la representación.

•¿Este método pertenece a ésta clase?

●¿Se puede pasar de punto flotante a fracción?

Page 17: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 17

Herencia

● Es una forma de obtener nuevas clases a partir de clases existentes.– Super Clase y Sub Clase.

● Una SubClase adquiere todos los métodos de la SuperClase (herencia).

● Puede cambiar alguno de los métodos heredados (especialización).

● Puede agregar nuevos campos o métodos (extensión).

Page 18: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 18

Herencia en UML

● UML es un lenguaje de modelado.– La herencia es una

característica de la Programación OO.

– UML no modela la herencia sino la relación que le da origen.

SubClase.

SuperClase.

Relación is_a (generalización).

Page 19: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 19

Herencia en Javapublic class Fraccion{

private int num;private int den;Fraccion (int n, int d){..} . . .}

public class FraccionOper extends Fraccion {

FraccionOper(){super();}

public FraccionOper mas(Fraccion f){. . .}

}

•SuperClase.

•La SubClase extiende a la SuperClase.

•Se llama al constructor de la SuperClase.

•Toda FraccionOper es una Fraccion.

Page 20: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 20

Uso de la Herencia en Javapublic class PruebaFraccionOp{

public statc void main (String args a[]) {Fraccion f1=new Fraccion (5,2);FraccionOper f2=new FraccionOper 

(7,8);FraccionOper f3=new 

FraccionOper(5,4);

FraccionOper f4=f2.mas(f3);

FraccionOper f5=f2.mas(f1);

FraccionOper f6=f1.mas(f2);}

}

Suma de dos FraccionOper.

Suma de una FraccionOper

con una Fracción.

Una Fracción NO PUEDE invocar al método mas.

Page 21: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 21

Clases Abstractas

● Se diseñan únicamente para ser SuperClases.● Pueden tener métodos enunciados y sin

programar (métodos abstractos).● Pueden tener variables de instancia y métodos

programados.● No pueden instanciarse (no existen objetos

derivados de clases abstractas).● Pueden usarse como parámetros.● Las SubClases deben programar los métodos

abstractos.

Page 22: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 22

Uso de Clases Abstractas public abstract class Ordenable{

public boolean esMayor(Ordenable a);public boolean esIgual(Ordenable a);

}

public class Fraccion extends Ordenable{...boolean esMayor(Ordenable a){. . . }oolean esIgual(Ordenable a){

  . . .}}

public class Util {...

static Ordenable max (Ordenable a, Ordenable b){

if ( a.esMayor(b) )return a;else return b;

}   . . .

Se obliga a programar estos métodos.Se pueden usar en algoritmos.

public abstract class Ordenable{boolean esMayor(Ordenable a);

boolean esIgual(Ordenable a);}

No es un productor!!

Fraccion f3= (Fraccion) Util.max (new Fraccion (3,4), new Fraccion (7,8))

Page 23: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 23

Uso de Clases Abstractas (Java)

Se obliga a programar estos métodos.Se pueden usar en algoritmos.

No es un productor!!

Fraccion f3= (Fraccion) Util.max (new Fraccion (3,4), new Fraccion (7,8))

public abstract class Ordenable{boolean esMayor(Ordenable a);boolean esIgual(Ordenable a);

}

public class Fraccion extends Ordenable{

...boolean esMayor(Ordenable a){. . . }oolean esIgual(Ordenable a){

  . . .}}

public class Util {...static Ordenable max 

(Ordenable a, Ordenable b){if ( a.esMayor(b) )

return a;else return b;

}   . . .

Page 24: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 24

Interface

● Es un contrato para programar ciertos métodos.● Las clases pueden implementar una o varias

interfaces.● No pueden tener métodos programados ni static.

– Aunque sí constantes.● Es una solución al problema de la falta herencia

múltiple en Java.

Page 25: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 25

Uso de las Interfaces (Java)public abstract class Ordenable{

public boolean esMayor(Ordenable a);public boolean esIgual(Ordenable a);

}

public class Fraccion implements Ordenable{...boolean esMayor(Ordenable a){. . . }oolean esIgual(Ordenable a){

. . .}}

public Interface Ordenable{boolean esMayor(Ordenable a);boolean esIgual(Ordenable a);

}

public class Util {...static Ordenable max

(Ordenable a, Ordenable b){if ( a.esMayor(b) )

return a;else return b;

} . . .

Se obliga a programar estos métodos.Se pueden usar en algoritmos.

No es un productor!!

Fraccion f3= (Fraccion) Util.max (new Fraccion (3,4), new Fraccion (7,8))

Page 26: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 26

¿Interfaces o Clases Abstractas?● Una interface:

– Define el borde de comunicación entre dos clases.– Se refiere a una abstracción que una entidad provee de sí

misma al exterior.● Las distintas clases que implementan una interface

comparten un protocolo.● Las clases abstractas:

– Permiten implementaciones parciales.– Permiten poner la funcionalidad en el nivel

correspondiente.● Se decide en el Design Workflow del USDP.

Page 27: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 27

Polimorfismo (Java)

class PoliA extends Poli{String uno(){

return “uno() de PoliA “;}}

Class Poli{String uno(){

return “uno() de Poli “;}

class PoliB extends Poli{String uno(){

return “uno() de PoliB “;}}

class Util{. . .static String uso (Poli p){

return p.uno();}}

. . .System.out.println(

Util.uso(new PoliA() );

¿Cuál es el usado?

Page 28: Repaso de Javamaterias.fi.uba.ar/7562/2008/Repaso-java.pdf · 2008. 8. 26. · Es una solución al problema de la falta herencia múltiple en Java. 75-08 Sistemas Operativos FIUBA

75-08 Sistemas Operativos Prof. Lic. Ing. Osvaldo ClúaFIUBA 2008 28

Polimorfismo

● Principio de sustitución de Liskov.– Una clase puede reemplazarse por sus SubClases sin

alterar su corrección.● La habilidad de objetos de diferente clase de

responder a métodos del mismo nombre de acuerdo a su clase.

● El programador no tiene porque conocer el tipo de objeto por anticipado.– Run-time binding.

● El Artículo original de Liskov.