P. 1
Conceptos Programación Orientada a Objetos

Conceptos Programación Orientada a Objetos

|Views: 21|Likes:
Publicado porIvan Flores

More info:

Published by: Ivan Flores on Oct 25, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

12/04/2012

pdf

text

original

Introducción (I

)
CONCEPTOS DE POO

• La programación orientada a objetos es un paradigma de programación que utiliza objetos que se comunican a través de mensajes para la solución de problemas. • Algunos lenguajes de programación orientados a objetos (orden cronológico)
• Simula: 1967 (antecedente de todos, por Dahl, Myhrhaug y Nygard) • Smalltalk: 1980 (lenguaje poo puro desarrollado en Xerox Palo Alto Reasearch Center Learning Research Group) • Eiffel: ‘80 (por Bertrand Meyer, orientado a objetos y con técnicas de verificación de programas y herramientas de ingeniería) • C++: 1983-1990 (por Bjarne Stroustrup) • Object Pascal: 1986 (esqueleto simplificado de lenguaje poo por desarrolladores de Apple Computer y Niklaus Wirth) • LISP/CLOS: 1988 (diseñado por un comité presidido por Daniel Bobrow a partir de la ACM Lisp and Fuctional Programming Conference de 1986) • Java: 1995, 1997, 1998 (objeto de este curso)
Programación Orientada a Objetos 1

Objetos (I)
CONCEPTOS DE POO

• Los objetos del mundo real comparten tres características:
• estado o estructura: por ejemplo, en un coche el nº de marchas, la velocidad actual, la marcha actual, etc... • comportamiento: por ejemplo, un coche puede arrancar, acelerar, frenar, cambiar marcha, etc.... • identidad: aquello que distingue a un objeto de todos los demás, por ejemplo, si la estructura de una persona es su nombre y edad, es posible que haya dos juanes de 20 años que no son la misma persona.

• Los objetos software también tienen esas características:
• estado: se almacena en un conjunto de variables. • comportamiento: se implementa con métodos. Un método es una función (subrutina, subprograma, procedimiento). • identidad: garantizada por los sistemas de poo.

Un objeto es una agrupación de variables y métodos distinguible de todos los demás (identidad propia) desde su creación.
Programación Orientada a Objetos 2

• representar conceptos abstractos.) se podrían representar mediante objetos software.. las figuras geométricas (polígonos.Objetos (II) CONCEPTOS DE POO • Los objetos software se utilizan para: • representar objetos del mundo real. • en una aplicación de dibujo. es habitual representar con objetos (llamados eventos) las acciones realizadas por el usuario (ratón y teclado). • en una aplicación de gestión de personal de una empresa. rectas. • en interfaces gráficas de usuario. Programación Orientada a Objetos 3 . los coches del mundo real se podrían representar mediante objetos software. las posibles estructuras candidatas (no se corresponden con ningún objeto real) podrían represantarse mediante objetos. • en un juego de carreras de coches.. los trabajadores de la empresa se podrían representar mediante objetos software.. • en un entorno de simulación e identificación de la estructura tridimensional de una proteína.

Objetos (III) CONCEPTOS DE POO • Representación visual de un objeto software. Variables Métodos (comportamiento) (estado) Programación Orientada a Objetos 4 .

Mensajes (I) CONCEPTOS DE POO • Una aplicación orientada a objetos se compone de múltiples objetos que se comunican mediante mensajes. el objeto A le envía un mensaje al objeto B. • Si un objeto A quiere que un objeto B ejecute uno de sus métodos. mensaje objeto A objeto B • Cada mensaje tiene tres componentes: • el objeto destinatario del mensaje • el nombre del método a ejecutar • los parámetros (si existen) del método Programación Orientada a Objetos 5 .

Mensajes (II) CONCEPTOS DE POO • Por ejemplo. Mensaje sin parámetros arrancar piloto coche Mensaje con parámetros cambiar marcha (2) piloto Programación Orientada a Objetos coche 6 . cada piloto se comunica con su coche. en un juego de ordenador de carreras de coches.

Una clase es un patrón o prototipo que define las variables y los métodos comunes a todos los objetos de un cierto tipo. un objeto concreto de una clase es una instancia de la clase. aviones. coches. ordenadores. lavadoras. etc) de manera que los objetos de la misma clase tienen la misma estructura (estado) y el mismo comportamiento. • Los objetos software también se pueden agrupar en clases utilizando un criterio similar: los objetos de la misma clase comparten estado y comportamiento.Clases (I) CONCEPTOS DE POO • Los objetos del mundo real se pueden agrupar en tipos (clases) (personas. Programación Orientada a Objetos 7 . • En terminología orientada a objetos. aunque el estado de dos objetos puede ser distinto.

se llaman variables de instancia.Clases (II) CONCEPTOS DE POO • Las variables en las que se almacena el estado de un objeto. Programación Orientada a Objetos 8 . • Los métodos que implementan el comportamiento de un objeto se llaman métodos de instancia.

Clases (III) CONCEPTOS DE POO • Por ejemplo. Cada instancia de la clase tiene su propia copia de todas las variables de instancia definidas en la clase. cambiar de marcha arrancar frenar Nº de marchas velocidad actual marcha actual acelerar Coche Después de crear la clase Coche se pueden crear los objetos de la clase. la clase Coche declara las variables de instancia necesarias para almacenar el Nº de marchas. acelerar. y la marcha actual. frenar y cambiar de marcha. La clase también declara y proporciona la implementación de los métodos de instancia que permiten arrancar. la velocidad actual. cambiar de marcha arrancar frenar Nº de marchas =5 velocidad actual =80 marcha actual =3 cambiar de marcha arrancar frenar Nº de marchas =4 velocidad actual =120 marcha actual = 4 acelerar acelerar coche 1 Programación Orientada a Objetos coche 2 9 .

• Por ejemplo. en una aplicación de facturación. • Si en una aplicación se quiere contabilizar el número de instancias que hay de una determinada clase. se puede utilizar una variable de clase. Programación Orientada a Objetos 10 . el tamaño por omisión y el tamaño máximo de cualquier ventana.Clases (IV) CONCEPTOS DE POO • Variables de clase: las clases. ya que este valor es común a todos los objetos de la clase Factura. la clase Factura puede tener una variable de clase con el IVA que se aplica a las facturas. la clase Ventana de una iterfaz gráfica puede declarar variables de clase para almacenara el número de ventanas visibles. Por ejemplo. y no sería eficiente que cada uno de los objetos de la clase tuviera una copia. que contienen información común para todas las instancias de la clase. Si un objeto modifica el valor de una variable de clase. también pueden definir variables de clase. esta modificación afecta a todos los objetos de la clase. además de definir las variables de instancia.

se necesita obligatoriamente que se cree un objeto de la clase que reciba el mensaje de ese método. • Para usar un método de instancia. Programación Orientada a Objetos 11 . que se realiza siempre a través de los objetos • Es importante señalar que para invocar un método de clase no es necesario haber creado ningún objeto que reciba como mensaje una invocación de ese método. ya que este valor tiene sentido en sí mismo y no está condicionado a la existencia de objetos de la clase. • Por ejemplo. y a los cuales se puede acceder directamente desde la clase en oposición al acceso a los métodos de instancia.Clases (V) CONCEPTOS DE POO • Métodos de clase: son métodos que afectan a la clase en sí. en la clase Factura se podrían tener métodos para consultar y modificar el valor del IVA aplicable a las facturas. por el contrario.

herencia y polimorfismo. Programación Orientada a Objetos 12 POLIMORFISMO ABSTRACCIÓN HERENCIA .Conceptos fundamentales del modelo de objetos CONCEPTOS DE POO MODELO DE OBJETOS ENCAPSULAMIENTO Hay cuatro conceptos fundamentales en el paradigma de orientación a objetos: abstracción. encapsulamiento.

• El objetivo del modelo: • determina tanto el grado de detalle como la información relevante. los antecedentes clínicos de una persona son irrlevantes en una aplicación de préstamo bibliotecario pero fundamentales en una aplicación hospitalaria de ayuda al diagnóstico de enfermedades. habrá una clase persona – Con el mismo grado de detalle de la aplicación de nóminas. es una herramienta en el proceso de creación del modelo a partir de un problema real que está determinada por los siguientes factores: • Identificación de clases: los conceptos que tienen entidad en sí mismos. se puden describir. habrá una clase plantilla pero no una clase persona.Abstracción CONCEPTOS DE POO • La abstracción consiste en extraer los aspectos esenciales de una entidad e ignorar sus propiedades accidentales. en ambas aplicaciones habrá una clase persona pero sólo la segunda tendrá variables miembro para antecedentes clínicos. comprender y analizar pueden abstraerse como una clase. – Aplicación de nóminas: necesita manipular la información de cada persona de manera independiente. • Ejemplos: – Aplicación de macroeconomía: los empleados de una empresa pueden no ser importantes como individuos porque sólo interese su comportamiento global como plantilla. no dependen de otros. Programación Orientada a Objetos 13 .

pero cómo lo consigue queda oculto o encapsulado en el interior de la clase. mientras que el encapsulamiento se centra en la implementación que da lugar a ese comportamiento” (Booch). sirve para separar la interfaz contractual de una abstracción y su implantación” (Booch) • Cada clase “firma un contrato con el exterior” comprometiéndose a exhibir un determinado comportamiento.Encapsulamiento (I) CONCEPTOS DE POO “El encapsulamiento es el proceso de almacenar en un mismo compartimento los elementos de una abstracción que constituyen su estructura y su comportamiento. “La abstracción y el encapsulamiento son conceptos complementarios: la abstracción se centra en el comportamiento observable de un objeto. Programación Orientada a Objetos 14 .

se podría cambiar la representación interna de los datos de la pila y sustituir el vector por una lista sin afectar a las aplicaciones que utilizan la clase Pila. • Internamente se utiliza un vector para almacenar los elementos de la pila. desapilar un elemento y consultar el estado de la pila (vacía o no vacía). apilar un elemento. • Esto es posible porque desde el exterior es invisible la implementación de la clase Pila. Programación Orientada a Objetos 15 . y permite crear una pila.Encapsulamiento (II) CONCEPTOS DE POO • Una de las grandes ventajas del encapsulamiento es que posibilita que la implementación de un objeto se pueda cambiar sin afectar a las aplicaciones que lo utilizan. • Ejemplo: • Supongamos que la clase Pila representa a pilas de números enteros. • Si se mantiene el comportamiento.

frenar y cambiar de marcha. se puede construir la subclase CocheCarreras a partir de Coche utilizando la herencia. y los métodos que permiten arrancar. la velocidad actual. de manera que la subclase hereda la estructura (estado) de la superclase a través de las variables. Programación Orientada a Objetos 16 . y hereda el comportamiento a través de los métodos. • Por ejemplo. y la marcha actual.Herencia (I) CONCEPTOS DE POO • La herencia es el mecanismo que permite definir una clase (subclase) a partir de otra clase (superclase). De esta manera. la clase CocheCarreras hereda las variables y los métodos de la clase Coche. si se define la superclase Coche con las variables para almacenar el Nº de marchas. acelerar.

y los métodos que permiten fijar la hora y fijar al fecha. El método de la superclase Figura que calcule el área del polígono deberá “redefinirse” en cada una de las subclases. • La clase RelojDespertador aumenta el comportamiento de la clase Reloj ya que es capaz de emitir una alarma a una hora previamente prefijada. otra para alamacenar el estado de la alarma (activada/desactivada) y los métodos que permiten fijara la hora de la alarma y activarla o desactivarla. • Se definen las subclases Triángulo y Pentágono • En cada una de ellas la fórmula matemática para el cálculo del área es diferente. • Se define la superclase Polígono con distintas variables y métodos. para ello.Herencia (II) CONCEPTOS DE POO • Habitualmente una subclase aumenta o redefine la estructura y el comportamiento de su superclase. • Por ejemplo. Programación Orientada a Objetos 17 • Por ejemplo. entre los cuales está el método que permite calcular el área del polígono. la clase RelojDespertador aumenta la estructura con una variable para almacenar la hora de la alarma. . • Se puede construir la subclase RelojDespertador a partir de Reloj utilizando la herencia. • Se define la superclase Reloj con variables para almacenar la hora y la fecha actuales.

• La subclase RelojDespertador de ejemplos anteriores aumenta la estructura y el comportamiento de la superclase Reloj. Programación Orientada a Objetos 18 . su redefinición o su aumento y redefinición. • La especialización consistirá en el aumento de la estructura y/o el comportamiento. Por ejemplo: • • • • Un coche de carreras “es-un” coche.Herencia (III) CONCEPTOS DE POO • Que una clase sea subclase de una superclase significa (semántica) que es un caso especial de la misma y por eso a esta relación entre clases se la conoce con el nombre “es-un”. Una nevera “es-un” electrodoméstico. • La subclases Triángulo y Pentágono redefinen el comportamiento de la superclase Polígono. Un triángulo “es-un” polígono. Un árbol binario “es-un” árbol. • La herencia genera una jerarquía de generalización/especialización en la que una subclase especializa el comportamiento o la estructura más general de su superclase.

• Por ejemplo. • Es fundamental señalar que la herencia no se limita a un número determinado de niveles por lo que todas los objetos de una aplicación heredarán de las superclases más altas de la jerarquía de las que hereden directa o indirectamente. Esta colisión de nombres se resuelve de distinta manera en los lenguajes orientados a objetos: – en Java no se permite la herencia múltiple. puede ocurrir que una subclase herede de dos superclases que tienen atributos o métodos con el mismo nombre. • Este tipo de herencia es conceptualmente correcta pero introduce ciertas complejidades en los lenguajes de programación. • Herencia múltiple: una subclase hereda de más de una superclase. Programación Orientada a Objetos 19 . – en C++ sí se permite pero utilizando calificación explícita.Herencia (IV) CONCEPTOS DE POO • Se pueden distinguir distintos tipos de herencia en cuanto al número de superclases de una subclase: • Herencia simple: una subclase hereda solamente de una superclase.

Programación Orientada a Objetos 20 . aparecen los siguientes conceptos relacionados con el momento en el que los nombres se ligan con sus tipos: • Ligadura (enlace) estática o temprana: se fijan los tipos de todas las variables y expresiones en tiempo de compilación. • Ligadura (enlace) dinámica o tardía: los tipos de las variables y expresiones no se conocen hasta el momento de la ejecución.Ligadura estática y dinámica CONCEPTOS DE POO • En los lenguajes de poo objeto de este curso.

• Esto sólo está permitido en poo cuando la variable que almacenará objetos de distintos tipos es de una clase más general.Polimorfismo (I) CONCEPTOS DE POO • Es la característica más potente de estos lenguajes que nace de la interacción de la herencia y el enlace dinámico. • Respecto al enlace dinámico: • Es importante señalar que esta técnica tiene interés cuando variables de un tipo pueden almacenar objetos de otros tipos. Programación Orientada a Objetos 21 .

• Supongamos que. • mi_poligono. durante la ejecución del programa. a mi_poligono se le asigna un objeto de la clase Triángulo.Polimorfismo (II) CONCEPTOS DE POO • Expliquemos ese concepto mediante un ejemplo: • Se define la superclase Polígono con el método área que permite calcular el área del polígono. puede declarar una variable de tipo Polígono. la variable mi_poligono puede almacenar objetos de estas dos últimas clases. cualquier mensaje que invoque el método area de mi_poligono invocará la versión del método implementada en Pentágono Programación Orientada a Objetos 22 . puede recibir mensajes de otros objetos. y en cada una de ellas se redefine el método área: hay distintas versiones del método área. la versión implementada en la clase Triángulo • Si posteriormente a mi_poligono se le asigna un objeto de tipo Pentágono. cualquier mensaje que invoque el método área de mi_poligono invocará en este instante. • Se definen las subclases Triángulo y Pentágono. supongamos que se llama mi_poligono. ya que “es un objeto”. • Como Polígono es una clase más general queTriángulo y Pentagono. • Un programa que utilice esta jerarquía de clases.

Existe una relación entre la clase Frase y la clase Párrafo. Por ejemplo: • Un empleado trabaja para una compañía. Existe una relación entre las clase Ventana y la clase Menú. Estas relaciones pueden distinguirse por su significado o semántica. Existe un relación entre la clase Empleado y la clase Compañía. Existe un relación entre la clase País y la clase Ciudad. • Una ventana tiene un menú. • Una frase pertenece a un párrafo. • Un país tiene muchas ciudades.Relaciones entre objetos (I) CONCEPTOS DE POO • Se puede modelar las relaciones que se identifiquen entre las clases. Programación Orientada a Objetos 23 .

• Con una única instancia de la clase Compañía se relacionan varias instancias de la clase Empleado. • Los países tienen una ciudad como capital • Con una única instancia de la clase País se relaciona una instancia de la clase Ciudad. • Las personas tiene acciones de las empresas. • Con una única instancia de la clase Ciudad se relaciona una instancia de la clase País. • Un empleado trabaja para una compañía. • Con una única instancia de la clase Empleado se relaciona una instancia de la clase Compañía (siempre y cuando un empleado solo pueda trabajar en una compañía). • Con una única instancia de la clase Empresa se relacionan varias instancias de la clase Persona.. • Con una única instancia de la clase Persona se relacionan varias instancias de la clase Compañía. Programación Orientada a Objetos 24 .Relaciones entre objetos (II) CONCEPTOS DE POO • Multiplicidad: especifica el número de instancias de una clase que pueden estar relacionadas con una única instancia de una clase asociada.

• Asociación • Es una relación que describe vínculos entre objetos. Un árbol binario “es-un” árbol. • Realmente la diferencia entre una relación de agregación y una de asociación es una cuestión de “preferencia” por parte del analista. • Un País tiene muchas Ciudades. • Una Cadena (comercio) tiene varios Locales. Un triángulo “es-un” polígono.Relaciones entre objetos (III) CONCEPTOS DE POO • Las relaciones entre los objetos se pueden clasificar de acuerdo a su semántica: • Generalización • • • • Relación de tipo “es-un” (herencia). Una nevera “es-un” electrodoméstico. Programación Orientada a Objetos 25 . • Un Cliente tiene una o más Cuentas (bancarias) • Agregación • Es una relación de tipo “todo-parte”.

Un Pedido tiene varias Lineas. • Dependencia • Es un aspecto semántico que se puede identificar en muchos tipos de relaciones y se refiere al hecho de que los cambios en unos objetos afectan a otros. Programación Orientada a Objetos 26 . El todo es responsable de la creación y de la destrucción de las partes. Una Ventana tiene una Barra de título y dos Scrollbar. Es similar a las relaciones de composición físicas. Una parte no puede pertenecer a dos composiciones al mismo tiempo. Una Clase tiene varios Atributos.Relaciones entre objetos (IV) CONCEPTOS DE POO • Composición • • • • • • • • • Es una relación de tipo “todo-parte” más fuerte que la agregación. Los tiempos de vida de las partes y el todo coinciden. Un Círculo está formado por muchos Puntos.

Relaciones entre objetos (V) CONCEPTOS DE POO • Variables miembro de una relación y clases de asociación: de forma similar a la manera en la que las variables miembro de una clase describen su estructura. puede resultar conveniente. por ejemplo. • En este caso. • A estas clases se las conoce como clases de asociación • Por ejemplo. • Es posible que. para la biblioteca. pueden existir dos clases Libro y Cliente que estén relacionadas mediante una asociación Préstamo. Fecha_inicio y Fecha_fin. • En el contexto de una biblioteca. definir una clase para contener esa estructura. hay ocasiones en las que existe cierta información relevante de una relación entre clases • Las relaciones pueden especificar variables miembro para contener esta información. Programación Orientada a Objetos 27 . • Puede ser conveniente definir para la relación Préstamo la clase Préstamo que tendrá las variables miembros necesarias. sea relevante tener constancia de la fecha de inicio y finalización del préstamo para poder establecer posibles sanciones por entregas retrasadas.

UML (I) CONCEPTOS DE POO • Es un lenguaje de modelado visual de propósito general que se utiliza para especificar. • Ha sido adoptado con generalidad en el ámbito del desarrollo de software orientado a objetos. • Algunos elementos: • • • • • • Clases Objetos Relaciones Multiplicidad Diagramas de clases Diagramas de objetos Programación Orientada a Objetos 28 . visualizar. construir y documentar los componentes de un sistema software.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->