UNIDAD I.- Programacion Orientada a Objetos

Anuncio
UNIDAD I
PROGRAMACION ORIENTADA A OBJETOS
LSC. Natalia Rodríguez Castellón
Antecedentes
• Tradicionalmente, la programación fue hecha en una manera
secuencial o lineal, es decir una serie de pasos consecutivos con
estructuras consecutivas y bifurcaciones.
• Los lenguajes basados en esta forma de programación ofrecían
ventajas al principio, pero el problema ocurre cuando los sistemas
se vuelven complejos. Estos programas no ofrecen flexibilidad y el
mantener una gran cantidad de líneas de código en un sólo bloque
se vuelve una tarea complicada.
• Frente a esta dificultad aparecieron los lenguajes basados en la
programación estructurada. La idea principal de esta forma de
programación era separar las partes complejas del programa en
módulos o segmentos que sean ejecutados conforme se requieran.
Obteniendo un diseño modular que fue reemplazando la
programación lineal.
•
Entonces, vemos que la evolución que se fue dando en la
programación se orientaba siempre a ir descomponiendo más el
programa. Este tipo de descomposición conduce directamente a la
Programación orientada a objetos.
•
Pues la creciente tendencia de crear programas cada vez más grandes
y complejos llevó a los desarrolladores a crear una nueva forma de
programar que les permitiera crear sistemas de niveles empresariales y
con reglas de negocios muy complejas. Para estas necesidades ya no
bastaba la programación estructurada ni mucho menos la
programación lineal. Es así como aparece la Programación Orientada
a Objetos (POO).
•
La POO viene de la evolución de la programación estructurada;
básicamente la POO simplifica la programación con la nueva filosofía y
nuevos conceptos que tiene.
•
La POO se basa en dividir el programa en pequeñas unidades lógicas
de código. A estas pequeñas unidades lógicas de código se les llama
objetos. Los objetos son unidades independientes que se comunican
entre ellos mediante mensajes.
Características
Encapsulación
• Manera de ocultar los detalles de la representación interna de
un objeto presentando solo la interface para el usuario.
• El encapsulamiento consiste en unir en la Clase las
características y comportamientos, esto es, las variables y
métodos. Es tener todo esto en una sola entidad. El
encapsulamiento se logra gracias a la abstracción y el
ocultamiento.
• La ventaja del encapsulamiento es la facilidad para manejar
la complejidad, ya que tendremos a las Clases como cajas
negras donde sólo se conoce el comportamiento pero no los
detalles internos, y esto es conveniente porque nos interesará
conocer qué hace la Clase pero no será necesario saber
cómo lo hace.
Características….
Polimorfismo
• Indica la posibilidad de que un objeto tome varias formas diferentes.
Este es uno de los conceptos esenciales de una programación
orientada a objetos.
• En términos prácticos, el polimorfismo permite referirse a objetos de
clases diferentes mediante el mismo elemento de programa
(método) y realizar la misma operación de diferentes formas, según
sea el objeto que se referencia en ese momento. El polimorfismo se
relaciona con los métodos.
• Hay 3 tipos de Polimorfismo:
Polimorfismo de Sobrecarga
Polimorfismo Paramétrico
Polimorfismo de Inclusión o redefinición
Características….
•
•
•
Polimorfismo de Sobrecarga: Ocurre cuando los métodos del mismo
nombre existen, con funcionalidad similar, en clases que son
completamente independientes una de otra. Diferentes objetos tienen
métodos con el mismo nombre, por ejemplo: el método „encender‟ para el
objeto televisión, impresora, celular, auto, etc. Este tipo de polimorfismo nos
permite definir operadores cuyo comportamiento varía de acuerdo a los
parámetros que se les aplican. Por ejemplo: el operador „+‟, tiene diferente
comportamiento si se usa con números que cuando es usado con letras.
Polimorfismo Paramétrico: es la capacidad para definir varios métodos
utilizando el mismo nombre, pero usando parámetros diferentes. Se
conoce como sobrecarga de métodos.
Polimorfismo de Inclusión también llamado redefinición: cuando se
utiliza herencia, se puede definir un método sin importar el objeto
específico, sino el de la clase generalizada. Por ejemplo: en un juego de
ajedrez podemos tener el método movimiento, sin importar el objeto
específico que puede ser un rey, reina, caballo, torre, etc. Es decir, permite
que los métodos de los hijos puedan ser invocados mediante un mensaje
que se envía al padre.
Características….
Herencia
• Es la capacidad de un objeto (clase) para utilizar las estructuras y
los métodos existentes en antepasados o ascendentes. Es uno de
los conceptos más cruciales en la POO ya que permite la
reutilización de código desarrollado anteriormente.
• La herencia básicamente consiste en que una clase puede heredar
sus variables y métodos a varias subclases (la clase que hereda es
llamada superclase o clase padre). Esto significa que una subclase,
aparte de los atributos y métodos propios, tiene incorporados los
atributos y métodos heredados de la superclase.
Tipos de herencia
• Herencia simple: un tipo derivado se crea a partir de una única
clase base.
• Herencia múltiple: una clase tiene más de una ascendente
inmediato.
Características….
Superclase: Clase de la cual otra clase hereda.
Subclase: Clase que hereda de una o más clases. (subclase,
especialización de la superclase).
NO todos los lenguajes de programación orientada a objetos usan la
herencia múltiple.
Clase abstracta. Su comportamiento no esta totalmente definido.
sirven para captar las propiedades generales que posteriormente
son particularizadas en las subclases.
Clase Base. Clase que no tiene superclases.
Características….
Abstracción
• Caracterización de un objeto de acuerdo a las propiedades que nos
interesen en un instante de tiempo.
• Por ejemplo los automóviles, ¿Qué características podemos
abstraer de los automóviles? O lo que es lo mismo ¿Qué
características semejantes tienen todos los automóviles? Todos
tendrán una marca, un modelo, número de motor, peso, llantas,
puertas, ventanas, etc. Y en cuanto a su comportamiento todos los
automóviles podrán acelerar, frenar, retroceder, etc.
• En los lenguajes de programación orientada a objetos, el concepto
de Clase es la representación y el mecanismo por el cual se
gestionan las abstracciones.
Características….
Cohesión
• Es la interacción interna de un módulo: todos los elementos de un
módulo han de tener relación.
Acoplamiento
• Es la interacción entre módulos, y se refiere al grado de
dependencia que tienen dos módulos (un método, una clase, un
componente, etc.) para realizar algún cometido.
Sus propiedades deberían ser:
• Facilitar la sustitución de un módulo realizando pocos cambios en
los otros.
• Facilitar el seguimiento y aislamiento de un error (módulo
defectuoso).
• Cuando dos módulos son absolutamente independientes (cada una
puede hacer su trabajo sin contar para nada con la otra),
encontramos el grado más bajo de acoplamiento. Este debe ser el
objeto al programar.
objetos
• Un objeto del mundo real es cualquier cosa que vemos a nuestro
alrededor. En la POO se define como una entidad que contiene los
atributos que describen el estado de un objeto del mundo real y las
acciones que se asocian con dicho objeto.
OBJETO = DATOS (atributos) + OPERACIONES (métodos)
• Un objeto es un elemento independiente de un programa de
computadora, que representa un grupo asociado de características
y está diseñado para realizar tareas específicas. A los objetos
también se les conoce como instancias.
objetos
• Un objeto se compone por:
• Estado se compone de las propiedades estáticas de un objeto con
valores dinámicos asociados a ellas en un momento dado.
(variables de instancia)
•
Comportamiento es la forma en que actúa y reacciona el objeto,
expresado en términos de cambios de estado y envío de mensajes
a otros objetos. (métodos) (encender, acelerar, frenar, apagar)
• Identidad. Propiedad que distingue a un objeto de los demás.
clases
• Una clase es la descripción de un conjunto de objetos. Consta de
métodos y datos que resumen las características comunes de un
conjunto de objetos. Muestra el comportamiento general de un
grupo de objetos.
• Definición teórica: La clase es un modelo o prototipo que define
las variables y métodos comunes a todos los objetos de cierta
clase. También se puede decir que una clase es una plantilla
genérica para un conjunto de objetos de similares características.
• Un objeto es una instancia de una clase.
• Las clases son estáticas, forman parte del texto del programa y no
cambian durante su ejecución. Los objetos por el contrario son
totalmente dinámicos, se crean, cambian su estado y se destruyen.
Clases
• En UML, una clase es representada por un rectángulo que
posee tres divisiones:
• En donde:
– Superior: Contiene el nombre de la Clase
– Intermedio: Contiene los atributos (o variables de
instancia) que caracterizan a la Clase (pueden ser private,
protected o public).
– Inferior: Contiene los métodos u operaciones, los cuales
son la forma como interactúa el objeto con su entorno
(dependiendo de la visibilidad: private, protected o public).
Clases
• Ejemplo:
Una Cuenta Corriente que posee como característica:
– Balance
• Puede realizar las operaciones de:
– Depositar
– Girar
– y Balance
• El diseño asociado es:
Clases
• Atributos y Métodos:
– Atributos:
• Pueden ser de tres tipos, los que definen el grado de comunicación y
visibilidad de ellos con el entorno, estos son:
• public: Indica que el atributo será visible tanto dentro como fuera
de la clase, es decir, es accsesible desde todos lados.
• private: Indica que el atributo sólo será accesible desde dentro de
la clase (sólo sus métodos lo pueden accesar).
• protected : Indica que el atributo no será accesible desde fuera de
la clase, pero si podrá ser accesado por métodos de la clase
además de las subclases que se deriven.
Clases
– Métodos:
• Los métodos u operaciones de una clase son la forma en como ésta
interactúa con su entorno, éstos pueden tener las características:
• public: Indica que el método será visible tanto dentro como
fuera de la clase, es decir, es accsesible desde todos lados.
• private: Indica que el método sólo será accesible desde
dentro de la clase (sólo otros métodos de la clase lo pueden
accesar).
• protected: Indica que el método no será accesible desde
fuera de la clase, pero si podrá ser accesado por métodos de
la clase además de métodos de las subclases que se
deriven.
Relaciones entre clases
Las relaciones entre clases es como se pueden
interrelacionar dos o más clases (cada uno con
características
y
objetivos
diferentes).
Para
comprenderlo es necesario entender el concepto de
cardinalidad de relaciones: En UML, la cardinalidad de
las relaciones indica el grado y nivel de dependencia, se
anotan en cada extremo de la relación y éstas pueden
ser:
– uno o muchos: 1..* (1..n)
– 0 o muchos: 0..* (0..n)
– número fijo: m (m denota el número).
Relaciones entre clases
Dependencia o Instanciacion
• Es una relación de uso, es decir una clase usa a otra, que depende
de ella para su propósito. Con la dependencia mostramos que un
cambio en la clase utilizada puede afectar al funcionamiento de la
clase utilizadora, pero no al contrario.
• Se recomienda que una clase realice una única función. De manera
que las clases que deban realizar funciones complejas estarán
formadas a partir de una asociación de diversas pequeñas clases
en las que delegará cada funcionalidad en concreto.
Ejemplo:
un carro usa un motor
Generalizacion(Herencia)-Especializacion
“Es un tipo de”, “Es un”
Indica que una subclase hereda los métodos y atributos especificados
por una Super Clase, por ende la Subclase además de poseer sus
propios métodos y atributos, poseerá las características y atributos
visibles de la Super Clase (public y protected), ejemplo:
Desde el punto de vista
(de arriba-abajo) de la clase
ascendente (padre), se trata de
una generalización de las hijas
en el padre. Desde el punto de
vista de las (abajo-arriba) clases
descendientes (hijas), se trata
de una especialización de la
clase base.
Relaciones entre clases
• Agregación (herencia) “es-parte_de” o “tiene-un”
• Cuando se requiere componer objetos que son instancias de clases
definidas por el desarrollador de la aplicación, tenemos dos
posibilidades:
– Por Valor: Es un tipo de relación estática, en donde el tiempo de
vida del objeto incluido esta condicionado por el tiempo de vida
del que lo incluye. Este tipo de relación es comunmente llamada
Composición (el Objeto base se contruye a partir del objeto
incluido, es decir, es "parte/todo").
– Por Referencia: Es un tipo de relación dinámica, en donde el
tiempo de vida del objeto incluido es independiente del que lo
incluye. Este tipo de relación es comunmente llamada
Agregación (el objeto base utiliza al incluido para su
funcionamiento).
• En donde se destaca que:
• Un Almacen posee Clientes y Cuentas (los rombos van en el objeto
que posee las referencias).
• Cuando se destruye el Objeto Almacen también son destruidos los
objetos Cuentas, en cambio no son afectados los objetos Cliente.
• La composición (por Valor) se destaca por un rombo relleno.
• La agregación (por Referencia) se destaca por un rombo
transparente.
Relaciones entre clases
Asociación
“pertenece-a” , “esta-asociado-con”, “trabaja_para”, “emplea_a”
• Es una relación entre clases. Implica una dependencia semántica.
Se da cuando una clase usa a otra clase para realizar algo.
• El establecimiento de una asociación define los roles (papeles)
entre objetos de dos clases y sus cardinalidades ( multiplicidad ); es
decir, cuantas instancias (ejemplares) de cada clase pueden estar
implicadas en una asociación.
• Una asociación es, normalmente, bidireccional, lo que significa que
si un objeto se asocia con otros objetos, ambos objetos se conocen
entre si. Una asociación representa que objetos de dos clases
tienen un enlace entre ellos, lo que significa por ejemplo, que ellos
conocen sobre los otros, están conectados a, para cada x hay una y
Relaciones entre clases
La relación entre clases conocida como Asociación,
permite asociar objetos que colaboran entre si. Cabe
destacar que no es una relación fuerte, es decir, el
tiempo de vida de un objeto no depende del otro.
Ejemplo:
Un cliente puede tener asociadas muchas Ordenes
de Compra, en cambio una orden de compra solo
puede tener asociado un cliente.
metodos
Métodos
• Los métodos ( operaciones o servicios ) describen el
comportamiento asociado a un objeto. La ejecución de un método
puede cambiar el estado del objeto o dato local del objeto.
Por ejemplo un automóvil al “encenderse” cambia su estado
• Cada método tiene un nombre y un cuerpo que realiza la acción o
comportamiento asociado con el nombre del método.
• El cuerpo de un método consta de un bloque de código que ejecuta
la acción requerida. Todos los métodos que alteran o acceden a los
datos de un objeto se definen dentro de la clase. No se deben
modificar los datos ( atributos ) de los objetos directamente.
Mensajes, instancias
Un Mensaje
• Es una petición que se envía a un objeto para indicarle que realice
alguna acción. Permite la comunicación entre objetos ya que estos
realizan acciones cuando reciben mensajes.
• Esta técnica de enviar mensajes a objetos se denomina paso de
mensajes. Consiste en invocar un método.
Ej.
objeto. método ([parámetros]);
Instancias
• Una instancia se produce con la creación de un objeto
perteneciente a una clase (instanciar una clase), un objeto es una
instancia de una clase, el objeto recibe los atributos, propiedades y
métodos de la clase para ser usados dentro de un programa.
• Ejemplo :
Circulo miCirculo =new Circulo();
Descargar