Programación Orientada a Objetos - ldc.usb.veyudith/docencia/Telematica/ProgramacionOOYC... ·...

Preview:

Citation preview

ProgramaciProgramación Orientada ón Orientada por Objetospor ObjetosProf. Yudith CardinaleUniversidad Simón BolívarDpto de Computación y Tecnología de la Información

ContenidoContenidoIntroducciónConceptos básicos de POO

◦Clase◦Herencia◦Objeto◦Método◦Evento◦Mensaje◦Propiedad o atributo◦Estado interno◦Componentes de un objeto◦Identificación de un objeto

Programación: Programación: Actividad complejaActividad complejaLos problemas que se intentan

resolver con el software implican elementos complejos propios del área a la que pertenecen

Además, es díficil gestionar el proceso de desarrollo de software

No hay estándares o límites para la flexibilidad en la construcción de software

Crisis del softwareCrisis del software1968: ingeniería del software y crisis del

software (conferencia patrocinada por la OTAN) – el software es caro, poco fiable y escaso

Las metodologías estructuradas no han eliminado el problema – se requiere un nuevo paradigma de diseño y programación de software

La incapacidad humana de dominar la complejidad del software conlleva a:◦Proyectos retrasados◦Proyectos que exceden al presupuesto◦Proyectos deficientes que no cumplen los

requerimientos

Programación Orientada por Programación Orientada por ObjetosObjetos➢ POO es un conjunto de técnicas que

pueden utilizarse para desarrollar programas eficientemente.

➢ Es una manera de enfrentar la complejidad en los programas y la “Crisis del software”.

➢ Los objetos son los elementos principales de construcción de los programas.

La POO es ...La POO es ...

“Un método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase y cuyas clases son todas miembros de una jerarquía de clases unidas medianterelaciones de herencia”

Grady Booch

La Programación La Programación convencional ...convencional ...

➢ Procedimientos y datos

➢ Estructuras de datos como variables o parámetros que se tratan separadamente de los procedimientos

Razones del éxito de la POORazones del éxito de la POO La OO es adecuada para realizar

aplicaciones de prototipos y simulación de programas

Los mecanismos de encapsulamiento de la POO soportan un alto grado de reutilización de código, que se incrementa por los mecanismos de herencia

Soporte de lenguajes OO estables y sólidos

Soportan interfaces gráficas de usuarios

El modelo de objetosEl modelo de objetos➢ Objetos en el mundo real

➢ Propiedades➢ Métodos

➢ Abstracción➢ Clases y Objetos➢ Encapsulamiento➢ Mensajes➢ Constructores➢ Destructores➢ Herencia

Todos los objetos tienen ...Todos los objetos tienen ...➢ Estado: Valor de sus características que

los distinguen entre si (propiedades, sustantivos)Ejemplo: Objeto Perro - Características➢ Nombre: “FIDO”➢ Raza: “Chihuahua”➢ Color: “Café”, ...

➢ Comportamiento: Acciones que puede realizar (verbos)Ejemplo: Objeto Perro - Acciones◦ Ladrar [“Guau Guau”]◦ Comer [“Chomp Chomp”]◦ Dormir [“Zzzzzzzz”], …

➢ Identidad: Pertenece a su clase y tiene un nombre único

¿Cómo modelar un objeto ¿Cómo modelar un objeto real en un programa?real en un programa?

➢ Las “características” son PROPIEDADES o datos.

➢ Las “acciones” son METODOS u operaciones.

Objeto Perro “Real”

Abstracción de la “clase” Perro en software

Perro

Nombre: “FIDO”Raza: “Chihuahua”Color: “Café”

Ladrar ( )Comer( )Dormir ( )

AbstracciónAbstracción➢ Se refiere a “quitar” propiedades y

métodos de un objeto y quedarse solo con aquellas que sean necesarias.

Objeto Perro “Real”

Propiedades:(Nombre,Raza,Color, etc.) Abstracción de Perro en unAcciones: programa. NOTE que en la (Ladrar,Comer,Dormir, etc.) abstracción de Perro se eliminaron los etc.

Perro

Nombre: “FIDO”Raza: “Chihuahua”Color: “Café”

Ladrar ( )Comer( )Dormir ( )

AbstracciónAbstracciónDenota las características esenciales de

un objeto, donde se capturan sus comportamientos.

Decidir qué es importante y qué noEnfoca y depende de lo que es importanteIgnora y no depende de lo que no es

importanteUsa el encapsulamiento para reforzar una

abstracción The purpose of abstraction is not to

be vague, but to create a new semantic level in which one can be absolutely precise.

Edsger Dijkstra

ClaseClaseEs una descripción de las características y

acciones para un tipo de objetos.

Una clase NO es un objeto. Es solouna plantilla o definición para crearobjetos.

Nombre de la Clase

atributo 1atributo 2…atributo n

método 1método 2…método m

ClaseClaseContiene todas las características

comunes de ese conjunto de objetosClase = Modelo = Plantilla = Esquema

= Descripción de la anatomía de los objetos.

A partir de una clase se pueden definir [crear] muchos objetos independientes con las mismas características.

Contiene las definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas

ObjetoObjetoUnidad que combina datos y funciones.

Datos = Propiedades = Atributos = Características

Funciones = Métodos = Procedimientos =Acciones

Un objeto es creado a partir de una clase.Los datos y funciones están

Encapsulados.Posee un nombre único (identificador).Un objeto es del tipo de una clase“Un objeto es la instancia de una clase”

Objeto & ClaseObjeto & Clase

Objeto & ClaseObjeto & Clase

Punto

trasladar(a, b)Distancia(p)

R x, y;Clase

Objetos

Ejemplo de ClaseEjemplo de Claseclase Automovil{

// propiedades o atributosString color;int velocidad;

// métodos públicosvoid asignaColor(String _color){

color = _color; }

int indicaColor(){return color;

}}

ObjetoObjetoInstancia de una

clase. IdentidadComportamientoEstado

Nombre del Objeto

atributo 1atributo 2…atributo n

método 1método 2…método m

Ejemplo de ObjetoEjemplo de Objetoclase Agencia{

public static void main (String args[]) {Automovil autoDeportivo = new Automovil();Automovil camioneta = new Automovil ();

autoDeportivo.asignaColor(“rojo”);camioneta.asignaColor(“azul”);System.out.println(“color de camioneta ” +

camioneta.indicaColor());System.out.println(“color del auto deportivo” +

autoDeportivo.indicaColor());}

}

HerenciaHerenciaEs la facilidad

mediante la cual la clase B hereda en ella cada uno de los atributos y operaciones de la clase A

Clase A

Clase B Clase C

Herencia Simple

Clase A

Clase B Clase C

Herencia Múltiple

HerenciaHerencia Una clase heredera proporciona los atributos y métodos de la clase heredada, y puede añadir otros nuevos.

La clase heredera puede modificar el comportamiento heredado (por ejemplo, redefiniendo algún método heredado) .

La herencia es transitiva.

Los objetos de una clase que hereda de otra pueden verse como objetos de estaúltima.

Figura Cerrada

Polígono Elipse

Pentágono Cuadrilátero Círculo

Rectángulo Rombo

HerenciaHerencia Una clase heredera proporciona los atributos y métodos de la clase heredada, y puede añadir otros nuevos.

La clase heredera puede modificar el comportamiento heredado (por ejemplo, redefiniendo algún método heredado) .

La herencia es transitiva.

Los objetos de una clase que hereda de otra pueden verse como objetos de estaúltima.

Polígono

Cuadrado

R perimetro()

R perimetro()

R lado;

Resultado = 4*lado

Resultado = Suma de las distancias entre los puntos

MensajeMensajeuna comunicación dirigida a un

objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

EventoEventoEs un suceso en el sistema (tal

como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.

Estado internoEstado internoes una variable que se declara

privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

EncapsulamientoEncapsulamientoSignifica reunir a todos los

elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción.

Esto permite aumentar la cohesión de los componentes del sistema.

EncapsulamientoEncapsulamientoPermite incluir en una sola

entidad información y operaciones que operan sobre esa información.

Permite:◦Componentes públicos [Accesibles,

Visibles].◦Componentes privados [No

accesibles, Ocultos].◦Restricción de accesos indebidos.

.

OcultaciónOcultación Cada objeto está aislado del exterior, es un

módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase.

El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado.

Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas.

Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción.

La aplicación entera se reduce a un agregado o rompecabezas de objetos.

PolimorfismoPolimorfismo comportamientos diferentes, asociados a objetos

distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando.

O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado.

Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

Recolección de basuraRecolección de basurala Recolección de basura o Garbage

Collector es la técnica por la cual el ambiente de Objetos se encarga de destruir automáticamente, y por tanto desasignar de la memoria, los Objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo Objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse manualmente.

Sistemas ConvencionalesSistemas Convencionales

ENTRADA SALIDA

DATOSPROCESOS

ESTRUCTURAS

Abstracción de ProcesosAbstracción de Procesos

leer rt = r*ra = t*3.1416muestra a

area funcion areaCirculo(radio){

t = r*r;a = t*3.1416regresa a;

}

Evolución de los lenguajesEvolución de los lenguajesProgramación EstructuradaProgramación lógicaProgramación funcionalProgramación Orientada a ObjetoProgramación Orientada a

agentes (en desarrolllo)

Caracaterísticas de JavaCaracaterísticas de Java

Java Java Java

class class class

Maquina virtual de Java

Hardware

Unix Windows solaris Linux

compilación

carga

ejecución

Requerimientos para usar Requerimientos para usar JavaJavaKid de desarrollo SDK de java

◦Incluye el compilador◦java.sun.com

API de Java (Application Program Interface)◦java.sun.com/API

Editor◦JCreator