7. fundamentos de oo

27
Fundamentos de la programación orientada a objetos

Upload: esteban-soraire

Post on 29-Nov-2014

891 views

Category:

Documents


3 download

DESCRIPTION

Fundamentos De Oo

TRANSCRIPT

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?

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

¿COCHE?¿COCHE?

¿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; ...} }

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

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( )

Ingresar( )

saldo

Retirar( )

Ingresar( )

saldo

¿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( )

Ingresar( )

saldo

Retirar( )

Ingresar( )

saldo

¿CuentaBancaria ?¿CuentaBancaria ?

¿Por qué se encapsula?

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

Retirar( )

Ingresar( )

euros 12

Retirar( )

Ingresar( )

saldo 12,56

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 12,56

prop. “Juan"

Retirar( )

Ingresar( )

saldo 12,56

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( )

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

Interés( )

interés 7%

Retirar( )

Ingresar( )

saldo 99,12

prop. “Pedro"

Un objeto cuentaLa clase cuenta

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;

}}

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

class BankAccount{ public void Withdraw(decimal cantidad) { ... } public void Deposit(decimal cantidad) { ... } private decimal balance; private string name;}

class BankAccount{ public void Withdraw(decimal cantidad) { ... } public void Deposit(decimal cantidad) { ... } private decimal balance; private string name;}

Métodos públicosdescriben un

comportamientoaccesible

Métodos públicosdescriben un

comportamientoaccesible

Campos privadosdescriben un

estadoinaccesible

Campos privadosdescriben un

estadoinaccesible

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); }}

class Program{ static void Main( ) { Reloj ahora; ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( ); suya.Ingresar(999999M); }}

horaminuto

ahora

suya ......

nuevoobjetoCuentaBancaria

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; }

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úsicoMúsico

Violinista Violinista

Clase base

Clase derivada

Generalización

Especialización ¿Es éste un buenejemplo de herencia ?

Jerarquías de clases

Las clases con relaciones de herencia forman jerarquías de clases

MúsicoMúsico

??????

Músico de cuerda

Músico de cuerda

ViolínViolín??????

Instrumento musical

Instrumento musical

toca

toca

tocaViolinistaViolinista

Instrumento de cuerda

Instrumento de cuerda

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

ViolínViolín

Instrumento musical

Instrumento musical

Instrumento de cuerda

Instrumento de cuerda

Con teclasCon teclas

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 cuerdaMúsico de cuerda

AfinaTuInstrumento( )AfinaTuInstrumento( )

GuitarristaGuitarrista

AfinaTuInstrumento( )AfinaTuInstrumento( )

ViolinistaViolinista

AfinaTuInstrumento( )AfinaTuInstrumento( )

Un método sin cuerpo se llama

operación

Un método sin cuerpo se llama

operación

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 }

Músico de cuerda{ abstract }

Guitarrista« concrete »Guitarrista

« concrete »Violinista

« concrete »Violinista

« concrete »

Se pueden crear instanciasde clases concretas

Se pueden crear instanciasde clases concretas

No se pueden crear instanciasde clases abstractas

No se pueden crear instanciasde clases abstractas

Interfaces

Las interfaces contienen sólo operaciones, no implementación

Músico de cuerda { abstract }

Músico de cuerda { abstract }

Violinista« concrete »Violinista

« concrete »

Músico« interface »

Músico« interface »

Nada más que operaciones.No se pueden crear instancias

de una interfaz.

Nada más que operaciones.No se pueden crear instancias

de una interfaz.

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

una interfaz.

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

una interfaz.

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

concreta.

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

concreta.

Práctica – Creación y uso de clases