Objeto
Un objeto es cualquier cosa que podamos ver, tocar, medir, etc. en otras palabras un objeto
es todo lo que existe en el universo (esto es en la vida real). Todo objeto tiene características
esenciales, que lo distinguen de otros independientemente por su clasificación, por ejemplo:
un celular Nokia tiene cámara, bluetooh, infrarrojo, color rojo, etc. Es como si tuviéramos
otro celular Sony sabemos que es celular, pero aquí es donde se identifican las dos clases.
Dos clases de celulares: Nokia y Sony.
Encapsulación
La Encapsulación ayuda a esconder la implementación tras una interface (o API).
El código encapsulado tiene 2 características:
Las variables de instancia se mantienen privadas (Normalmente con el modificador
private).
Los métodos getter y setter proveen acceso a estas variables de instancia.
ES-UN o IS-A se refiere a herencia o implementación.
ES-UN o IS-A es expresado con la palabra clave extends
ES-UN o IS-A es equivalente a las expresiones “hereda de”, y “es un subtipo de”.
TIENE-UN o HAS-A significa que una instancia de una clase “tiene una” referencia a la
instancia de otra clase u otra instancia de la misma clase.
Herencia
La herencia permite a una clase ser subclase o superclase, y así heredar variables y
métodos que sean publi o protected.
La herencia es un concepto clave que subyace a IS-A o ES-UN, polimorfismo,
sustitución (Override), sobrecarga (Overload), y cast.
Todas las clases (excepto la clase Object), son subclases del tipo Object y por lo tanto
heredan los métodos de Object.
Polimorfismo
Polimorfismo significa “Múltiples formas”.
Una variable de referencia es siempre única, de tipo inmutable, pero puede referirse a
un objeto de un subtipo.
Un objeto individual puede ser referido por una variable de referencia de otro tipo
diferente (Siempre que ellos sean del mismo tipo o supertipo).
El tipo de la variable de referencia (no el tipo del objeto), determina cual métodos
pueden ser llamados.
Las invocaciones de métodos polimorfos se aplican solo a métodos de instancia
sustituidos.
Abstracción
Por un lado nos permite referirnos a objetos para representar la realidad, describiendo
el problema en términos del problema en lugar de en términos de la solución. En un
programa de gestión comercial, tendremos el objeto cliente o el objeto factura, que no
son más que representaciones de otros objetos en el espacio del problema.
La clave de la programación orientada a objetos está en abstraer los métodos y los
datos comunes a un conjunto de objetos y agruparlos en una clase. Gracias a este nivel
de abstracción, añadir o eliminar un objeto nuevo supondrá muy poco esfuerzo.
Modularidad.
Es la capacidad que tiene un sistema para interactuar con varios módulos que se
controlan de una manera ordenada y precisa para alcanzar el objetivo esencial, cada
módulo es independientemente del otro pero pueden recibir información de todos
para cumplir las condiciones de la caja negra. Como por ejemplo la escuela es un
sistema, pero para que el alumno sea más rápido su inscripción se crean módulos,
servicios escolares, financieros, etc. Y trabajando en conjunto logran el objetivo que
en este caso es que el alumno pueda inscribirse.
Instanciación
La instanciación es un objeto construido respetando los planos de construcción de
una clase. En la instanciación no hay copia de métodos. Hay una copia parcial de los
campos: la lista queda en la clase y el objeto es quien posee los valores.
Diagrama de clases
Es una estructura
estática que muestran las clases del sistema y sus interrelaciones (incluyendo
herencia, agregación, asociación, etc.), son un pilar
básico del modelado UML, siendo utilizados tanto para mostrar el análisis y el diseño. Las clases se documentan con una
descripción de lo que hacen, sus métodos y sus atributos. Las relaciones entre
clases se documentan con una descripción de su propósito, sus objetos que
intervienen en la relación y su objeto.
Una clase define
los atributos y los métodos de una serie de objetos. Todos los objetos de esta
clase (instancias de esa clase) tienen el mismo comportamiento y el mismo
conjunto de atributos (cada objetos tiene el suyo propio).
En las clases
están representadas por rectángulos, con el nombre de la clase, y también
pueden mostrar atributos y operaciones de la clase en otros dos
«compartimentos» dentro del rectángulo.
Atributos
En UML, los
atributos se muestran al menos con su nombre, y también pueden mostrar su tipo,
valor inicial y otras propiedades. Los atributos también pueden ser mostrados
visualmente:
- + Indica atributos públicos
- # Indica atributos protegidos
- - Indica atributos privados
Las operaciones
(métodos) también se muestran al menos con su nombre, y pueden mostrar sus parámetros y valores de retorno. Las operaciones, al igual que los atributos,
se pueden mostrar visualmente:
- + Indica operaciones públicas
- # Indica operaciones protegidas
- - Indica operaciones privadas
Las clases pueden
tener plantillas, un valor usado para una clase no especificada o un tipo. El
tipo de plantilla se especifica cuando se inicia una clase (es decir cuando se
crea un objeto). Las plantillas existen en C++ y se introducirán en Java 1.5 con
el nombre de Genéricos.
Las clases se
puede relacionar o asociarse de diferentes maneras:
Herencia
(Especialización/Generalización):
Indica que una
subclase hereda los métodos y atributos especificados por una Clase, por ende
la Subclase además de poseer sus propios métodos y atributos, poseerá las
características y atributos visibles de la Clase (public y protected).
Agregación:
Para modelar objetos
complejos, n bastan los tipos de datos básicos que proveen los lenguajes:
enteros, reales y secuencias de caracteres. 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 comúnmente
llamada Composición (el Objeto base se construye 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 comúnmente llamada Agregación (el
objeto base utiliza al incluido para su funcionamiento).
Asociación:
La relación entre
clases conocida como Asociación, permite asociar objetos que colaboran entre sí.
Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un
objeto no depende del otro.
Dependencia o
Instanciación (uso):
Representa un tipo de
relación muy particular, en la que una clase es instanciada (su instanciación
es dependiente de otro objeto/clase). Se denota por una flecha punteada.
El uso más particular
de este tipo de relación es para denotar la dependencia que tiene una clase de
otra.
Interfaces
Las interfaces son
clases abstractas, lo que significa que no es posible crear instancias
directamente a partir de ellas. Pueden contener operaciones, pero no atributos.
Las clases pueden heredar de las interfaces (a través de una asociación de
realización) y de estos diagramas sí es posible crear instancias.
Los tipos de datos
son primitivas construidas normalmente en algunos lenguajes de programación.
Algunos ejemplos comunes son los enteros y los booleanos. No pueden tener
relación con clases, pero las clases sí pueden relacionarse con ellos.
Las enumeraciones
son simples listas de valores. Un ejemplo típico de esto sería una enumeración
de los días de la semana. Las opciones de una enumeración se llaman «literales
de enumeración». Al igual que los tipos de datos, no pueden relacionarse con
las clases, pero las clases sí pueden hacerlo con ellos.
Los paquetes, en
lenguajes de programación, representan un espacio de nombres en un diagrama se
emplean para representar partes del sistema que contienen más de una clase,
incluso cientos de ellas.




