[go: up one dir, main page]

0% encontró este documento útil (0 votos)
13 vistas33 páginas

Programación Orientada A Objetos I - Unidad 1 - A

Cargado por

yosseline.ortega
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas33 páginas

Programación Orientada A Objetos I - Unidad 1 - A

Cargado por

yosseline.ortega
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 33

Programación Orientada a

Objetos I
INTRODUCCIÓN

Desde los inicios de la computación, para que una computadora pueda


entender las instrucciones que le da el programador, estas deben estar
en código máquina (un lenguaje de primera generación), el cual para las
personas es complicado de desarrollar.

Los lenguajes de programación evolucionaron a ensamblador (segunda


generación), lenguajes de propósito general (tercera generación:
estructurados, lógicos, funcionales, orientados a objetos) y de propósito
específico (cuarta generación: bases de datos, graficación, gramáticas).

En esos tiempos, cada fabricante de hardware tenía su propia versión de


los lenguajes de programación populares. El lenguaje de programación
Java surge en la década de 1980.

Llamado originalmente Oak, fue desarrollado por James Gosling para la


empresa Sun Microsystems con la intención de programar dispositivos
electrónicos. Fue concebido como un lenguaje orientado a objetos,
multiplataforma, basado en C++, la versión orientada a objetos de C.
HISTORIA DEL LENGUAJE DE PROGRAMACIÓN JAVA

Java fue diseñado para cubrir algunas de las deficiencias de sus antecesores como el recolector de basura,
un mecanismo de limpieza y compactación de la memoria que deja de utilizarse para cerrar procesos en
la computadora.

Al hacer estas acciones de manera automática libera al programador de las tareas de limpieza del
desorden que pueden producir las omisiones de gestión de los recursos de la computadora.

La facilidad de generar un solo código y distribuirlo a través de un código intermedio que se interpreta en
múltiples plataformas a través de la Máquina Virtual de Java, así como haber adoptado una estrategia de
código abierto y ser un lenguaje de programación Orientado a Objetos desde sus inicios; han hecho de
Java un lenguaje muy popular, de código reutilizable, disponible en el ámbito académico formal y
utilizado para el desarrollo de aplicaciones de escritorio, servidores web empresariales y dispositivos
móviles.

Para que un programa pueda ejecutarse en una computadora necesita codificarse en un archivo de texto
(código fuente), “compilarlo” y convertirlo al código máquina que pueda ser ejecutado por el procesador
de la computadora.
HISTORIA DEL LENGUAJE DE PROGRAMACIÓN JAVA

Un compilador revisa todo el código para verificar si está bien construido el programa respecto al léxico y
a la sintaxis.

El léxico corresponde a las tókens (elementos de léxico) que puedes utilizar:

•Símbolos.
•Palabras reservadas.
•Reglas para construir identificadores.
•Reglas para construir números constantes.
•Reglas para construir constantes alfanuméricas.

¿Cuáles son las ventajas de un lenguaje orientado a objetos?

• Fomenta la reutilización y extensión del código.


• Permite crear sistemas más complejos.
• Relacionar el sistema al mundo real.
• Facilita la creación de programas visuales.
• Construcción de prototipos.
• Agiliza el desarrollo de software.
• Facilita el trabajo en equipo.
• Facilita el mantenimiento del software.
MÁQUINA VIRTUAL DE JAVA

Para poder ejecutar programas desarrollados en Java, debe instalarse el Entorno de Ejecución de Java
(JRE, Java Runtime Enviroment) que incluye el conjunto de librerías con la máquina virtual de Java y los
componentes que permiten la compilación y ejecución de los programas.

Esta instalación también incluye el Kit de Desarrollo de Java (JDK —Java Development Kit), que es un
conjunto de herramientas del lenguaje que permite el desarrollo de aplicaciones.

¿Cómo funciona?

Todos los programas en Java en código fuente tienen la extensión “.java”, al compilarse generan otro
archivo con extensión “.class” en código intermedio o “bytecode”, que puede ser distribuido e
interpretado por la Máquina Virtual de Java en distintos sistemas operativos, mecanismo por el cual los
programas se vuelven multiplataforma.
MÁQUINA VIRTUAL DE JAVA

Imagen basada en Amed, A. & Bhanu, P. (2016). Foundatios of Software Engineering. Boca Ranton. CRC Press. ISBN: 978-1-4987-3759-3.
Clasificación QA76.758 .A398 2015. 475 pp.
CARACTERÍSTICAS DE LA POO

Es un paradigma de programación que define los programas


en términos de “clases de objetos”, objetos que son entidades
que combinan estado (propiedades o datos), comportamiento
(procedimientos o métodos) e identidad (propiedad del
objeto que lo diferencia del resto).

En éste se manejan algunos conceptos básicos como son,


objetos, mensajes, métodos, clases, atributos y se
caracteriza por emplear la abstracción de datos, herencia,
encapsulamiento y polimorfismo.

Estas características deben ser estudiadas y comprendidas


para su aplicación en la programación orientada a objetos.
Objeto

Es un conjunto de variables (o datos) y métodos


(o funciones) relacionados entre sí.

Los objetos en programación se usan para


modelar objetos o entidades del mundo real (el
objeto hijo, madre, o farmacéutica, por ejemplo).

Un objeto es, por tanto, la representación en un


programa de un concepto, y contiene toda la
información necesaria para abstraerlo: datos que
describen sus atributos y operaciones que pueden
realizarse sobre los mismos.
Mensaje

Es la petición de un objeto a otro para solicitar la ejecución de alguno de sus métodos o para obtener
el valor de un atributo público.

En un mensaje siempre hay un receptor, lo cual no ocurre en una llamada a procedimiento.

Un mensaje consta de 3 partes:

1. Identidad del receptor: Nombre del objeto que


contiene el método a ejecutar.

2. Nombre del método a ejecutar: Solo los métodos


declarados públicos.

3. Lista de Parámetros que recibe el método (cero o más


parámetros)
Clase
Es un molde del que luego se pueden crear múltiples objetos, con similares
características.

Es una plantilla (molde), que define atributos (variables) y métodos (funciones).

Define los atributos y métodos comunes a los objetos de ese tipo, pero luego,
cada objeto tendrá sus propios valores y compartirán las mismas funciones.

La estructura de una clase es:

class [nombre de la clase] {


[atributos o variables de la clase]
[métodos o funciones de la clase]
[main]
}
ATRIBUTOS Y ESTADO
Un atributo es cada uno de los datos de una clase que la describen; no
incluyen los datos auxiliares utilizados para una implementación concreta.

El estado de un objeto es el conjunto de valores de sus atributos en un


instante dado.

MÉTODOS Y MENSAJES
Un método define una operación sobre un objeto. En general, realizan dos posibles acciones: consultar el estado del objeto o
modificarlo. Los métodos disponen de parámetros que permiten delimitar la acción del mismo.

Nos podemos encontrar con diversos tipos de métodos:

• Consultan o modifican un atributo, normalmente nos referenciaremos a ellos como: getters & setters.
• Realizan operaciones sobre el conjunto de atributos, calculando valores o realizando modificaciones.
• Inicializan los atributos al principio del ciclo de vida, o liberan los recursos al final del ciclo; nos referiremos a ellos como
constructores o destructores.

Un mensaje es la invocación de un método de un objeto. Podemos decir que un objeto lanza un mensaje (quien realiza la
invocación) y otro lo recibe (el que ejecuta el método).

Podemos rescribir que una clase es la descripción e implementación de un conjunto de atributos y métodos.
ABSTRACCIÓN
La abstracción es un procedimiento que permite la elección de una determinada entidad de la realidad, sus características
y funciones que desempeñan, la cual es representada mediante clases que contienen atributos y métodos de dicha clase.

En la programación orientada a objetos es fundamental abstraer los métodos y atributos comunes a un conjunto de
objetos, agrupados en una clase.

Un equipo de cómputo tiene características como marca, color, número de serie, cantidad de memoria instalada,
capacidad del disco duro, tecnología usada en el almacenamiento secundario, etc. Además, también pueden integrarse
otros objetos como tarjeta madre, procesador, disco duro, módulo de memoria y un monitor, entre otros

En esta abstracción estamos pensando en la funcionalidad del


equipo de cómputo y no como están construidos internamente los
componentes mencionados, sin embargo, para los diseñadores y
técnicos de equipos de cómputo son fundamentales.

Probablemente para un inventario no necesites modelar toda la


información.

La abstracción nos indica que sólo se incluirá el vocabulario o el


lenguaje específico, las características y el comportamiento que
estén relacionadas con el dominio del problema que se quiere
resolver. Solo debe modelarse lo indispensable.
ENCAPSULAMIENTO

En programación el encapsulamiento orienta a


objetos, se acostumbra a proteger la información o
el estado de los atributos para que no se pueda ver
o modificar la información del objeto sin el
mecanismo adecuado.

Para ello, se utilizan métodos para recuperar la


información (getters) y asegurar que la información
proporcionada sea consistente con el objeto; y a su
vez, poder asignar (setters) un nuevo valor y
verificar que no afecte la integridad del objeto.

Por ejemplo, nuestra clase Computadora quedaría


de la siguiente forma:
HERENCIA
La herencia nos permite reutilizar el código programado en cada clase “heredando” o extendiendo
las características de un objeto a sus “descendientes” o derivados.

Por ejemplo, cuando hablamos de una laptop o computadora portátil, sabemos que sigue siendo
una computadora y podemos tratarla como tal, pero probablemente podríamos agregar una
característica como la duración de la batería y a quién se le asignó, ya que no estaría en un aula.

En este caso, una laptop sigue siendo una computadora, tiene todos sus atributos y métodos, pero
agrega dos atributos y un método a la definición original, de lo que se conoce como superclase
(la que está arriba de la jerarquía en la relación general-específico).
POLIMORFISMO
El polimorfismo, en una colección de objetos con herencia, si las clases especializadas de una superclase
tienen un método con la misma definición o firma, reaccionarán de la manera adecuada cuando reciban
el mismo mensaje.

Por ejemplo, si tuviéramos una superclase FiguraGeometrica que se especializa en Círculo y Triángulo,
y si el programa supone que todos son figuras geométricas, al enviar el mensaje dibujar() a los elementos
de una colección los triángulos usarían una regla para dibujarse y los círculos utilizarían su compás para
hacer lo mismo.

Ambas son figuras geométricas, pero se dibujan de manera distinta.


ACOPLAMIENTO Y COHESIÓN
Uno de los objetivos más importantes del diseño orientado a objetos es conseguir una alta cohesión
entre clases y un bajo acoplamiento.

¿Qué es la cohesión?

La medida que indica si una clase tiene una función bien definida dentro del sistema. El objetivo es
enfocar de la forma más precisa posible el propósito de la clase. Cuanto más enfoquemos el propósito
de la clase, mayor será su cohesión.

Una prueba fácil de cohesión consiste en examinar una clase y decidir si todo su contenido está
directamente relacionado con el nombre de la clase y descrito por el mismo.

Una alta cohesión hace más fácil:

• Entender qué hace una clase o método.


• Usar nombres descriptivos.
• Reutilizar clases o métodos.
¿Qué es el acoplamiento?

El acoplamiento entre clases es una medida de la interconexión o dependencia entre esas clases.

El acoplamiento fuerte significa que las clases relacionadas necesitan saber detalles internos unas de otras, los
cambios se propagan por el sistema y el sistema es posiblemente más difícil de entender. Por ello deberemos
siempre intentar que nuestras clases tengan un acoplamiento bajo.

Cuantas menos cosas conozca la clase A sobre la clase B, menor será su acoplamiento.

Lo ideal es conseguir que la clase A sólo conozca de la clase B lo necesario para que pueda hacer uso de los
métodos de la clase B, pero no conozca nada acerca de cómo estos métodos o sus atributos están implementados.

Los atributos de una clase deberán ser privados y la única forma de acceder a ellos debe ser a través de los
métodos getter y setter.

Un bajo acoplamiento permite:

• Entender una clase sin leer otras.

• Cambiar una clase sin afectar a otras.

• Mejora la mantenibilidad del código.


Diagramas de clases con UML (lenguaje unificado de modelado)

UML son las siglas de “Unified Modeling Language” o “Lenguaje Unificado de Modelado”. Se trata de un estándar que se ha
adoptado a nivel internacional por numerosos organismos y empresas para crear esquemas, diagramas y documentación relativa a
los desarrollos de software (programas informáticos).

UML es un conjunto de herramientas, que permite modelar (analizar y diseñar) sistemas orientados a objetos.

UML no es un lenguaje de programación ni un método de desarrollo. No indica cómo trasladar los modelos de análisis al diseño y
de éste al código.
A continuación se describe el diagrama de clases que será utilizado para crear el modelo del código fuente de programas
orientados a objetos.
Diagrama de clases

• Un diagrama de clases representa las clases que serán utilizadas dentro del
sistema y las relaciones que existen entre ellas.
• Los diagramas de Clases por definición son estáticos, esto es, representan qué
partes interactúan entre sí, no cuando ocurre.
• Un diagrama de clases está compuesto por clases y relaciones.
• Las clases agrupan datos y métodos con sus respectivos niveles de ocultación,
mientras que las relaciones pueden ser: herencia para crear jerarquías de clases de
objetos, asociación entre distintas clases, composición (agregación estática) y
agregación dinámica de clases mediante objetos o instancias de otras clases.
Elementos del diagrama de clases

El componente CLASE:

Una clase agrupa datos y métodos de un conjunto de objetos de la realidad que comparten características esenciales y
comportamientos similares.

Una clase es considerada una plantilla para instanciar o crear objetos.

En UML, una clase se representa mediante un rectángulo con tres divisiones, tal como se ve en la figura, en la parte
superior se aprecia el nombre de la clase, en el intermedio se ubican los datos y en la parte inferior los métodos

Tanto a datos como a métodos es posible agregar el especificador de acceso para establecer el nivel de ocultamiento.
Los datos o atributos. Corresponden a las variables asociadas a un tipo de dato (int, double, char, etc), identificadas
en función de las características esenciales de objetos comunes de la realidad.

Los métodos son las operaciones que representan comportamientos de objetos comunes de la realidad. A través de
los métodos se manipulan los datos de la propia clase y es posible invocar a metódos de otros objetos (envío de
mensajes).

Los Especificadores de Acceso son los términos private (-), protected (#), package (por defecto sin símbolo) y public
(+), sirven para establecer el nivel de ocultamiento de los elementos de una clase.

• Private (-): los miembros con este especificador son visibles sólo para
métodos de la propia clase y clases internas.

• Protected (#): los datos y métodos con este especificador son visibles
para métodos de la propia clase, clases internas y clases derivadas.

• Package (ningún símbolo): los miembros con este especificador son


visibles en métodos de las clases que conforman el paquete.

• Public (+): el dato o método es visible para métodos de todas las clases
del programa o aplicación.
Ejemplo:

Una Cuenta de ahorros que posee como características: número de cuenta, saldo y cliente.

Y las operaciones:

• Depositar
• Retirar
• Transferir
• Ver Balance
• Métodos de lectura (get) y escritura (set)
• Constructor, lleva el mismo nombre de la clase

Un ejemplo del diseño asociado se muestra en la figura:


Relaciones entre clases

Las relaciones que existen en un diagrama de clases permiten definir las dependencias entre clases, es decir si una
clase es necesaria para la implementación de otra.

Las asociaciones entre dos clases se representan mediante una línea que las une. La línea puede tener una serie de
elementos gráficos que expresan características particulares de la asociación.

Las relaciones más importantes entre clases son:

• Dependencia
• Generalización
• Asociación
• Realización
Relaciones entre clases

Dependencia es una relación de uso, la cual establece que un cambio en la especificación de una cosa puede afectar
a otra que la utiliza, pero no necesariamente en el caso contrario. Se utilizan cuando es necesario denotar que una
clase utiliza a otra. Una relación de dependencia se representa como una línea punteada.

Generalización es una relación entre una clase general llamada superclase o padre y una clase más específica. La
relación de generalización se representa mediante un triángulo en el extremo de la relación que corresponde a la
clase más general.

Asociación es una relación estructural que especifica que los objetos de una clase están conectados a los objetos de
otra, se representa con una línea sólida que conecta dos clases.

Realización es una relación entre clasificadores en la cual un clasificador especifica un contrato que el otro se obliga
a cumplir. Gráficamente una realización se representa como una línea punteada con una flecha cerrada grande
apuntando al clasificador que especifica el contrato.
La Cardinalidad entre clases

Representa el grado o nivel de dependencia entre las clases que se relacionan.

El tipo de cardinalidad se registra en los dos extremos de la relación y estos pueden ser:

• Cero (0)
• Cero o Uno (0..1)
• Uno (1)
• Uno o muchos: (1..*)
• 0 o muchos: (0..*)
• Número fijo: m (m denota un número fijo).

La cardinalidad es aplicable sólo en las relaciones de asociación y agregación.

En la relación de herencia no se especifica cardinalidad debido a que es una relación uno a uno.
Asociaciones

Las asociaciones representan las relaciones más generales entre clases, es decir, las relaciones con menor
contenido semántico. Para UML una asociación va a describir un conjunto de vínculos entre las instancias de las
clases.

Las asociaciones pueden ser binarias (conectan dos clases) o n-arias (conectan n clases), aunque lo más normal en
un modelo es utilizar sólo relaciones binarias (en general, y sin entrar en detalles, se puede afirmar que una
relación n-aria puede modelarse mediante un conjunto finito de relaciones binarias).

La forma de representar las asociaciones binarias en UML es mediante una línea que conecta las dos clases. En
general, las asociaciones son bidireccionales, esto es, no tienen un sentido asociado.

Ejemplo:
Si tenemos la clase perro y persona las siguientes relaciones podrían darse:

Ejemplo de asociación

La cual muestra que una persona es propietaria de uno o varios perros pero estos son solo de esta persona.
Asociaciones
Ejemplo: Ejemplo:

Dirección la asociación entre clase Maestro y Alumno Cardinalidad entre clase Maestro y Alumno

1
1

Enseña> 1
*

<Aprende de 1

1…*
1
1…20

6
Asociaciones

Por ejemplo, si se tiene la siguiente relación:

Quiere decir que los alumnos se matriculan en los módulos, en concreto, que un alumno se puede matricular
en uno a más módulos y que un módulo puede tener ningún alumno, uno o varios.

O esta otra:

en la que un profesor puede impartir uno o varios módulos, mientras que un módulo es impartido sólo por
un profesor.
Agregación

La agregación es una asociación con unas connotaciones semánticas más definidas: la agregación es la relación
parte-de, que presenta a una entidad como un agregado de partes (en orientación a objeto, un objeto como
agregado de otros objetos).

Ejemplo:

Una empresa tiene clientes

Ejemplo de agregación
Composición

La composición implica que los componentes de un objeto sólo pueden pertenecer a un solo objeto agregado, de
forma que cuando el objeto agregado es destruido todas sus partes son destruidas también.

Ejemplo:

A una empresa la componen empleados.

Ejemplo de composición
Herencia

La herencia es la típica relación de generalización/especialización


entre clases.

En UML la herencia se representa mediante una flecha, cuya punta es


un triángulo vacío.

La flecha que representa a la herencia va orientada desde la subclase


a la superclase.

Cuando de una superclase se derivan varias subclases existen dos


notaciones diferentes, aunque totalmente equivalentes, para su
representación.

Ejemplo de herencia simple


Herencia múltiple

UML permite implementar la herencia múltiple cuando una clase hereda directamente de varias clases.

Ejemplo:

Un profesor emérito puede ser un profesor como también un conferenciante.

Ejemplo de herencia múltiple


Un ejemplo de diagrama de clase de un sistema de facturación se observa en la figura.

• La relación de herencia se observa entre: Vendedor – Persona y Cliente – Persona


• La relación de asociación entre: Vendedor – Factura y Producto – Items
• La relación de Agregación estática o Composición entre: Factura – Cliente
• La relación de Agregación dinámica entre Factura – Items.
Conclusión

El diagrama de clases pertenece a la categoría de diagramas de estructura de UML, este debe ser capaz de ofrecer los
mecanismos necesarios para capturar y modelar la abstracción de un sistema desde diferentes puntos de vista ya que
representa la definición estática del sistema.

Dentro de un diagrama de clases se pueden relacionar las clases con una asociación que define un vínculo que puede
darse entre ciertas clases, composición donde las clases son fundamentales para la implementación de otra clase,
agregación donde se utilizan clases que no son esenciales para su funcionamiento y la herencia que es la relación de
generalización que se utiliza para heredar características de una clase a otra.

Herramientas de Modelado UML


Existen varias, las más destacadas son: Propietarias o de costo: Open Source:

- Microsoft Visio - Argouml


- Rational Rose - Staruml
- Enterprise Architect - Poseidon
- Visual Paradigm

También podría gustarte