Fundamentos de la programaci贸n orientada a objetos
Descripción general
Clases y objetos
Uso de la encapsulación
El lenguaje C# y la orientación a objetos
Definición de sistemas orientados a objetos
Clases y objetos
¿Qué es una clase?
¿Qué es un objeto?
Comparación de clases y estructuras
Abstracció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
¿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
Comparación de clases y estructuras
Una estructura define un valor
Sin identidad, estado accesible, sin comportamiento añadido
Una clase define un objeto
Identidad, estado inaccesible, comportamiento añadido
struct struct Time Time {{ public public int int public public int int }}
hour; hour; minute; minute;
class class BankAccount BankAccount {{ ... ... ... ... }}
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 El objetivo objetivo de de la la abstracción abstracción es es no no perderse perderse en en vaguedades vaguedades yy crear crear un un nuevo nuevo nivel nivel semántico semántico en en el el que que se se pueda pueda ser ser absolutamente absolutamente preciso. preciso. Edsger Edsger Dijkstra Dijkstra
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
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( ) ¿CuentaBancaria ?
Ingresar( ) ¿CuentaBancaria ?
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( ) saldo Ingresar( ) ¿CuentaBancaria ?
Retirar( )
saldo Ingresar( )
¿CuentaBancaria ?
¿Por qué se encapsula?
Porque permite el control
Retirar( )
El objeto se usa sólo con los métodos públicos
Porque permite el cambio
El uso del objeto no varía si cambia el tipo de los datos privados
Ingresar( )
saldo 12,56
Retirar( ) Ingresar( ) euros 12 céntimos
56
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. “Juan"
prop.
“Pedro"
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 interés 7%
saldo
99,12
interés 7%
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 Interés( )
interés 7% Las clases contienen datos y métodos estáticos
Un objeto cuenta
Retirar( ) Ingresar( ) saldo
99,12
prop.
“Pedro"
Los objetos contienen datos y métodos de objetos
El lenguaje C# y la orientación a objetos
“Hola, mundo” de nuevo
Definición de clases simples
Instancias de nuevos objetos
Uso del operador this
“Hola, mundo” de nuevo
using using class class {{
}}
System; System; Hello Hello public public static static int int Main( Main( )) {{ Console.WriteLine(“Hello, Console.WriteLine(“Hello, World”); World”); return return 0; 0; }}
Definición de clases simples
Datos y métodos juntos dentro de una clase
Los métodos son públicos, los datos son privados
class class BankAccount BankAccount Métodos Métodos públicos públicos {{ describen describen un un public void Withdraw(decimal cantidad) public void Withdraw(decimal cantidad)comportamiento comportamiento {{ ... accesible accesible ... }} public public void void Deposit(decimal Deposit(decimal cantidad) cantidad) Campos {{ ... Campos privados privados ... }} describen describen un un private private decimal decimal balance; balance; estado estado private string name; private string name; inaccesible inaccesible }}
Instancias de nuevos objetos
ď Ž
Al declarar una variable de clase no se crea un objeto ď Ź
Para crear un objeto se usa el operador new
class class Program Program ahora hora {{ minuto static static void void Main( Main( )) nuevo suya {{ ... objeto ... CuentaBancaria Reloj ahora; Reloj ahora; ahora.hora ahora.hora == 11; 11; Cuenta Cuenta Bancaria Bancaria suya suya == new new CuentaBancaria( CuentaBancaria( ); ); suya.Ingresar(999999M); suya.Ingresar(999999M); }} }}
Uso de la palabra reservada this
La palabra reservada this apunta al objeto usado para la llamada al método
Es útil en caso de conflicto entre identificadores de distintos ámbitos
class class CuentaBancaria CuentaBancaria {{ ... ... public public void void PoneNombre(string PoneNombre(string nombre) nombre) Si esta instrucción fuera {{ nombre = nombre; this.nombre = nombre; this.nombre = nombre; ¿qué ocurriría? }} private private string string nombre; nombre; }}
Definición de sistemas orientados a objetos
Herencia
Jerarquías de clases
Herencia sencilla y múltiple
Polimorfismo
Clases base abstractas
Interfaces
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
Especialización
Violinista Violinista
Clase base
Clase derivada
¿Es éste un buen ejemplo de herencia ?
Jerarquías de clases
Las clases con relaciones de herencia forman jerarquías de clases Músico Músico
Músico Músico de de cuerda cuerda
??? ???
Violinista Violinista
toca
Instrumento Instrumento musical musical
toca
Instrumento Instrumento de de cuerda cuerda
toca
Violín Violín
??? ???
Herencia sencilla y múltiple
Herencia sencilla: derivadas de una clase base
Herencia múltiple: derivadas de dos o más clases base Instrumento Instrumento de de cuerda cuerda
Instrumento Instrumento musical musical
Con Con teclas teclas
Violín Violín
Instrumento Instrumento de de cuerda cuerda
Violín tiene una sola clase base directa
Instrumento de cuerda tiene dos clases base directas
Polimorfismo
El nombre del método reside en la clase base
Los distintos cuerpos del método residen en las clases derivadas Músico Músico de de cuerda cuerda AfinaTuInstrumento( AfinaTuInstrumento( ))
Un Un método método sin sin cuerpo cuerpo se se llama llama operación operación
Guitarrista Guitarrista
Violinista Violinista
AfinaTuInstrumento( AfinaTuInstrumento( ))
AfinaTuInstrumento( AfinaTuInstrumento( ))
Clases base abstractas
Algunas clases existen sólo para ser clases base
No tiene sentido crear instancias de estas clases
Estas clases son abstractas Músico Músico de de cuerda cuerda {{ abstract abstract }}
No No se se pueden pueden crear crear instancias instancias de de clases clases abstractas abstractas Se Se pueden pueden crear crear instancias instancias de de clases clases concretas concretas
Guitarrista Guitarrista «« concrete concrete »»
Violinista Violinista «« concrete concrete »»
Interfaces
Las interfaces contienen sólo operaciones, no implementación Músico Músico «« interface interface »»
Músico Músico de de cuerda cuerda {{ abstract abstract}}
Violinista Violinista «« concrete concrete »»
Nada Nada más más que que operaciones. operaciones. No No se se pueden pueden crear crear instancias instancias de de una una interfaz. interfaz.
Puede Puede contener contener implementación. implementación. No No se se pueden pueden crear crear instancias instancias de de una una interfaz. interfaz.
Implementa Implementa las las operaciones operaciones heredadas. heredadas. Se Se pueden pueden crear crear instancias instancias de de una una clase clase concreta. concreta.
Práctica – Creación y uso de clases