Introduccion POO

55
Introducción a la Programación Orientada a Objetos (POO)

description

nada

Transcript of Introduccion POO

  • Introduccin a la Programacin Orientada a Objetos (POO)

  • Motivacin

    Definiciones bsicas Objetos Mensajes y mtodos Clases, subclases y objetos Herencia

    Conceptos claves Encapsulamiento Abstraccin Polimorfismo Persistencia

  • Qu vimos hasta ahora?

    Programacin Estructurada

    La idea principal de esta forma de programacin es separar laspartes complejas del programa en mdulos, que seanejecutados a medida que sean necesarios. Estos mdulos sonindependientes entre s, y adems deben poder comunicarse.

    Introduccin

  • Problemas de la Programacin Estructurada

    Varios programadores trabajan en equipo desarrollando unaaplicacin grande.

    Mas de un programador manipula funciones separadas que pueden referirsea tipos de datos mutuamente compartidos, y los cambios de un programadorse deben reflejar en el trabajo del resto del equipo.

    Qu pasa si uno de los programadores decide que una estructuraexistente en el sistema en vez de representarse con una lista,ahora se representa con un arreglo?

    Este es uno de los problemas de la programacin estructurada, por lo cual se sigui investigando sobre diferentes metodologas de programacin.

    Introduccin

  • Qu es lo que ves?

    Introduccin - POO

  • Qu es lo que ves?

    Introduccin - POO

  • Qu es lo que ves?

    Introduccin - POO

  • Qu es lo que tienen en comn?

    ModeloMarcaColorVelocidad

    AcelerarDesacelerarApagarArrancar

    Se podra encontrar una forma dedefinir algo que encapsule lascaractersticas y comportamientocomunes

    Introduccin - POO

  • Tienen algo en comn?

    Programacin Orientada a Objetos

  • Qu es una clase?

    Es un modelo o prototipo que define las variables y mtodoscomunes a todos los objetos de ciertas caractersticascomunes.

    Es una plantilla genrica para un conjunto de objetos desimilares caractersticas.

    Contiene:

    Conjunto de atributos comunes

    Estructura de datos

    Comportamiento por medio de mtodos

    Cmo lo relacionamos con nuestro ejemplo

    de los autos?

    Introduccin - POO

  • Cmo deberamos implementar la clase auto?

    marcamodelocolorvelocidadcapacidad bal

    Auto

    acelerar()desacelerar()arrancar()apagar()Todos los mtodos para ver y modificar c/ caracterstica.

    nombre

    caractersticas

    comportamiento

    Programacin Orientada a Objetos - Clases

  • Cada uno de los diferentes autos vistos anteriormente tienencaractersticas comunes pero con valores diferentes. Es decir los tresautos tienen color pero cada uno un color diferente.

    Instancia de una clase = OBJETO

    Auto

    Programacin Orientada a Objetos - Clases

    es un

  • Surge de la evolucin de la programacin estructurada y bsicamentesimplifica la programacin con la nueva filosofa y nuevos conceptos quetiene.

    La POO se basa en dividir el sistema en componentes que contienenoperaciones y datos. Cada componente se denomina objeto.

    Un objeto es una unidad que contiene datos y operacionesque operan sobre esos datos. Los objetos de un sistema secomunican entre s mediante mensajes.

    Programacin Orientada a Objetos

  • ProgramacinEstructurada

    Programa

    DatosMdulo 1

    Mdulo 2

    Programacin Orientada a Objetos

    Programacin Orientada a Objetos

    Programa

    Datos Mtodos

    Objeto

    Objeto

    Objeto

    Datos Mtodos

    Datos Mtodos

  • Grady Booch resume la diferencia de la siguienteforma:

    Lea las especificaciones del sistema que deseaconstruir. Subraye los verbos si persigue uncdigo procedimental, o los sustantivos si suobjetivo es un programa orientado a objetos.

    Programacin Orientada a Objetos

  • Todo lo que vemos a nuestro alrededor puede ser considerado unobjeto (una computadora, un telfono celular, un rbol, unautomvil, etc).

    Ejemplo: una computadora est compuesta por varios componentes (tarjetamadre, chip, disco duro y otros), el trabajo en conjunto de todos ellos haceoperar a una computadora. El usuario no necesita saber como trabajaninternamente cada uno de estos componentes, sino como es la interaccincon ellos. Es decir, cuando se conoce como interaccionan los componentesentre s, el usuario podr armar la computadora.

    Relacin con la Programacin Orientada a Objetos

    Programacin Orientada a Objetos

  • Cuales son las ventajas de la POO?

    Fomenta la reutilizacin y extensin de cdigoPermite crear sistemas mas complejosRelacionar el sistema al mundo realFacilita la creacin de programas visualesConstruccin de prototiposAgiliza el desarrollo de softwareFacilita el trabajo en equipoFacilita el mantenimiento del software

    Programacin Orientada a Objetos

  • Programacin Orientada a Objetos

    La Programacin orientada a objetos trabaja de estamanera: todo el programa est construido en base adiferentes componentes (objetos), cada uno tiene unrol especfico en el programa y todos los componentespueden comunicarse entre ellos de formaspredefinidas.

    Todo objeto tiene sus atributos y sus mtodos

  • Programacin Orientada a Objetos CL

    ASE

    AUTO

    Atributos:marca, modelo, color, velocidad mxima, velocidad actual,tamao tanque de combustible, cantidad actual decombustible en el tanque.

    Mtodos:frenar, acelerar, llenar tanque de combustible, etc

  • Clase nombreClase;

    End;

    Atributos (caractersticas)

    Mtodos (comportamiento)

    Sintaxis:

    POO - Clases

  • Clase Auto;

    Atributos

    Mtodos

    End;

    Son privados no accesibles desde afuera (caractersticas).

    Son privados o pblicos(comportamiento)

    POO - Clases

  • Algoritmos, Datos y Programas 2010

    Clase Auto;

    End;

    marca: stringmodelo: stringcolor: stringvelocidad: integer;capacidad bal: real

    procedure arrancar;procedure acelerar (vel:integer);procedure desacelerar (vel:integer);procedure apagar;procedure verColor ( ); {todos los otros!!!!}procedure pintar (nuevoColor: string);

    constructor crear (unaMarca, unModelo, unColor:string; unaCapacidad:real)

    Siempre debe existir

    Se deben implementar cada uno de los mtodos definidos

    POO - Clases

  • Algoritmos, Datos y Programas 2010

    Clase Auto;

    marca: string; modelo: stringcolor: string; velocidad: integer;capacidad bal: real;

    procedure arrancar;Beginvelocidad:= 0;

    End;

    procedure acelerar (vel:integer)Beginvelocidad:= velocidad + vel;

    End;

    constructor crear (unaMarca, unModelo, unColor:string; unaCapacidad:real) Beginmarca:= unaMarca; modelo:= unModelo; color:= unColor; capacidad:= unaCapacidad;

    End;

    Notar que a diferencia de los TADs el objeto no es pasado como parmetro

    POO - Clases

  • procedure arrancar;Beginvelocidad:= 0;

    End;

    procedure acelerar (vel:integer)Beginvelocidad:= velocidad + vel;

    End;

    Procedure verColor (var unColor: string)BeginunColor:=color;

    End; Notar que a diferencia de los TADs el objeto

    no es pasado como parmetro

    procedure pintar (nuevoColor: string);Begincolor:= nuevoColor;

    End;

    POO - Clases

  • POO Consideraciones tiles

    1- El programa es una coleccin de objetos queinteractan.

    2- En la definicin de la clase siempre debe existir elmtodo crear (que tiene antepuesta la palabraconstructor).

    3- Como parmetros de los mtodos nunca se encuentrael objeto.

    4- No hay encabezado de los mtodos y luego laimplementacin.

    Cmo sera un programa ?

  • Program uno;Vara1,a2: Auto;

    Notar que adiferencia de losTADs, lasoperaciones seidentifican comovarObjeto.mtodo(salvo elconstructor)

    Begina1:= Auto.crear (Citroen,3CV,amarillo, 50);a1.arrancar;a1.acelerar (100);a1.desacelerar(30);

    a2:= Auto.crear (Ferrari,2007,roja, 100);a2.arrancar;

    End.

    POO - Clases

    Forma de invocar los mtodos

    Existen objetos que utilicen objetos?

    Notar que slo para utilizar la operacin constructor debe

    anteponerse el nombre de la clase.

  • Considerando la clase auto descripta anteriormente. Adems podemossuponer que el auto est compuesto por un motor, el cual podra estarrepresentado por otra clase motor

    marcavlvulasprendido

    motor

    ArrancarApagarMtodos para ver y modificar Cmo redefinimos

    el auto?

    marcamodelocolorvelocidadcapacidad balmotor

    arrancaracelerar()desacelerar()apagarpintar ()verColor()mtodos para ver y modificar

    auto

    POO - Clases

  • Algoritmos, Datos y Programas 2010

    Clase auto;marca: string; modelo: stringcolor: string; velocidad: integer;capacidad bal: real; miMotor:motor;

    constructor crear (unaMarca,unModelo,unColor:string; unaVelocidad, unaCapacidad:real; marcaMotor:string; valvulasMotor:integer)

    procedure arrancar(vel:integer)

    Beginmarca:= unaMarca; modelo:= unModelo;color:= unColor; capacidad:= unaCapacidad; miMotor:= Motor.crear(marcaMotor, valvulasMotor);

    End;

    Beginvelocidad:= 0;miMotor.arrancar;

    End;

    POO - Clases

  • procedure apagar;Beginvelocidad:= 0;miMotor.apagar;

    End;

    procedure acelerar (vel:integer)Begin

    velocidad:= velocidad + vel;End;

    procedure pintar (unColor:string)Begincolor:= unColor;

    End;

    procedure verColor (var unColor:string)BeginunColor:= color;

    End;

    procedure desacelerar (vel:integer)Begin

    velocidad:= velocidad - vel;End;

    POO - Clases

  • Algoritmos, Datos y Programas 2010

    Clase motor;

    marca: string; valvulas:integer; prendido:boolean;

    procedure arrancarBeginprendido:= true;End;

    procedure apagarBeginprendido:= false;End;

    constructor crear (unaMarca:string; unaValvula:integer) Beginmarca:= unaMarca; valvulas:= unaValvula;

    prendido:= false; End;

    Cmo escribimos elprograma que lo usa?

    POO - Clases

  • Program dos;Vara1,a2: Auto;Begina1:= Auto.crear(Citroen, 3CV, amarillo, 50, citroen, 4);a1.arrancar;a1.acelerar(30);a1.apagar;

    End.

    POO - Clases

    Cmo funciona?

  • El modelo orientado a objetos consta de 4conceptos bsicos:

    ObjetosClasesHerenciaEnvo de Mensajes

    POO - Conceptos

  • Qu aspectos tienen en comn?

    POO Concepto de Herencia

    Todos tienen atributoscomunes: color modelo motor

    Todos tienen caractersticascomunes: arrancan aceleran apagan

  • MarcaModeloColorVelocidad

    MotorPosicinAnclaPotencia de las turbinasEslora

    MarcaModeloColorVelocidad

    Motor

    Capacidad del bal

    Qu se puede notar? Hay caractersticas comunes y propias de cada uno

    Clases Caractersticas

    MarcaModeloColorVelocidad

    MotortrenAterrizajePotencia de las turbinasAltura mxima de vueloTamao de las alas

  • Cuando se da esta situacin aparece el concepto de HERENCIA

    Transporte

    AvinBarcoAuto

    MarcaModeloColorVelocidadMotor

    es un

    ArrancarAcelerarDesacelerarApagarCrear

    Potencia de lasturbinasEsloraposicinAncla

    ArrancarApagarCrear

    Potencia de lasturbinasAltura mxima devuelotrenAterrizaje

    ArrancarApagarCrear

    Capacidad delbal

    Crear

    Clases Caractersticas

  • As ocurre en nuestro ejemplo de los transportes. Dnde vemos la herencia all?

    La herencia es el mecanismo que le permite a un objeto heredarpropiedades de otra clase de objetos. La herencia permite a un objetocontener sus propios procedimientos o funciones y heredar los mismos deotros objetos.

    Un mecanismo potente que no se encuentra en sistemas procedimentales.

    La herencia hace las tareas de programacin ms fciles, ya que se puedencrear sus objetos de modo creciente. Es decir, se puede definir un tipogeneral de clase y se utiliza como una parte de objetos especficos sinnecesidad de tener que declarar todos los campos individuales nuevamente.

    Para definir una clase que hereda de otra clase se debe incluir el nombre dela clase padre entre parntesis.

    POO Concepto de Herencia

  • Por ejemplo, la subclase auto, barco y la subclase avin heredantodos los mtodos y atributos correspondientes a los transportes,por ser estas subclases de la clase transporte.

    Adems, al crear un objeto auto, tendr no slo los atributos ycomportamiento propios de un transporte sino tambin losespecficos de un auto, por ejemplo podr conocer la capacidad delbal.

    POO Concepto de Herencia

  • La herencia consiste entonces en utilizar una clase ya creada paratomar sus caractersticas en clases ms especializadas oderivadas de sta para reutilizar el cdigo que sea comn con laclase base y solamente definir nuevos mtodos o redefinir algunosde los existentes.

    Debido a la herencia, los programas orientados a objetos constande taxonomas, rboles y jerarquas de clases que, por medio de lasubclasificacin, llegan a ser ms especficas.

    Existe la clase OBJECT la cual es super clase de todas las clasesque se definen en la aplicacin. Es la clase padre por defecto si en ladefinicin de la nueva clase no se especifica otra.

    POO Concepto de Herencia

  • Transporte

    Martimo Aire Nieve Tierra

    DentroAtmosfera FueraAtmosfera 1-Persona N-Personas

    Object

    Recordar que un transporte de aire, adems de ser un transporte es un object

    POO Concepto de Herencia

  • Es importante hacer notar que la programacinorientada a objetos incluye el concepto de herencia, elcual no es incluido en la programacin estructurada.

    POO Concepto de Herencia

  • Volviendo a nuestro ejemplo de los transportes:

    cuntas clases hay que definir?

    dnde se define cada atributo?

    dnde se define cada mtodo?

    donde se implementa cada mtodo?

    POO Concepto de Herencia

  • Cuntas clases definimos?

    Dnde definimos cadaatributo?

    Dnde definimos cadamtodo?

    Dnde implementamoscada mtodo?

    La clase transporte, auto, barco, avin

    Los atributos comunes a todas lasclases en la clase padre (Transporte),y los particulares de cada clase en cadauna de ellas (Auto, Barco, Avin).

    Los mtodos comunes en la clasepadre y los correspondientes a losatributos propios de cada clase encada una de ellas. Adems un mtodopuede definirse en la clase hijo y padrea la vez.

    Depende

    POO Concepto de Herencia

  • Clase Transporte;

    marca: string; modelo: stringcolor: string; velocidad: integer;miMotor:motor;constructor crear (unaMarca, unModelo, unColor:string;

    marcaMotor:string; valvulasMotor:integer) Beginmarca:= unaMarca; modelo:= unModelo;color:= unColor; miMotor:= Motor.crear (marcaMotor, valvulasMotor);

    End;

    procedure arrancar (vel:integer)Beginvelocidad:= 0;miMotor.arrancar;

    End;

    POO Concepto de Herencia

  • procedure apagar;Beginvelocidad:= 0;miMotor.apagar;

    End;

    procedure acelerar (vel:integer)Begin

    velocidad:= velocidad + vel;End;

    procedure pintar (unColor:string)Begincolor:= unColor;

    End;

    procedure desacelerar (vel:integer)Begin

    velocidad:= velocidad - vel;End;

    Cmo implementamos la clase auto?

    POO Concepto de Herencia

  • Clase Auto (Transporte);

    capacidad bal: real;

    constructor crear (unaMarca, unModelo, unColor:string;unaCapacidad:real; marcaMotor:string; valvulasMotor:integer)

    Begincapacidad:= unaCapacidad; super.crear(unaMarca, unModelo, unColor, marcaMotor, valvulasMotor);

    End;

    Indica que la clase auto hereda de la clase transporte (se indica entre parntesis) Qu hereda?

    Slo se definen las caractersticas propias del auto

    Slo se implementan los mtodos propios del auto

    Invoca al mtodo crear de la clase padre (de la cual hereda)

    Notar que los mtodos no implementados seheredan de la clase padre

    POO Concepto de Herencia

  • Algoritmos, Datos y Programas 2010

    Clase Barco (Transporte);

    potenciaTurbinas: real; eslora:real;posicionAncla:string;

    constructor crear (unaMarca, unModelo, unColor:string; unaPotencia:real;unaEslora:real;marcaMotor:string; valvulasMotor:integer)

    BeginpotenciaTurbinas:= unaPotencia;eslora:= unaEslora;posicionAncla:=en superficie; super.crear (unaMarca, unColor, marcaMotor, valvulasMotor);

    End;

    Procedure arrancarBeginposicionAncla:=en superficie; super.arrancar;

    End;

    Procedure apagarBeginposicionAncla:=en agua; super.apagar;

    End;

    Notar que los mtodos no implementados se heredan de la clase padre

    Notar que se reimplementaron los mtodos arrancar y apagar ya que se les quiere dar un comportamiento diferente

    POO Concepto de Herencia

  • Algoritmos, Datos y Programas 2010

    Clase Avion (Transporte);

    potenciaTurbinas: real; alturaMaxVuelo:real;trenAterrizaje:string;

    constructor crear (unaMarca, unModelo, unColor:string; unaPotencia:real;unaAltura:real;marcaMotor:string; valvulasMotor:integer)

    BeginpotenciaTurbinas:= unaPotencia;alturaMaxVuelo:= unaAltura;trenAterrizaje:=desplegado; super.crear(unaMarca, unColor, marcaMotor, valvulasMotor);

    End;

    Procedure arrancarBegintrenAterrizaje:= no desplegado; super.arrancar;

    End;

    Procedure apagarBegintrenAterrizaje:=desplegado; super.apagar;End;

    POO Concepto de Herencia

    Notar que los mtodos no implementados se heredan de la clase padre

    Notar que se reimplementaron los mtodos arrancar y apagar ya que se les quiere dar un comportamiento diferente

  • POO Concepto de Herencia

    Program dos;Vara:auto; b:barco, av:avion;ma, mo, co, maMotor:string;val:integer;

    Beginread (mo, ma, co, maMotor);read(val);a:= Auto.crear (ma, mo, co, 150.23, maMotor, val);a.arrancar;a.acelerar (30);b:= Barco.crear (Royal, Nautilus, verde, 200.90, 7.80, Honda, 5);b.arrancar;b.acelerar(50);b.pintar(rojo);a.apagar;

    End.

    Recordar que cuando un objetoinvoca a un mtodo, primerose lo busca en su definicin,sino est definido en l, se lobusca en el padre del objeto.

  • Cuando un programador define una jerarqua de clases, es porque identificacaractersticas comunes en los objetos, y algunas caractersticas que losdiferencian.

    Los atributos comunes se definen en la super clase (clase transporte).

    Los atributos diferentes se definen en cada clase (clase auto, barco, avin).

    Los mtodos que se implementan de igual manera para todas las clases, debenimplementarse en la super clase.

    Los mtodos que se implementan de manera diferente en cada subclase, debenimplementarse en cada una.

    Para hacer referencia a un mtodo de una super clase desde una subclase debeponerse: super.nombremetodo.

    POO Concepto de Herencia - Consideraciones

  • Otros conceptos clave adems de los vistos queresumen las ventajas de la programacin orientada aobjetos son:

    EncapsulamientoAbstraccinPolimorfismo

    POO Otros conceptos importantes

  • Es el trmino formal que describe al conjunto demtodos y datos dentro de un objeto de forma que elacceso a los datos se permite solamente a travs delos propios mtodos del objeto.

    Ninguna otra parte de un programa orientado aobjetos puede operar directamente sobre los datos deun objeto.

    La comunicacin entre un conjunto de objetos sucedeexclusivamente por medio de mensajes explcitos.(Concepto que tambin poseen los TADs)

    POO Encapsulamiento

  • La orientacin a objetos fomenta que los programadores yusuarios piensen sobre las aplicaciones en trminos abstractos.

    Comenzando con un conjunto de objetos, se busca un factor decomportamiento comn y se sita en clases superiores.

    Las bibliotecas de clases proporcionan un depsito para elementoscomunes y reutilizables.

    La herencia mantiene automticamente las relaciones entre lasclases dispuestas jerrquicamente en una biblioteca de clases.

    POO Abstraccin

  • Cada nivel de abstraccin facilita el trabajo deprogramacin porque hay disponible ms cantidad decdigo reutilizable.

    Podramos decir que la abstraccin es la capacidad de unobjeto de cumplir sus funciones independientemente delcontexto en el que se lo utilice.

    O sea, un cierto objeto siempre expondr sus mismaspropiedades y dar los mismos resultados a travs de suseventos, sin importar el mbito en el cual se lo hayacreado.

    POO Abstraccin

  • Los objetos actan en respuesta a los mensajes quereciben.

    El mismo mensaje puede originar accionescompletamente diferentes al ser recibido por diferentesobjetos. Este fenmeno se conoce como polimorfismo.

    El mensaje crear, por ejemplo, al ser enviado a unauto o barco invocar diferentes mtodos de creacin.

    POO Polimorfismo

  • El polimorfismo, entonces, se refiere a que unamisma operacin puede tener diferentecomportamiento en diferentes objetos.

    a1:= Auto.crear (.)

    b1:= Barco.crear (.)

    POO Polimorfismo

    Slide Number 1Slide Number 2Slide Number 3Slide Number 4Slide Number 5Slide Number 6Slide Number 7Slide Number 8Slide Number 9Slide Number 10Slide Number 11Slide Number 12Slide Number 13Slide Number 14Slide Number 15Slide Number 16Slide Number 17Slide Number 18Slide Number 19Slide Number 20Slide Number 21Slide Number 22Slide Number 23Slide Number 24Slide Number 25Slide Number 26Slide Number 27Slide Number 28Slide Number 29Slide Number 30Slide Number 31Slide Number 32Slide Number 33Slide Number 34Slide Number 35Slide Number 36Slide Number 37Slide Number 38Slide Number 39Slide Number 40Slide Number 41Slide Number 42Slide Number 43Slide Number 44Slide Number 45Slide Number 46Slide Number 47Slide Number 48Slide Number 49Slide Number 50Slide Number 51Slide Number 52Slide Number 53Slide Number 54Slide Number 55