Download Conferencia #1 PPT Archivo
Document related concepts
no text concepts found
Transcript
DPOO Diseño y Programación Orientada a Objetos Conferencia # 1 Conceptos básicos Facultad Ing. Informática ISPJAE Introducción al curso • 80 horas (Impar: C+CP+L, Par: C+CP) • Temas: – Conceptos básicos de POO – Tipos de datos abstractos – Herencia y polimorfismo – Plantillas y excepciones – Temas avanzados • Sistema de Evaluación: – 2 Pruebas Parciales. Semanas 6 y 12 – Evaluación Final: Trabajo de Curso. – Evaluaciones frecuentes Contenidos • Paradigma de la POO • Conceptos básicos: – Objeto – Clase – Mensajes • Propiedades de la POO • Encapsulamiento • Implementación en Java • Distribución de datos en memoria ¿Cómo surge la POO? Estructurado struct Obra{……}; a a UnitObra.h a b c Lenguajes OO: Simula67 Smalltalk (OO puro) float gastoSalario(Obra); UnitObra.cpp float gastoSalario(Obra o) { ..o.cantTrabajadores… }… Interfaces gráficas Paradigma de la POO • Resultado de la evolución natural de la programación. • Metodología de programación de propósito general que simula la forma en que el hombre trabaja: percepción del mundo como una variedad de objetos interactuando entre sí. Paradigma de la POO Atributos: hora, minutos segundos Acciones: cambiar hora poner alarma Atributos: consumo color Acciones: encender apagar Atributos: consumo cambiar canal Acciones: encender cambiar volumen apagar Envío de flores emisor persona petición Desconoce detalles del procedimiento de envío receptor florista Procede para satisfacer la petición. Puede servirse de otros. Envío de flores Características y comcomerciante portamientos comunes receptor emisor petición florista persona petición perro petición asistente receptor/emisor Respuestas distintas POO “Método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son, todas ellas, miembros de una jerarquía de clases unidas mediante relaciones de herencia.” Grady Booch Conceptos básicos Objeto Clase Mensaje Objeto Entidad con una estructura de datos interna bien definida, y un conjunto de acciones que describen su comportamiento. Unidad básica de la POO. Objeto Miembros + de Datos • Atributos pasivos • Estado • Campos • Características • Var. miembro Funciones miembros • Atributos activos • Comportamiento • Métodos • Responsabilidades • Operaciones Clase Categoría de objetos con características y comportamientos comunes. Persona Florista Persona Comerciante Juan: ejemplar de persona Ana: ejemplar de florista Clase: Tipo de dato Objeto: Variable Comerciante Florista Generalización/ especialización Atributos de una clase Miembros de datos Funciones miembros Tipos Florista nombre salario edad vender() enviarFlores() Funciones Constructores Destructores Estereotipo UML Atributos de una clase Miembros de datos Funciones miembros Obra nombre, codigo tipo cantMateriales materialesUsados cantTrabajadores trabajadores gastoSalario() mayorSalario() Mensajes Petición que se hace a un objeto. Cliente Emisor Mensaje Objeto Usuario Aplicación Servidor Receptor Objeto Todos los objetos de una clase tienen igual funcionalidad, o sea responden de la misma manera a los mismos mensajes. Propiedades de la POO • Encapsulamiento • Herencia Persona Comerciante Florista nombre, salario, edad vender() enviarFlores() …. Comerciante vender() Peletero Florista • Polimorfismo Peletero vender() Florista vender() Encapsulamiento Fuente: Análisis y Diseño Orientado a Objetos. Grady Booch Encapsulamiento • • • • Ventajas Ocultar detalles de implementación. Simplificar el programa. Minimizar el impacto del cambio. Garantizar integridad de los datos. Implementación en Java • Sintaxis de la declaración de clase: público (public)/por defecto [visibilidad] class <identificador> { <miembros>; } datos funciones Declaración de miembros • Variables miembros (datos): [visibilidad][durabilidad]<tipo><ident.>; • Funciones miembros: [visibilidad][durabilidad]<tipo> <ident.>([<lista parámetros>]){ <cuerpo del método> } Visibilidad de atributos • • • • Público: public Privado: private Protegido: protected De acceso por defecto Durabilidad • • • • static: Estático final Se estudian transient más adelante volatile Ejemplo de clase public class Clock { int hours; int minutes; int seconds; void setHours(int hours){…} int getHours(){…} void setMinutes(int minutes){…} void getMinutes(){…} String standardTime(){..} String militaryTime(){..} … } Declaración de instancias • Sintaxis: [package path]<ident. clase> <ident. instancia>; Ejemplo: Clock myClock; Construcción de instancias myClock= new Clock(); Para usar un objeto primero hay que construirlo. En la próxima conferencia se amplia el tema de construcción y destrucción de objetos. Paso de mensajes Sintaxis: <objeto receptor>.<func. miembro()>; Ejemplos: String time= myClock.standardTime(); Visibilidad de atributos Clase private accesibilidad default public Paquete de la clase accesibilidad accesibilidad Otros paquetes Visibilidad de atributos ¿Cómo debe ser? public Campos Funciones miembros • private default Ejemplo public class Clock { private int hours; private int minutes; private int seconds; public void setHours(int pHours){…} public int getHours(){…} getHours(){return hours;} public void setMinutes(int pMinutes){…} public int getMinutes(){…} public String standardTime(){..} public String militaryTime(){..} } Distribución de datos Filosofía de Java Memoria Stack Heap (pila) (dinámica) variables locales y parámetros todos los objetos Distribución de datos … Clock myClock; myClock = new Clock(); … myClock.setHours(12); Stack myClock null hours 12 Heap 12 hours minutes seconds public class Panel { public void m1(){ int v1= 1; Clock c1; //pto 1 c1= new Clock(); //pto 2 c1.setHours(10); //pto 3 m2(v1,c1); //pto 4 v1= 8; //pto 7 } public void m2(int v2, Clock c2){ int v3= 4; Clock c3, c4; //pto 5 c3= new Clock(); c3.setHours(c2.getHours()); c4 = c3; v2= 7; //pto 6 } } Ejemplo Distribución de datos Stack Heap m1: v1 1 c1 null Clock c1; //pto 1 Distribución de datos Stack m1: v1 c1 Heap 1 0 hours 0 minutes 0 seconds c1= new Clock(); //pto 2 Distribución de datos Stack m1: v1 c1 Heap 1 10 hours 0 minutes 0 seconds c1.setHours(10); //pto 3 Distribución de datos Stack m1: v1 1 c1 c2 1 m2: v2 Heap 10 hours 0 minutes 0 seconds m2(v1,c1); //pto 4 public void m2(int v2, Clock c2) Distribución de datos Stack m1: v1 1 c1 c2 1 m2: v2 4 v3 c3 null c4 null Heap 10 hours minutes 0 seconds 0 int v3= 4; Clock c3, c4; //pto 5 Stack m1: v1 8 1 c1 c2 m2: v2 1 7 v3 4 c3 c4 null Heap 10 hours 0 minutes 0 seconds 10 0 hours 0 minutes 0 seconds m2:c3= new Clock(); c3.setHours(c2.getHours()); c4= c3; v2= 7; //pto 6 m1: v1= 8; //pto 7 Conclusiones • POO busca minimizar el impacto del cambio al concebir los objetos como módulos o cápsulas que encierran datos y operaciones sobre esos datos. • Clase: patrón descriptivo a partir del cual se pueden reproducir objetos, cuyas características se encuentran bien definidas a través de sus atributos miembros. Conclusiones • La comunicación entre objetos se realiza a través de mensajes. • Los atributos públicos pueden ser accedidos desde cualquier clase. • Los atributos privados sólo pueden ser accedidos por las funciones miembros de la clase, o sea, que están reservados para el uso privado de la clase que los define. Conclusiones • Una buena práctica en el diseño OO es prohibir el acceso a los miembros de datos de una clase por otras clases. Estudio Independiente • Investigar las particularidades del uso de arreglos en Java. Estudiar documento Arreglos en Java. • Hacer los ejercicios para la clase práctica que aparecen al final del documento de la conferencia.