Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Descripcin general
Clases y objetos Uso de la encapsulacin El lenguaje C# y la orientacin a objetos Definicin de sistemas orientados a objetos
Clases y objetos
Qu es una clase?
COCHE?
Para el filsofo
Una construccin sintctica con nombre que describe un comportamiento y atributos comunes
Una estructura de datos que incluye datos y funciones
Qu es un objeto?
Identidad: Los objetos se distinguen unos de otros Comportamiento: Los objetos pueden realizar tareas Estado: Los objetos contienen informacin
Sin identidad, estado accesible, sin comportamiento aadido Identidad, estado inaccesible, comportamiento aadido
class BankAccount { ... ... }
Abstraccin
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 encapsulacin para forzar una abstraccin
El objetivo de la abstraccin es no perderse en vaguedades y crear un nuevo nivel semntico en el que se pueda ser absolutamente preciso. Edsger Dijkstra
Uso de la encapsulacin
Combinacin de datos y mtodos Control de la visibilidad de acceso Por qu se encapsula? Datos de objetos Uso de datos estticos
Combinacin de datos y mtodos en una sola cpsula La frontera de la cpsula crea un espacio interior y otro exterior
Retirar( ) saldo
Ingresar( )
CuentaBancaria ?
Los mtodos son pblicos, accesibles desde el exterior Los datos son privados, accesibles slo desde el interior
Retirar( )
saldo Ingresar( )
CuentaBancaria ?
Por qu se encapsula?
Retirar( ) Ingresar( )
El objeto se usa slo con los mtodos pblicos El uso del objeto no vara si cambia el tipo de los datos privados
saldo 12,56
Datos de objetos
Por ejemplo, cada cuenta bancaria tiene su propio saldo. Si dos cuentas tienen el mismo saldo, ser slo una coincidencia .
Retirar( ) Ingresar( ) saldo prop. 12,56 Pedro"
prop. Juan"
Los datos estticos describen informacin para todos los objetos de una clase
Por ejemplo, supongamos que todas las cuentas comparten el mismo inters. No sera conveniente almacenar el inters en todas las cuentas. Por qu?
Retirar( ) Ingresar( ) saldo 12,56 inters 7% Retirar( ) Ingresar( )
saldo
99,12
inters 7%
La clase cuenta
Inters( )
Hola, mundo de nuevo Definicin de clases simples Instancias de nuevos objetos Uso del operador this
using System;
class Hello { public static int Main( ) { Console.WriteLine(Hello, World); return 0; } }
Datos y mtodos juntos dentro de una clase Los mtodos son pblicos, los datos son privados
Mtodos pblicos describen un comportamiento accesible Campos privados describen un estado inaccesible
class BankAccount { public void Withdraw(decimal cantidad) { ... } public void Deposit(decimal cantidad) { ... } private decimal balance; private string name; }
class Program ahora hora { minuto static void Main( ) nuevo suya { ... objeto ... CuentaBancaria Reloj ahora; ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( ); suya.Ingresar(999999M); } }
class CuentaBancaria { ... public void PoneNombre(string nombre) Si esta instruccin fuera { nombre = nombre; this.nombre = nombre; qu ocurrira? } private string nombre; }
Herencia Jerarquas de clases Herencia sencilla y mltiple Polimorfismo Clases base abstractas
Interfaces
Herencia
La herencia es una relacin entre clases Las nuevas clases aaden especializacin a las existentes
Msico
Clase base
Generalizacin
Especializacin
Violinista
Clase derivada
Jerarquas de clases
Las clases con relaciones de herencia forman jerarquas de clases
Msico toca Instrumento musical
Msico de cuerda
toca
Instrumento de cuerda
???
Violinista
toca
Violn
???
Herencia sencilla: derivadas de una clase base Herencia mltiple: derivadas de dos o ms clases base
Instrumento de cuerda Instrumento musical
Con teclas
Violn
Violn tiene una sola clase base directa
Instrumento de cuerda
Instrumento de cuerda tiene dos clases base directas
Polimorfismo
El nombre del mtodo reside en la clase base Los distintos cuerpos del mtodo residen en las clases derivadas
Msico de cuerda AfinaTuInstrumento( ) Un mtodo sin cuerpo se llama operacin
Guitarrista AfinaTuInstrumento( )
Violinista AfinaTuInstrumento( )
No tiene sentido crear instancias de estas clases Estas clases son abstractas
Msico de cuerda { abstract } No se pueden crear instancias de clases abstractas Se pueden crear instancias de clases concretas Guitarrista concrete Violinista concrete
Interfaces
Las interfaces contienen slo operaciones, no implementacin
Msico interface Nada ms que operaciones. No se pueden crear instancias de una interfaz.
Violinista concrete
Implementa las operaciones heredadas. Se pueden crear instancias de una clase concreta.