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.