270 likes | 549 Views
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?
E N D
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? • 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 Time class BankAccount { { public int hour; ... public int minute; ... } }
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 crearun nuevo nivel semántico en el que se pueda ser absolutamente preciso. Edsger 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( ) Ingresar( ) ¿CuentaBancaria ? ¿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( ) Retirar( ) û saldo saldo Ingresar( ) Ingresar( ) ¿CuentaBancaria ? ¿CuentaBancaria ?
¿Por qué se encapsula? Retirar( ) • Porque permite el control • El objeto se usa sólocon los métodos públicos • Porque permite el cambio • El uso del objeto novaría si cambia el tipode 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. “Pedro" prop. “Juan"
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 99,12 û û interés 7% 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 Un objeto cuenta Retirar( ) û Interés( ) Ingresar( ) saldo 99,12 û interés 7% prop. “Pedro" Las clases contienen datos y métodos estáticos 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 System; class Hello { public static int Main( ) { Console.WriteLine(“Hello, World”); return 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 classBankAccount {public void Withdraw(decimal cantidad) { ... } public void Deposit(decimal cantidad) { ... } private decimal balance; private string name; } Métodos públicos describen un comportamiento accesible Campos privados describen un estado 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 Program { static void Main( ) { Reloj ahora; ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( ); suya.Ingresar(999999M); } } ahora hora minuto nuevo objeto CuentaBancaria suya ... ...
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 CuentaBancaria { ... public void PoneNombre(string nombre) {this.nombre = nombre; } private string nombre; } Si esta instrucción fuera nombre = nombre; ¿qué ocurriría?
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 Músico Generalización Clase base Violinista ¿Es éste un buen ejemplo de herencia ? Especialización Clase derivada
Jerarquías de clases • Las clases con relaciones de herencia forman jerarquías de clases Músico toca Instrumento musical Músico de cuerda Instrumento de cuerda toca ??? Violinista Violín ??? toca
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 cuerda Instrumento musical Con teclas Violín Instrumento de 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 de cuerda Un método sincuerpo se llama operación AfinaTuInstrumento( ) Guitarrista Violinista 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 No se pueden crear instanciasde clases abstractas Músico de cuerda { abstract } Se pueden crear instancias de clases concretas Guitarrista « concrete » Violinista « concrete »
Interfaces • Las interfaces contienen sólo operaciones, no implementación Músico « interface » Nada más que operaciones. No se pueden crear instanciasde una interfaz. Músico de cuerda { abstract } Puede contener implementación.No se pueden crear instancias deuna interfaz. Implementa las operaciones heredadas.Se pueden crear instancias de una claseconcreta. Violinista « concrete »