Está en la página 1de 27

Fundamentos de la programacin orientada a objetos

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? Qu es un objeto? Comparacin de clases y estructuras Abstraccin

Qu es una clase?
COCHE?

Para el filsofo

Un artefacto de clasificacin humana Clasificamos segn un comportamiento o atributos comunes

Acordamos descripciones y nombres de clases tiles


Creamos vocabulario; nos comunicamos; pensamos!

Para el programador orientado a objetos

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?

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 informacin

Comparacin de clases y estructuras


Una estructura define un valor

Sin identidad, estado accesible, sin comportamiento aadido Identidad, estado inaccesible, comportamiento aadido
class BankAccount { ... ... }

Una clase define un objeto

struct Time { public int hour; public int minute; }

Abstraccin

La abstraccin 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 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

Uso de mtodos estticos

Combinacin de datos y mtodos

Combinacin de datos y mtodos en una sola cpsula La frontera de la cpsula crea un espacio interior y otro exterior

Retirar( ) saldo

Retirar( ) saldo Ingresar( ) CuentaBancaria ?

Ingresar( )
CuentaBancaria ?

Control de la visibilidad de acceso

Los mtodos son pblicos, accesibles desde el exterior Los datos son privados, accesibles slo 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 slo con los mtodos pblicos El uso del objeto no vara si cambia el tipo de los datos privados

saldo 12,56

Porque permite el cambio

Retirar( ) Ingresar( ) euros 12 cntimos 56

Datos de objetos

Los datos de objetos describen informacin para objetos concretos

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"

Retirar( ) Ingresar( ) saldo 12,56

prop. Juan"

Uso de datos estticos

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%

Uso de mtodos estticos

Los mtodos estticos acceden slo a datos estticos

Un mtodo esttico se llama en la clase, no el objeto


Un objeto cuenta

La clase cuenta

Inters( )

inters 7% Las clases contienen datos y mtodos estticos

Retirar( ) Ingresar( ) saldo prop. 99,12 Pedro"

Los objetos contienen datos y mtodos de objetos

El lenguaje C# y la orientacin a objetos

Hola, mundo de nuevo Definicin 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; } }

Definicin de clases simples

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

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 mtodo

Es til en caso de conflicto entre identificadores de distintos mbitos

class CuentaBancaria { ... public void PoneNombre(string nombre) Si esta instruccin fuera { nombre = nombre; this.nombre = nombre; qu ocurrira? } private string nombre; }

Definicin de sistemas orientados a objetos

Herencia Jerarquas de clases Herencia sencilla y mltiple Polimorfismo Clases base abstractas

Interfaces

Herencia

La herencia indica una relacin es un tipo de"


La herencia es una relacin entre clases Las nuevas clases aaden especializacin a las existentes
Msico
Clase base

Generalizacin

Especializacin

Violinista

Clase derivada

Es ste un buen ejemplo de herencia ?

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 y mltiple

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

Clases base abstractas

Algunas clases existen slo para ser clases base


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.

Msico de cuerda { abstract }

Puede contener implementacin. No se pueden crear instancias de una interfaz.

Violinista concrete

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

Prctica Creacin y uso de clases