View
214
Download
0
Category
Preview:
DESCRIPTION
smalltalk
Citation preview
Programación Orientada a Objetos Conceptos teóricos
1
Profesor: David Contreras Bárcena
Programación Orientada a Objetos
David Contreras Bárcena - ICAI
2
Contenido del Curso (I)
1.- Introducción a la Tecnología Orientada a
Objetos
– 1.1.- Historia
– 1.2.- Lenguajes
– 1.3.- Impacto en la Ingeniería del Software
– 1.4.- Conclusión
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
3
Contenido del Curso (II)
2.- Programación Orientada a Objetos
– 2.1.- ¿Qué es la POO?
• 2.1.1.- Origen
• 2.1.2.- Introducción
• 2.1.3.- Conceptos Fundamentales
– Objetos, métodos, mensajes y clases
– 2.2.- Paradigmas de la POO
• 2.2.1.- Abstracción de Datos
• 2.2.2.- Encapsulamiento
• 2.2.3.- Ocultamiento
• 2.2.4.- Herencia
• 2.2.5.- Polimorfismo
David Contreras Bárcena - ICAI
4
Contenido del Curso (y III)
– 2.3.- Reusabilidad
– 2.4.- Ejemplos
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
5
Capítulo 1
Introducción a la Tecnología
Orientada a Objetos
Simula-67 C ++
SmallTalk 80
David Contreras Bárcena - ICAI
6
Coche
Motor
Carrocería
Ruedas Dirección
1.1- Historia
Nace en los años 60 aplicado a simulaciones de
sistemas físicos.
Diseño del programa paralelamente al sistema
físico.
Reduce la complejidad de las modificaciones:
N componentes N módulos
Neumáticos
Llantas
modificación sistema modificación en el modelo
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
7
1.1- Historia (cont.)
Ventajas de estos modelos
– Forma natural de afrontar un programa muy complejo:
• Algo obvio si se parte de la correspondencia entre el sistema y
el modelo
– Mantenimiento pasaba a ser controlable:
• Cambio de componentes sin necesidad de variar el resto del
modelo si no se varía el interfaz (parte visible del objeto).
• Simplifica las distintas variaciones sobre el modelo original.
REUSABILIDAD
David Contreras Bárcena - ICAI
8
1.2- Lenguajes
Estas ideas se implementaron mediante SIMULA 67.
En 1970 surge Smalltalk como entorno de programación.
En 1980 aparece un híbrido entre C y SmallTalk : C++.
En 1990 nace OAK, posteriormente se llamará *7. Actualmente se le conoce como JAVA (También influenciado por SmallTalk /V).
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
9
1.2- Lenguajes (cont.)
Hoy en día todos los lenguajes de programación
tienen su versión orientada a objeto:
– Cobol
– Fortran
– CLOS (Lisp OO)
– C++
David Contreras Bárcena - ICAI
10
1.2- Lenguajes (cont.)
SmallTalk /V CLOS Object Pascal Objetive-C Eiffel
SmallTalk 80
SmallTalk 70
Simula-67 Sketchpad LISP
C
C ++
PASCAL
Algol FORTRAN
Modula-2 Ada
60
70
80
Java .NET
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
11
1.3- Impacto en la Ingeniería del
Software
Los principales autores de metodologías
estructuradas se han pasado a la orientación a
objetos (Yourdon, Mellor, Martin,..).
En el entorno de las bases de datos se está
desarrollando el estándar SQL orientado a objetos:
SQL-3.
En los sistemas operativos: NeXTstep, Windows
2000, Pink y FOOIS (Freedows).
David Contreras Bárcena - ICAI
12
1.3- Características del Software
La complejidad es una característica intrínseca al software.
Sujeto a cambios.
Soluciones para minimizar la complejidad.
– Lenguaje de alto nivel.
– Entornos de programación.
– Lenguajes de 4º Generación (4GL).
– Programación Orientada a Objeto (POO).
– Programación Visual.
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
13
1.3- Complejidad del Software
L. Alto Nivel 4GL POO ....
COMPLEJIDAD
PROGRESO
Grado de
complejidad
David Contreras Bárcena - ICAI
14
1.4 - Conclusión
El software cada vez es más voluminoso y
complejo.
El mantenimiento representa más del 70% del
coste del software, correspondiendo el 40% a
modificaciones producidas por nuevas
especificaciones del usuario.
Gracias a ciertos mecanismos la OO ofrece una
alta reusablidad del código que genera.
Los lenguajes más importantes en la actualidad
emplean esta tecnología.
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
15
Capítulo 2
Programación Orientada a Objetos
David Contreras Bárcena - ICAI
16
2.1.1 - Origen
Antecedentes:
– Tipos abstractos de datos (encapsulamiento,
ocultamiento, abstracción).
– Inteligencia artificial (herencia).
Primer lenguaje:
– Simula 67, construido para simulación de sistemas de
telefonía.
– Smalltalk (1980), materializa conceptos como la
herencia.
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
17
2.1.2 - Introducción
Todo se agrupa como objetos.
Simplificación de la realidad reflejando todo lo
que nos interesa de ella en forma de objetos.
Grado de abstracción del modelo vendrá definido
por el analista del sistema.
Objetivo: productos software de calidad.
David Contreras Bárcena - ICAI
18
2.1.3 - ¿Qué es un objeto?
Cualquier ente real o abstracto.
Identidad única.
Nos interesa su estado y comportamiento.
“un objeto es cualquier cosa real o abstracta del
cual nos interesa su comportamiento y tiene una
identidad única que le distingue de los demás”
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
19
2.1.3 - Ejemplo de objeto
“un objeto es cualquier cosa real o abstracta del
cual nos interesa su comportamiento y tiene una
identidad única que le distingue de los demás”
David Contreras Bárcena - ICAI
20
2.1.3 - Análisis de un problema
IDENTIFICACIÓN Y
ESTUDIO DEL
PROBLEMA GRADO DE
ABSTRACCIÓN
INFORMACIÓN QUE
REVELE SU ESTADO
Y COMPORTAMIENTO
IDENTIFICACIÓN DE
LOS OBJETOS GRADO DE
ABSTRACCIÓN
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
21
2.1.3 – Atributos y métodos de un objeto
OBJETO
Atributos Métodos
Son acciones que van a
manipular los datos. Los
denominaremos métodos.
Van a ser los únicos que
tengan acceso a los datos.
Información que posee cada
objeto que le identifica y
diferencia del resto de objetos
del mismo tipo. A estos datos
sólo se puede acceder haciendo
referencia al propio objeto.
Datos - Variables Miembro Operaciones - Funciones Miembro
David Contreras Bárcena - ICAI
22
2.1.3 - Caso práctico de un objeto
reloj
Atributos Métodos getHora
getDía
incrementarHora
incrementarDía
limpiarPantalla
traducirFrecuencia
...
hora (horas, min, seg)
día (dia, mes, año)
modelo
numSerie
Botón para mostrar la Hora
Botón para mostrar el Día
Modelo Físico
Modelo Informático
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
23
2.1.3 - Estructura de un objeto
OBJETO Métodos u
Operaciones Atributos o
Datos
atributoUno
atributoDos
….
atributoN métodoUno ...
métodoN
métodoDos Estructura
encapsulada de
los datos.
Operaciones
permitidas.
Pueden estar o no
ocultas para el
usuario.
Lo que realmente nos interesa de un objeto es su estado, que viene dada por
su información.
David Contreras Bárcena - ICAI
24
2.1.3 - Estructura de un objeto
reloj
hora
día
numSerie
modelo
getDía
incrementarHora:
getHora
incrementarDía:
limpiarPantalla traducirFrecuencia
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
25
2.1.3 - Métodos
La única manera de acceder a los datos del objeto
es a través de métodos.
Son un conjunto de instrucciones, como una rutina,
al cual se le pueden pasar también argumentos y/o
devolver un resultado.
No debe hacer referencia a los datos de otro objeto.
Cada método manipulará los atributos del objeto
donde se ejecute.
Tiene carácter local, no global. Cualquier variable
creada en él dejará de existir al finalizar dicho
método.
David Contreras Bárcena - ICAI
26
2.1.3 - Métodos
En la definición de métodos, se seguirá la
siguiente nomenclatura:
– getNombreAtributo(): Método que devuelve el valor del
atributo.
– setNombreAtributo(valor): Asigna un valor al atributo.
– isNombreAtributo(): Devuelve un valor booleano.
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
27
2.1.3 - Formato de los Mensajes
OBJETO MÉTODO (ARGUMENTO)
Objeto
Mensaje
Los métodos pueden recibir argumentos o no, dependiendo de su naturaleza
La nomenclatura puede variar dependiendo del lenguaje que utilicemos
SmallTalk /V Java C ++
objeto metodo: argumento objeto.metodo (argumento) objeto.metodo (argumento)
David Contreras Bárcena - ICAI
28
int getDía()
{
return día;
}
void incrementarDía(n)
{
día = día + n;
}
2.1.3 - Métodos
reloj
hora
día
numSerie
modelo
getDía()
incrementarHora()
getHora()
incrementarDía()
limpiarPantalla() traducirFrecuencia()
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
29
2.1.3 - Mensajes
Las solicitudes que invocan los métodos se
denominan mensajes.
Un mensaje va dirigido para realizar una
operación concreta sobre un objeto determinado.
Son el único modo de referirse a un objeto.
Objeto
Destino Mensajes
Dame tu nombre
Toma mi nombre
Objeto
Origen
David Contreras Bárcena - ICAI
30
2.1.3 - Mensajes
Los mensajes que nosotros mandemos al reloj,
llevados a la vida real, serán apretar cada uno de
los botones.
Estoy realizando una operación concreta (mostrar
la hora) sobre un objeto determinado.
Botón para mostrar la Hora
Botón para mostrar el Día
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
31
2.1.3 - Ejemplo Mensajes
Objeto Métodos
coche incrementarGasolina
getNivelAceite
activarAlarma
Argumentos
litros
Mensajes
coche.incrementarGasolina(litros)
coche.getNivelAceite()
coche.activarAlarma()
David Contreras Bárcena - ICAI
32
2.1.3 - Aspecto de los Objetos
I
N
T
E
R
F
A
Z
variableUno . . . . . .
variableX
metodoUno
metodoDos
metodoTres
metodoN
Objeto
Aspecto
INTERNO
Aspecto
EXTERNO
(interfaz)
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
33
2.1.3 - Interfaz
Es la parte del objeto visible o accesible para el
resto los objetos.
También se considera el protocolo para
comunicarnos con el objeto.
Puede estar formado por un método o un conjunto
de ellos.
hora
día Objeto
Origen
I
N
T
E
R
F
A
Z
variableUno . . . . . .
variableX
metodoUno
metodoDos
metodoTres
metodoN
Objeto Destino
Mensaje
David Contreras Bárcena - ICAI
34
2.1.3 - Interfaz
Objeto hora
día
numSerie
modelo
limpiarPantalla getHora
getDia incrementarHora
reloj
mensaje traducirFrecuencia
incrementarDía
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
35
2.1.3 - Ejemplo Modelo
Modelo real
Definimos cuales son los elementos que formarán parte de nuestro modelo
12:00
2:25
1:25
8:00
22:01
David Contreras Bárcena - ICAI
36
2.1.3 - Ejemplo Modelo
Modelo informático
hora
día
numSerie
modelo
mostrarD
ía incrementar
Hora:
mostrarH
ora incrementar
Día:
limpiarPant
alla
traducirFrec
uencia
hora
día
numSerie
modelo
mostrarD
ía incrementar
Hora:
mostrarH
ora incrementar
Día:
limpiarPant
alla
traducirFrec
uencia
hora
día
numSerie
modelo
mostrarD
ía incrementar
Hora:
mostrarH
ora incrementar
Día:
limpiarPant
alla
traducirFrec
uencia
hora
día
numSerie
modelo
mostrarD
ía incrementar
Hora:
mostrarH
ora incrementar
Día:
limpiarPant
alla
traducirFrec
uencia
hora
día
numSerie
modelo
mostrarD
ía incrementar
Hora:
mostrarH
ora incrementar
Día:
limpiarPant
alla
traducirFrec
uencia
Trasladamos elementos de nuestro modelo real a nuestro modelo
informático en forma de objetos
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
37
2.1.3 - Ejemplo Modelo
12:25
1/12/95
546464
34-21
hora
día
numSerie
modelo
mostrarDía
incrementarHora:
mostrarHora
incrementarDía:
limpiarPantalla
traducirFrecuencia
2:25
1/12/92
12346
34-22
1:25
1/1/99
11164
12-21
4:12
4/1/95
54643
34-31
Por lo que creamos un elemento de jerarquía superior a los objetos, la cual contenga la definición de los datos y de los métodos que posean. En realidad el proceso es inverso, a partir de las clases obtenemos los
objetos
Modelo informático
David Contreras Bárcena - ICAI
38
2.1.3 - Clases
Se puede considerar...
– ...”una agrupación de objetos”
– ...una plantilla para un conjunto de objetos estructural y
funcionalmente idénticos
– ...un mecanismo para crear objetos
La creación de objetos se denomina “instanciación”
Cualquier objeto que se instancie de una clase
creará una copia de la definición de datos de la
clase y dispondrá de los métodos definidos en ella
Didáctico. Lo primero
que existe es la
clase y no el objeto
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
39
2.1.3 - Clases
Una clase se puede ver como un molde de un flan
y los objetos, los flanes creados a partir de éste.
Tipos de clases:
– Clases simples.
– Clases abstractas.
– Clases abstractas pura.
David Contreras Bárcena - ICAI
40
2.1.3 - Creación de un objeto
Objeto
Mensaje de creación
de objeto
hora
día
numSerie
modelo
mostrarDía
incrementarHora
mostrarHora
incrementarDía
limpiarPantalla
traducirFrecuencia
hora
día
numSerie
modelo
Objeto,
Instancia u
Ocurrencia de la Clase
CLASE
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
41
2.1.3 - Clases (atributos y métodos)
Toda la información específica de cada objeto se identifica
como atributos de instancia, y los métodos que interactúan
directamente con éstos, métodos de instancia.
La información general a todos los objetos, en lugar de ser
definida para cada objeto y repetirse, se define a nivel de
clase.
Esta información se la denomina como atributos de clase.
Éstos pueden ser manipulados desde los métodos de clase
y también desde los de instancia.
Esto último es posible ya que toda la información de la
clase, también es propia de cada objeto.
David Contreras Bárcena - ICAI
42
2.1.3 - Clases (atributos y métodos)
ocurrencia
Atributos Métodos
getHora
getDía
incrementarHora
incrementarDía
limpiarPantalla
traducirFrecuencia
hora (horas, min, seg)
día (dia, mes, año)
modelo
numSerie
clase
Atributos Métodos
getMarca marca
Todos los objetos que se creen utilizando esta clase serán de la misma marca
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
43
2.1.3 - Clases (atributos y métodos)
hora
día
numSerie
modelo
incrementarHora:
Métodos de Clase
Métodos de Ocurrencia
getDía
getHora
incrementarDía:
limpiarPantalla
traducirFrecuencia
marca
--
hora
día
numSerie
modelo
getMarca
Los métodos de los objetos podrán acceder a sus datos y a los datos de su
clase. Los métodos de la clase sólo podrán acceder a a sus datos
Los datos y métodos pueden
ser de clase o de instancia
(de objetos)
David Contreras Bárcena - ICAI
44
2.1.3 - Clases (atributos y métodos) Representación gráfica de atributos y métodos, de instancia y clase
marca
getMarca
hora
día
numSerie
modelo
CLASE
hora
día
numSerie
modelo
hora
día
numSerie
modelo
Instancia A Instancia B Instancia C
mostrarDí
a incrementarHo
ra:
mostrarHora
incrementarDí
a:
limpiarPantalla traducirFrecuen
cia
mostrarDí
a incrementarHo
ra:
mostrarHora
incrementarDí
a:
limpiarPantalla traducirFrecuen
cia
mostrarDí
a incrementarHo
ra:
mostrarHora
incrementarDí
a:
limpiarPantalla traducirFrecuen
cia
Si un método de clase desea acceder
directamente a un atributo de una
instancia, no sabrá de que ocurrencia
tomarlo. Por lo tanto no se podrá realizar
nunca esta acción.
La única posibilidad que tendrá de realizar
esa consulta será haciéndole una petición
formal a través de un mensaje. Es decir,
comportándose como cualquier otro
objeto.
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
45
2.1.3 - Clases (atributos y métodos)
- Clase Reloj, únicamente con atributos de instancia -
class Reloj
{
//atributos
String modelo;
String hora; //Tomamos un tipo String para simplificar
String dia; //idem
int numSerie;
//métodos
String getDia()
{
return numSerie;
}
void traducirFrecuencia()
{
....
}
//resto de métodos
}
NOTA: Para más información acerca de la estructura de una clase (pág. 64), definición de
tipos (pág. 43), etc., consultar el manual de Java.
David Contreras Bárcena - ICAI
46
2.1.3 - Clases (atributos y métodos)
- Clase Reloj, con atributos de clase-
class Reloj
{
//atributos
static String MARCA; //atributo de clase
String modelo;
String hora; //Tomamos un tipo String para simplificar
String dia; //idem
int numSerie;
//métodos
static String getMARCA() //método de clase
{
return MARCA;
}
String getDia()
{
return numSerie;
}
void traducirFrecuencia()
{
....
}
//resto de métodos
}
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
47
2.1.3 - Constructor
Objeto Mensaje de creación de
objeto
hora
día
numSerie
modelo
mostrar
Día increment
arHora:
mostrar
Hora incrementa
rDía:
limpiarPan
talla
traducirFre
cuencia
hora día
numSerie modelo
Objeto, Instancia u
Ocurrencia de la Clase
Método que permite la
creación e inicializa-
ción de los objetos.
Pueden definirse desde
ninguno a varios constructores.
Dependiendo del lenguaje, podrá ser un método
más de la clase o un método específico de
instancia (mismo nombre que la clase).
SmallTalk: Clase new - Clase new : argumentos
Java: new Clase() - new Clase(argumentos)
David Contreras Bárcena - ICAI
48
2.1.3 - Constructor
La creación de objetos se realiza mediante la
invocación del operador new invocando al
constructor .
El constructor por defecto, aquel que no
inicializa ningún atributo, está disponible
siempre para cada clase (no haría falta definir un
constructor para crear una instancia).
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
49
2.1.3 - Destructor
Método opuesto al constructor que especifica las
operaciones a realizar tras la eliminación de un
objeto.
Muy específico del lenguaje de programación.
David Contreras Bárcena - ICAI
50
2.1.3 - Constructor
Objeto new Reloj()
hora
día
numSerie
modelo
mostrarDía
incrementarHora:
mostrarHora
incrementarDía:
limpiarPantalla
traducirFrecuencia
hora día
numSerie modelo
Ocurrencia unReloj
Clase Reloj
Reloj unReloj;
unReloj = new Reloj()
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
51
2.1.3 - Constructor
class Reloj
{
//atributos
static String MARCA; //atributo de clase
String modelo;
String hora; //Tomamos un tipo String para simplificar
String dia; //idem
int numSerie;
//constructor
Reloj(_mod, _num)
{
modelo=_mod;
numSerie=_num;
}
//métodos
static String getMARCA() //método de clase
{
return MARCA;
}
NOTA: Para más información acerca de constructores consultar el manual de Java.
(pág 65)
David Contreras Bárcena - ICAI
52
2.1.3 - ¿Cuándo utilizar los constructores
y los métodos? Se utiliza constructor para inicializar atributos con
valores por defecto, que puedan variar o no en la vida del objeto, siempre que deban contener valor desde el mismo momento de la creación del objeto. (P.e. Lugar de nacimiento en el caso de una persona)
Se utilizarán métodos para leer aquellos atributos que pueda requerir cualquier objeto (interfaz) o el propio objeto o para asignar valor a atributos que puedan ser nulos en el momento de creación. (P.e.
Número del DNI en el caso de una persona)
Se utilizarán métodos para actualizar los atributos que puedan variar en la vida del objeto.
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
53
2.1.3 - Práctica
Se desea informatizar una biblioteca, más
concretamente la información que tiene el
bibliotecario sobre cada libro.
Nos interesa de cada libro nº hojas, título, autor,
categoría.
También veces que se ha pedido el libro.
Se pide desarrollar el modelo OO.
Recuerda que en un modelo sólo existen clases (con datos y métodos de instancia y clase). Es obvio que de las clases
obtendremos los objetos.
David Contreras Bárcena - ICAI
54
2.1.3 - Práctica
Se omiten los métodos de mostrar información sobre los datos
Clase Libros
título
autor
páginas
peticiones
realizarPetición
Programación Orientada a Objetos Conceptos teóricos
David Contreras Bárcena - ICAI
55
2.1.3 - Práctica
Práctica - Mensajes
Libros unLibro;
unLibro = new Libros();
unLibro.realizarPetición();
Con los métodos definidos, podría invocar estos métodos :
título
autor
páginas
peticiones
Clase Libros
realizarPetición
David Contreras Bárcena - ICAI
56
Resumen
El objeto es una unidad atómica formada por la
unión de un estado y de un comportamiento.
El objeto revela su verdadero papel y su verdadera
responsabilidad cuando, por medio de envío de
mensajes, se inserta en un escenario determinado.
En el diseño se debe buscar una alta cohesión y un
bajo acoplamiento.
OBJETO = ESTADO + COMPORTAMIENTO + IDENTIDAD
Recommended