3. INTRODUCCIÓN
¿Qué es una clase? ¿COCHE?
¿COCHE?
Para el filósofo…
Un artefacto de clasificación humana
Clasificamos según un comportamiento o
atributos comunes
Acordamos descripciones y nombres de clases
útiles
Creamos vocabulario; nos comunicamos;
¡pensamos!
Para el programador orientado a objetos…
Una construcción sintáctica con nombre que
describe un comportamiento y atributos comunes
Una estructura de datos que incluye datos y
funciones
4. ¿Qué es una Clase?
Una clase es una descripción de un grupo
de objetos con:
Propiedades en común (atributos)
Comportamiento similar (operaciones)
La misma forma de relacionarse con otros
objetos (relaciones)
Una semántica en común (significan lo mismo)
Una clase es una abstracción que:
Enfatiza las características relevantes
Suprime otras características (simplificación)
Un objeto es una instancia de una clase
5. Ejemplo de una Clase
Clase: Curso
Estado (Atributos)
Nombre
Ubicación
Días Ofrecidos
Horario de Inicio
Horario de Término
Comportamiento (Métodos)
Agregar un Alumno
Borrar un Alumno
Entregar un Listado del Curso
Determinar si está Completo
6. ¿Qué es un objeto?
Un objeto es una instancia de una clase
Los objetos se caracterizan por:
Identidad: Los objetos se distinguen unos de
otros
Comportamiento: Los objetos pueden realizar
tareas
Estado: Los objetos contienen información
7. ¿Qué es un Objeto?
Informalmente, un objeto representa una
entidad del mundo real
Entidades Físicas
(Ej.: Vehículo, Casa, Producto)
Entidades Conceptuales
(Ej.: Proceso Químico, Transacción Bancaria)
Entidades de Software
(Ej.: Lista Enlazada, Interfaz Gráfica)
8. Un objeto posee Estado
Lo que el objeto sabe
El estado de un objeto es una de las
posibles condiciones en que el objeto puede
existir
El estado normalmente cambia en el
transcurso del tiempo
El estado de un objeto es implementado por
un conjunto de propiedades (atributos),
además de las conexiones que puede tener
con otros objetos
9. Un objeto posee Comportamiento
Lo que el objeto puede hacer
El comportamiento de un objeto determina
cómo éste actúa y reacciona frente a las
peticiones de otros objetos
Es modelado por un conjunto de mensajes a
los que el objeto puede responder
(operaciones que puede realizar)
Se implementa mediante métodos
10. Un objeto posee Identidad
Cada objeto tiene una identidad única,
incluso si su estado es idéntico al de otro
objeto
11. Objetos y Clases
Una clase es una definición abstracta de un objeto
Define la estructura y el comportamiento compartidos
por los objetos
Sirve como modelo para la creación de objetos
Los objetos pueden ser agrupados en clases
12. Modificadores de Acceso
Permiten definir el nivel de acceso
(visibilidad) de los miembros (atributos o
métodos) de una clase
Publico: Cualquier clase puede “ver” los
miembros públicos de otra clase
Privado: Sólo la clase puede ver sus propios
miembros privados
Existen otros dos modificadores para
propósitos específicos (Paquete, Protegido)
13. Abstracción
La abstracción es ignorancia selectiva
Decidir qué es importante y qué no lo es
Concentrarse en lo importante y depender de
ello
Ignorar lo que no es importante y no depender
de ello
Usar encapsulación para forzar una abstracción
El objetivo de la abstracción es no perderse en vaguedades y crear
El objetivo de la abstracción es no perderse en vaguedades y crear
un nuevo nivel semántico en el que se pueda ser absolutamente preciso.
un nuevo nivel semántico en el que se pueda ser absolutamente preciso.
Edsger Dijkstra
Edsger Dijkstra
14. Uso de la encapsulación
Combinación de datos y métodos
Control de la visibilidad de acceso
¿Por qué se encapsula?
Datos de objetos
Uso de datos estáticos
Uso de métodos estáticos
15. Combinación de datos y
métodos
Combinación de datos y métodos en
una sola cápsula
La frontera de la cápsula crea un
espacio interior y otro exterior
Retirar( Retirar(
) )
saldo saldo
Ingresar( Ingresar(
) )
¿CuentaBancaria ? ¿CuentaBancaria ?
16. Control de la visibilidad de
acceso
Los métodos son públicos,
accesibles desde el exterior
Los datos son privados, accesibles
sólo desde el interior
Retirar( Retirar(
) )
saldo saldo
Ingresar( Ingresar(
) )
¿CuentaBancaria ? ¿CuentaBancaria ?
17. ¿Por qué se encapsula?
Porque permite el control
Retirar(
El objeto se usa sólo )
Ingresar(
con los métodos )
públicos saldo
12,56
Porque permite el cambio
El uso del objeto no Retirar(
varía si cambia el tipo )
de los datos privados Ingresar(
)
euros 12
céntimos
56
18. Datos de objetos
Los datos de objetos describen
información para objetos concretos
Por ejemplo, cada cuenta bancaria tiene
su propio saldo. Si dos cuentas tienen el
mismo saldo, será sólo una coincidencia
.
Retirar( Retirar(
) )
Ingresar( Ingresar(
) )
saldo 12,56 saldo
12,56
prop. prop.
“Juan" “Pedro"
19. Uso de datos estáticos
Los datos estáticos describen
información para todos los objetos de
una clase
Por ejemplo, supongamos que todas las
cuentas comparten el mismo interés. No
sería conveniente almacenar el interés
en todas las cuentas. ¿Por qué?
Retirar( Retirar(
) )
Ingresar( Ingresar(
) )
saldo 12,56 saldo
interés 7% 99,12
interés 7%
20. Uso de métodos estáticos
Los métodos estáticos acceden sólo a datos
estáticos
Un método estático se llama en la clase, no el
objeto
La clase cuenta Un objeto cuenta
Retirar(
Interés( )
)
Ingresar(
)
saldo
interés 7% 99,12
prop.
“Pedro"
Las clases contienen datos Los objetos contienen datos
y métodos estáticos y métodos de objetos
21. Definición de sistemas
orientados a objetos
Herencia
Jerarquías de clases
Herencia sencilla y múltiple
Polimorfismo
Clases base abstractas
Interfaces
22. Herencia
La herencia indica una relación “es un
tipo de"
La herencia es una relación entre clases
Las nuevas clases añaden
especialización a las existentes
Generalización Músico
Músico Clase base
Especialización Clase derivada ¿Es éste un buen
Violinista
Violinista ejemplo de
herencia ?
23. Jerarquías de clases
Las clases con relaciones de
herencia forman jerarquías de clases
toca Instrumento
Instrumento
Músico
Músico musical
musical
Músico de
Músico de toca Instrumento de
Instrumento de
cuerda
cuerda cuerda
cuerda
toca
???
??? Violinista
Violinista Violín
Violín ???
???
24. Herencia sencilla y múltiple
Herencia sencilla: derivadas de una clase
base
Herencia múltiple: derivadas de dos o más
clases base
Instrumento de
Instrumento de Instrumento
Instrumento Con teclas
Con teclas
cuerda
cuerda musical
musical
Instrumento de
Instrumento de
Violín
Violín cuerda
cuerda
Violín tiene una sola Instrumento de cuerda tiene
clase base directa dos clases base directas
25. Polimorfismo
El nombre del método reside en la
clase base
Los distintos cuerpos del método
residen en las clases derivadas
Músico de cuerda
Músico de cuerda Un método sin
Un método sin
cuerpo se llama
cuerpo se llama
AfinaTuInstrumento( ))
AfinaTuInstrumento( operación
operación
Guitarrista
Guitarrista Violinista
Violinista
AfinaTuInstrumento( ))
AfinaTuInstrumento( AfinaTuInstrumento( ))
AfinaTuInstrumento(
26. Clases base abstractas
Algunas clases existen sólo para ser clases
base
No tiene sentido crear instancias de estas
clases
Estas clases son abstractas
No se pueden crear instancias
No se pueden crear instancias
Músico de cuerda de clases abstractas
de clases abstractas
Músico de cuerda
{{ abstract }}
abstract
Se pueden crear instancias
Se pueden crear instancias
de clases concretas
de clases concretas
Guitarrista
Guitarrista Violinista
Violinista
« concrete »
« concrete » « concrete »
« concrete »
27. Interfaces
Las interfaces contienen sólo
operaciones, no implementación
Músico Nada más que operaciones.
Nada más que operaciones.
Músico
« interface » No se pueden crear instancias
No se pueden crear instancias
« interface »
de una interfaz.
de una interfaz.
Puede contener implementación.
Puede contener implementación.
Músico de cuerda
Músico de cuerda No se pueden crear instancias de
No se pueden crear instancias de
{{ abstract }}
abstract una interfaz.
una interfaz.
Implementa las operaciones heredadas.
Implementa las operaciones heredadas.
Violinista
Violinista Se pueden crear instancias de una clase
Se pueden crear instancias de una clase
« concrete »
« concrete » concreta.
concreta.
Notas del editor
La forma más sencilla de entender el concepto de clase es si la vemos como una agrupación de objetos con características similares. Por ejemplo, un auto ES UN tipo particular de vehículo motorizado, con lo cual dentro de su comportamiento podemos encontrar “arrancar” y “frenar”, entre otros. Ahora bien, una motocicleta también ES UN vehículo motorizado, y tiene dentro de su comportamiento “arrancar” y “frenar”. El conjunto de atributos también es compartido entre una motocicleta y un automóvil, aunque sus valores no coincidan necesariamente. Por ejemplo, ambos tienen el atributo “cantidad de ruedas”, sólo que el auto tiene 4 y la motocicleta 2.
El concepto de identidad se refiere al hecho de que cada objeto es único en el mundo, por más que su conjunto de atributos y sus valores sean exactamente iguales a los de otros objetos. Por ejemplo, dos autos del mismo modelo, color, motor, salidos de la misma línea de producción el mismo día no dejan de ser dos autos diferentes, por más que su conjunto de atributos y sus valores sean iguales. La única posibilidad de que dos objetos sean iguales es que sean el mismo objeto.
Otra forma útil de ver una clase es como una plantilla, plano o molde de un conjunto de entidades a partir del cual se crearán luego instancias particulares (los objetos). La interacción de las entidades en el mundo real se produce entre objetos, no entre clases. Las clases no tienen “vida” en el mundo real, los objetos sí. Para poder interactuar con alguna clase deberemos crear una instancia particular de ella, con un conjunto de valores definidos para los atributos. A este proceso se lo conoce como “instanciación de un objeto”.
Tanto para los atributos (estado) como para los métodos (comportamiento) de una clase puede configurarse el nivel de visibilidad o acceso que estos tendrán hacia el mundo exterior (otras clases que interactúen con ella). Los cuatro niveles de acceso más comunes que se pueden establecer a nivel de miembro de una clase son: Público: un miembro público puede ser accedido desde cualquier otra clase Privado: un miembro privado solamente puede ser accedido desde la clase en la que está declarado Protegido: un miembro protegido solamente puede ser accedido desde la clase en la que está declarado y desde las clases que hereden de ella (se verá el concepto de herencia más adelante en este curso) Paquete: un miembro de tipo paquete sólo podrá ser accedido desde las clases que estén en el mismo paquete lógico que la clase en la que está definido. En un entorno Microsoft .NET un ejemplo de paquete es una biblioteca .dll o un archivo ejecutable .exe.