You are on page 1of 27

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?

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 Identidad, estado inaccesible, comportamiento añadido
class BankAccount { ... ... }

Una clase define un objeto

struct Time { 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 crear un 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( ) saldo

Retirar( ) 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?
Retirar( ) Ingresar( )

Porque permite el control

El objeto se usa sólo con los métodos públicos El uso del objeto no varía si cambia el tipo de los datos privados

saldo 12,56

Porque permite el cambio

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( ) Ingresar( ) saldo prop. 12,56 “Pedro"

Retirar( ) Ingresar( ) saldo 12,56

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( ) Ingresar( ) saldo 12,56 interés 7% Retirar( ) Ingresar( )

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
Un objeto cuenta

La clase cuenta

Interés( )


interés 7% Las clases contienen datos y métodos estáticos

Retirar( ) Ingresar( ) saldo prop. 99,12 “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 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
Métodos públicos 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; }

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 ahora hora { minuto static void Main( ) nuevo suya { ... objeto ... CuentaBancaria Reloj ahora; ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( ); 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 CuentaBancaria { ... public void PoneNombre(string nombre) Si esta instrucción fuera { nombre = nombre; this.nombre = nombre; ¿qué ocurriría? } private string 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
Músico
Clase base

Generalización

Especialización

Violinista

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 toca Instrumento musical

Músico de cuerda

toca

Instrumento de cuerda

???

Violinista

toca

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 de cuerda Instrumento musical

Con teclas

Violín
Violín tiene una sola clase base directa

Instrumento de cuerda
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 AfinaTuInstrumento( ) Un método sin cuerpo se llama operación

Guitarrista AfinaTuInstrumento( )

Violinista 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 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 sólo operaciones, no implementación
Músico « interface » Nada más que operaciones. No se pueden crear instancias de una interfaz.

Músico de cuerda { abstract }

Puede contener implementación. No se pueden crear instancias de una interfaz.

Violinista « concrete »

Implementa las operaciones heredadas. Se pueden crear instancias de una clase concreta.

Práctica – Creación y uso de clases