Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2
El encapsulamiento corresponde a la organización de los elementos internos que componen
una clase, con el propósito de lograr una unidad modular integral, que contenga todos los
elementos estructurales y funcionales necesarios para administrar y gestionar la misma.
El encapsulamiento proporciona también un mecanismo de ocultamiento de datos, que
consiste en encerrar los elementos internos de los objetos y solo publicar un conjunto limitado
de accesos simples (interface) para el manejo del objeto.
3
El polimorfismo literalmente es la "cualidad de tener más de una forma" y se refiere al hecho
de que una misma operación pueda tener un comportamiento diferente con distintos objetos.
1.3 CLASES
En general, una clase es un concepto abstracto que se usa para representar una familia de
objetos con características y funciones comunes, por ejemplo: la clase mamífero, la clase
persona, la clase automóvil, la clase mesa, etc.
En POO, una clase es una especificación genérica de la estructura y del comportamiento de
un conjunto de objetos con características y funciones similares, que se representan mediante
atributos y métodos respectivamente.
Las clases son los elementos primarios de la POO y son implementados en la etapa de
codificación de los programas y posibilitan la creación de objetos durante la ejecución de los
programas.
Una clase se identifica con un nombre único, usualmente con la inicial en mayúscula y contiene
atributos y métodos implementados.
En Java, la declaración de la clase se realiza con la palabra reservada class, seguida por el
nombre de la clase, de acuerdo a la siguiente estructura:
Definición de paquete
Importación de bibliotecas;
public class NombreClase{
declaración de atributos;
declaración de métodos;
}
La definición de un paquete es opcional, y determina la ruta relativa de la unidad de
almacenamiento donde se guardará el archivo que contiene la clase.
4
La importación de bibliotecas es opcional, pero facilita al momento de reusar clases existentes
predefinidas o definidas por el usuario.
La declaración de los atributos puede incluir definiciones de variables de cualquier tipo de dato
y referencias de cualquier clase.
La declaración de métodos debe incluir la implementación completa de las mismas (con
algunas excepciones que se estudiarán más adelante).
Gráficamente una clase se representa mediante un rectángulo con tres subdivisiones,
correspondiente al nombre de la clase, lista de atributos y lista de métodos
Java tiene una biblioteca (library) con aproximadamente 5000 clases implementadas y
disponibles para ser usada en diferentes tipos de aplicaciones, las cuales son descritas en la
documentación de Java (Javadoc).
Por ejemplo, dos de las clases más usadas son la clase Math y la clase String, cuya
representación gráfica es la siguiente:
5
Algunas clases representan conjuntos de objetos concretos, como la clase Automóvil o clase
Persona, y otros representan objetos abstractos como la clase Color, la clase Math,
CuentaBancaria, la clase Horarios, etc.
1.4 LA ABSTRACCIÓN
La abstracción aplicada a la POO, consiste en la definición de clases con las características
(atributos) y comportamiento (métodos) de los objetos, de mayor interés para una aplicación
concreta, omitiendo los demás aspectos; de esta manera, la clase tendrá solo los elementos
esenciales y útiles de los objetos.
Por ejemplo, si se desea crear una clase para realizar operaciones matemáticas en el plano
cartesiano, será necesario crear la clase Punto, cuyos atributos básicos serán las coordenadas
x e y; se excluyen otras características como ser: tamaño o grosor del punto, color del punto,
etc. Sin embargo, en una aplicación gráfica, donde los puntos serán visibles, el tamaño, forma
y color de los puntos serán atributos importantes.
1.5 ATRIBUTOS
Los atributos son las propiedades de una clase que representan a las características de los
objetos de esa clase.
Todos los objetos de una misma clase presentan características comunes, por ejemplo,
algunas características las personas reales son: nombre, edad, sexo, peso, estatura, etc.;
éstas características constituyen, entonces, los atributos de la clase Persona.
Los atributos pueden ser constantes y/o variables de cualquier tipo y/o referencias a objetos
de cualquier clase.
Una clase puede contener 0 o más atributos, sin restricciones de número.
El formato de definición de un atributo es el siguiente:
[visibilidad] [static] tipo/clase identificadorAtributo;
Los elementos entre corchetes son opcionales y pueden ser omitidos.
Ejemplo 1: Definir la clase denominada Punto, que represente un punto del plano cartesiano,
con dos atributos correspondientes a la abscisa y a la ordenada.
6
1.6 MÉTODOS
Los métodos son las operaciones o funciones que pueden realizar los objetos de cierta clase
y se definen e implementan cuando se crea la misma.
Los métodos constituyen el medio para solicitar a un objeto que realice alguna operación o
ejecute algún proceso, lo que se conoce como “enviar un mensaje”. Los diferentes objetos de
un programa interactúan entre sí mediante el envío de mensajes.
En Java, la estructura general de un método es la siguiente:
[visibilidad] [static] tipoRetorno nombreMetodo([lista parámetros]) [throws Excepciones] {
Instrucciones;
[return valor;]
}
El nombre del método debe ser único y su elección debe seguir las mismas reglas de la
nominación de elementos en Java.
La lista de parámetros describe el tipo o clase de cada dato que se pasa al método, seguido
por el nombre de variable o referencia de los argumentos.
El tipo de retorno del método es obligatorio y determina el tipo de dato del valor devuelto o
clase de la referencia a ser devuelto por el método. Cuando el método no devuelve ningún
valor el tipo de retorno debe ser void.
Cuando un método devuelve un valor o referencia, se emplea en el bloque de código la palabra
reservada: return, seguido por el elemento a ser devuelto.
1.7 CONSTRUCTORES
Un método muy importante de las clases se denomina: constructor, que es un método que
Java lo proporciona por defecto, el cual se crea implícitamente (no es visible), lleva el nombre
de la clase, es público, carece de argumentos y tiene un bloque de código vació.
El método constructor se usa toda vez que se crea un objeto.
Ejemplo 2: Crear la clase Punto con los atributos correspondientes a las coordenadas de un
punto en el plano cartesiano y el método constructor por defecto.
7
1.8 SOBRECARGA DE MÉTODOS
La sobrecarga de métodos permite definir dos o más métodos con el mismo nombre o
identificador, pero con diferentes tipos y/o número de parámetros; esto permite realizar
diferentes formas de usar el mismo método, otorgando mayor flexibilidad a la clase que los
contiene.
En el caso del método constructor, es usual sobrecargar este método para añadir código a ser
ejecutado durante la instanciación del objeto.
Ejemplo 3: Crear la clase Punto con un par de métodos constructores sobrecargados y los
métodos módulo y ángulo, que devuelva la distancia del origen al punto y el ángulo del módulo.
public Punto() {
x = 0;
y = 0;
}
public Punto(double x, double y) {
this.x = x;
this.y = y;
}
public double modulo() {
return Math.sqrt(x * x + y * y);
}
public double angulo() {
return Math.atan2(x, y);
}
}
8
Ejemplo 4: Escribir un programa que instancie un objeto y acceda a un atributo y un método
del mismo mediante la palabra: this.
public class Ejemplo {
int variable = 10;
1.10 PAQUETES
package rutaRelativa;
La rutaRelativa es una secuencia de nombres separados por puntos, cada nombre representa
una carpeta y cada punto indica que dentro de la carpeta existe una subcarpeta con el nombre
que sigue. Por ejemplo, la especificación java.util.Scanner; indica que existe una carpeta
accesible denominada: java, dentro de la cual se encuentra otra carpeta de nombre: útil y
dentro de ella existe el archivo denominado: Scanner.
Ejemplo 5: Crear un proyecto Java y definir la clase Punto en los tres siguientes paquetes:
paquete por defecto, Paquete1, Paquete2, Paquete1.Subpaquete y usarlos desde el método
principal.
10
Ejemplo 6: Definir la clase Punto, añadiendo constructores, modificadores de acceso y
métodos geter y seter.
public Punto() {
x = 0;
y = 0;
}
public Punto(double x, double y) {
this.x = x;
this.y = y;
}
public double modulo() {
return Math.sqrt(x * x + y * y);
}
public double angulo() {
return Math.atan2(x, y);
}
public double getX() {
return this.x;
}
public void setX(double x) {
this.x=x;
}
public double getY() {
return this.y;
}
public void setY(double y) {
this.y=y;
}
}
11
1.12 OBJETOS
Un objeto es una instancia o un ejemplar particular de una clase, que tiene sus propios datos
que lo distingue de otros objetos de la misma clase y responde al conjunto de operaciones o
métodos comunes definidos en la clase. Por ejemplo, al conjunto de los universitarios de la
UAJMS podría representarse con la clase Universitario, y cada estudiante en particular
correspondería a una instancia u objeto de esa clase.
Todo objeto debe necesariamente debe pertenecer a una clase, por lo tanto, primero se define
la clase y después se pueden crear los objetos como instancias de esa clase. En consecuencia,
no puede existir un objeto sin que exista la clase correspondiente.
A diferencia de las clases, los objetos ocupan un tamaño de memoria principal en función a la
cantidad y tipos de los atributos que contiene.
Todos los objetos de una misma clase tienen los mismos atributos de la clase (aunque
generalmente tienen valores diferentes); los valores de cada objeto determinan su estado, lo
que los distingue de los demás objetos de la misma clase.
El estado de un objeto puede cambiar según la ejecución de los programas, lo cual se logra
mediante el cambio de los valores de sus atributos.
Todos los objetos de una misma clase comparten el mismo conjunto de métodos definidos en
esa clase.
Los programas, aplicaciones y sistemas se construyen en base a objetos que interactúan o
colaboran entre sí; cada objeto cumple un rol o función específico en el contexto del programa
o de la aplicación.
Un objeto puede representar cualquier tipo de entidad física o abstracta, real o imaginario, de
forma que puede modelar infinidad de elementos de la realidad o concebidos por el hombre.
La creación o instanciación de un objeto generalmente se realiza con la palabra reservada new
y el uso de un método constructor, de la forma:
nombreClase nombreObjeto;
nombreObjeto = new metodoConstructor();
La primera instrucción crea una referencia a un objeto.
La segunda instrucción crea el objeto con la palabra reservada: new y el uso del método
constructor, y luego el objeto creado es apuntado por la referencia especificada.
Es muy usual que ambas instrucciones se fusionen en una sola línea, de la forma:
nombreClase nombreObjeto = new metodoConstructor();
Ejemplo 7: Escribir un programa que use la clase Punto, instancie dos objetos, les asigne
valores e imprima sus valores.
public class Principal {
public static void main(String[] args) {
12
Punto p1=new Punto();
p1.setX(2.35);
p1.setY(-5.35);
Punto p2=new Punto(-3.2, 7.35);
System.out.println("Punto 1: ("+p1.getX()+", "+p1.getY()+")");
System.out.println("Punto 2: ("+p2.getX()+", "+p2.getY()+")");
}
}
En el ejemplo anterior, tanto p1 como p2 son los identificadores de referencias que pueden
apuntar a los objetos instanciados; sin embargo, ambas referencias son completamente
independientes de los objetos y tienen la capacidad de apuntar a cualquier objeto de la clase
Punto o inclusive a ningún objeto, lo que se representa con la palabra reservada: null.
Ejemplo 8: Escribir un programa que instancie dos objetos de la clase Punto, les asigne
valores iniciales, los imprima, luego hacer que p1 apunte a p2, los imprima, y por último, asignar
a p2 el valor null y los imprima.
public class Principal {
public static void main(String[] args) {
Punto p1=new Punto();
p1.setX(2.35);
p1.setY(-5.35);
Punto p2=new Punto(-3.2, 7.35);
System.out.println("Punto 1: ("+p1.getX()+", "+p1.getY()+")");
System.out.println("Punto 2: ("+p2.getX()+", "+p2.getY()+")");
System.out.println();
p2=p1;
System.out.println("Punto 1: ("+p1.getX()+", "+p1.getY()+")");
System.out.println("Punto 2: ("+p2.getX()+", "+p2.getY()+")");
System.out.println();
p2=null;
System.out.println("Punto 1: ("+p1.getX()+", "+p1.getY()+")");
System.out.println("Punto 2: ("+p2.getX()+", "+p2.getY()+")");
}
}
13
Ejemplo 9: Agregar a la clase Punto los métodos: reset(), imprimir(punto), imprimir(),
desplazar(dx, dy), distancia(punto1, punto2), distancia(punto), suma(punto1, punto2),
suma(punto) y escribir una clase principal que haga uso de los mismos
public class Punto {
private double x, y;
public Punto() {
x = 0;
y = 0;
}
public Punto(double x, double y) {
this.x = x;
this.y = y;
}
public double modulo() {
return Math.sqrt(x * x + y * y);
}
public double angulo() {
return Math.atan2(x, y);
}
public double getX() {
return this.x;
}
public void setX(double x) {
this.x=x;
}
public double getY() {
return this.y;
}
public void setY(double y) {
this.y=y;
}
public void reset() {
this.x=0;
this.y=0;
}
public void imprimir(Punto p) {
System.out.println("("+p.x+","+p. y+")");
}
public void imprimir() {
System.out.println("("+this.x+","+this.y+")");
}
15
1.13 ATRIBUTOS DE CLASE Y DE INSTANCIA
En general, los atributos corresponden a las variables y/o referencias de los objetos, sin
embargo, ocasionalmente un atributo puede no pertenecer a ningún objeto en particular, sino
a la clase; por ello, en Java, se pueden distinguir dos tipos de atributos:
Atributos de clase
Atributos de instancia.
Un atributo de clase es aquel que pertenece a la clase, la cual se define con la palabra
reservada static; puede ser gestionado directamente desde algún método de la clase, por lo
que no se requiere ningún objeto para usarlo, sin embargo, si existen objetos declarados de
esa clase, éstos pueden acceder y gestionar al atributo de clase, siendo su valor común para
todos los objetos.
Ejemplo 10: Agregar a la clase Punto el atributo de clase denominado: contadorDePuntos,
que contenga el número de puntos que se han instanciado, modificar los métodos
constructores incrementando dicho atributo cada vez que se instancie un objeto y escribir un
programa principal para imprimir este valor cada vez que se crea un objeto.
public class Punto {
private double x, y;
public static int contadorDePuntos=0;
…
}
public Punto() {
x = 0;
y = 0;
contadorDePuntos++;
}
16
}
}
Un atributo de instancia es aquel que pertenece a cada objeto en particular y tiene un valor
específico para cada instancia de la clase que determina el estado del mismo. En el ejemplo
anterior, los valores de las coordenadas X y Y son exclusivos de cada objeto; es decir cada
objeto o instancia tiene sus propias coordenadas.
18
1.15 HERENCIA
La herencia es un mecanismo de la POO que permite que una o más clases hereden la
estructura y funcionalidad de otra clase. La clase de la que se hereda se denomina superclase
clase antecesora o padre, mientras que cada clase heredera se denomina subclase, clase
extendida, derivada o hija.
La subclase extiende la estructura y funcionalidad de la superclase, heredando todos los
atributos y métodos de la misma; además la subclase puede redefinir los elementos heredados
y también puede agregar nuevos atributos y/o métodos.
La herencia está fuertemente influenciada por el principio de reutilización, lo que permite que
la subclase reutilice los atributos y métodos de la superclase.
En la programación en general, se presentan dos tipos de herencia:
Herencia simple
Herencia múltiple
La herencia simple consiste en que una clase solo puede heredar de una sola superclase.
La herencia múltiple consiste en que una clase puede heredar de una o más superclases.
Java solo permite la herencia simple, que consiste en la herencia de una sola superclase,
aunque puede lograrse un equivalente a la herencia múltiple mediante las interfaces.
Java está formado por miles de clases, organizadas en una estructura de tipo árbol; todas
ellas, incluso las implementadas por los usuarios, heredan directa o indirectamente de una
sola clase, denominada Object, que se constituye en la clase raíz de la estructura jerárquica.
19
La herencia, en Java, se implementa agregando a la definición de una clase la palabra extends
seguido por el nombre de la superclase.
Ejemplo 13: Escribir la clase Persona con los atributos nombre y ci con los métodos
apropiados, y luego la clase Estudiante con el atributo RU, que herede de Persona.
23
p.setNombre("Juan");
q.setNombre("Juan");
Estudiante e=new Estudiante("Juan", "23", 234);
if(p.equals(q)) System.out.println("si");
else System.out.println("no");
if(e.equals(p)) System.out.println("si");
else System.out.println("no");
}
}
Para evitar que un método sea redefinido en la subclase, se debe anteponer la palabra final a
la cabecera de su definición.
Para evitar que una clase pueda ser heredada, se antepone la palabra final a la cabecera de
su definición. Por ejemplo, las clases Math y String son clases no heredables.
24
1.17 POLIMORFISMO
El polimorfismo es una característica de la POO que consiste en la definición de clases distintas
(semejantes) que tienen métodos idénticos, pero con comportamientos distintos.
El principio del polimorfismo radica en que una superclase puede referenciar (apunta) a objetos
o instancias de sus subclases, por ejemplo:
Ejemplo 19:
public class principal {
25
Ejemplo 21:
import java.util.LinkedList;
public class pruebita2 {
public static void main(String[] args) {
LinkedList<Persona> listita=new LinkedList<Persona>();
Persona emp1= new Estudiante("Pedro", "3333", 1234);
Persona emp2=new Administrativo("Juan", "1234", 10);
Persona emp3=new Docente("María", "2222", 15);
listita.add(emp1);
listita.add(emp2);
listita.add(emp3);
for(int i=0; i<listita.size(); i++)
System.out.println(listita.get(i).toString());
}
}
26
public abstract class Persona{
String nombre;
String ci;
public void setNombre(String nombre){
this.nombre=nombre;
}
public String getNombre(){
return this.nombre;
}
public void setCi(String ci){
this.ci=ci;
}
public String getCi(){
return this.ci;
}
abstract public String toString();
}
Ejemplo 23: Implementar la siguiente estructura de clases
28
int salario=5000;
return salario;
}
}
1.19 INTERFACES
Una interface es una clase especial que define únicamente las cabeceras de los métodos, por
tanto, al igual que los métodos abstractos, no contienen código. En consecuencia, una
interface puede considerarse una clase abstracta pura porque no implementa ninguno de sus
métodos.
A diferencia de las clases abstractas, las interfaces no permiten la herencia, en su lugar, las
clases pueden implementar una o varias interfaces, lo que puede verse como un mecanismo
similar a la herencia múltiple, lo que constituye una ventaja.
La clase que implementa una interface está obligada a implementar todos los métodos de la
interface.
Conceptualmente, una interface es similar a un contrato o convenio que las clases que la
implementan deben respetar.
La declaración de una interface se realiza con la palabra reservada interface, en lugar de class,
y las clases que la implementan agregan, a la declaración de la clase, la palabra reservada
implements seguido por el nombre/s de la/s interface/s.
Ejemplo 24: Escribir una interface de nombre Materia, que tenga los métodos:
asignarMateria(materia), eliminarMateria(i) y getMateria(i), y modificar la clase Docente para
que implemente la interface Materia, de forma que se le pueda asignar y eliminar materias.
public interface Materia{
public void asignarMateria(String materia);
public void eliminarMateria(int i);
public String getMateria(int i);
}
import java.util.Vector;
public class Docente extends Empleado implements Materia{
Vector materias=new Vector();
public Vector getMaterias(){
return materias;
}
public void setMaterias(Vector materias){
this.materias=materias;
}
public Docente(String nombre, String ci, int antiguedad){
super(nombre, ci, antiguedad);
}
public String toString(){
String datos=super.toString()+"; Salario: "+calcularSalario();
if(materias.size()!=0){
29
for(int i=0; i<materias.size(); i++) datos=datos+"\n Mat("+(i+1)+"):
"+materias.get(i);
}
return datos;
}
public int calcularSalario(){
int salario=5000;
return salario;
}
public void asignarMateria(String materia){
materias.add(materia);
}
public String getMateria(int i){
return (String) materias.get(i);
}
public void eliminarMateria(int i){
materias.remove(i);
}
}
1.21 DEPENDENCIA
La dependencia es la relación más básica, débil y transitoria entre dos clases y se presenta
cuando una clase eventualmente usa algún servicio de otra clase; el servicio puede ser algún
atributo o método.
En UML (Unified Modeling Language) o lenguaje de modelado para la representación gráfica
de sistemas de software, la dependencia se representa mediante una línea discontinua con
una flecha hacia la clase que se usa, como se muestra en la siguiente figura:
30
En esta representación, la ClaseA usa a la ClaseB, por lo cual la ClaseA depende de la ClaseB,
esto significa que algún cambio en la ClaseB, podría afectar a la ClaseA. Por otra parte, la
ClaseB no tiene dependencia de la ClaseA.
Dado que la relación es débil, la implementación en Java se realiza pasando a la ClaseB por
argumentos a algún método de la ClaseA o bien que la ClaseA instancie a la ClaseB dentro de
alguno de sus métodos para que tenga una existencia temporal.
Ejemplo 25: Escribir un programa que conste de las clases Principal, Ecuacion y las clases
complementarias, que permita resolver la ecuación cuadrática con coeficientes enteros.
import java.util.Scanner;
1.22 ASOCIACIÓN
La asociación establece una relación fuerte o estructural entre clases; se representa mediante
una línea continua que une las clases relacionadas y opcionalmente un nombre de la relación.
La asociación se identifica cuando al emplear el término “usa”, la relación entre dos clases
tiene sentido, por ejemplo: “un chofer usa un vehículo”.
Es importante identificar la asociación con un nombre que describa la acción de una clase en
relación a la otra. Por ejemplo, la asociación entre las clases Chofer y Vehiculo se podría
representar como:
32
Las asociaciones tienen atributos de multiplicidad, que establece la cantidad de objetos destino
a los que el objeto de origen se puede relacionar, expresado mediante una notación numérica
en el extremo destino de la relación, de acuerdo a la siguiente tabla:
Multiplicidad Significado
1 uno y sólo uno
* muchos
0..1 cero o uno
0..* cero o muchos
1..* uno o muchos
N..M desde N hasta M
Dos tipos de asociaciones especiales, que establecen una relación: Todo / Parte, que en
conjunto colaboran a un objetivo común, son:
Agregación
Composición
1.23 LA AGREGACIÓN
La agregación es un tipo de asociación en la que las partes tienen una existencia y ciclo de
vida independientes; esto significa que la eliminación de la clase que representa el todo no
destruye a la parte.
33
La agregación se representa con una línea continua y un rombo vacío en el extremo de la clase
que representa el todo. En la siguiente figura, la ClaseA constituye el todo, mientras que la
ClaseB constituye la parte.
Para fines de implementación, la instancia de las parte (instancias de la ClaseB) se pasa por
parámetros a uno o más métodos de la clase todo (ClaseA), de forma que, al eliminar la
instancia contenedora (instancia de ClaseA), no se elimina la instancia agregada (instancias
de ClaseB).
Ejemplo 27: Escribir un programa que defina las clases Materia, Docente, Universitario y
Curso, en un contexto similar al sistema Tariquia, considerando que Materia está conformado
por: Docente, Universitario, Curso, entre otros.
import java.util.LinkedList;
import java.util.List;
public Materia() {
nombre = null;
sigla = null;
docente = null;
34
universitario = new LinkedList();
curso = null;
}
public Materia(String nombre, String sigla) {
this.nombre = nombre;
this.sigla = sigla;
this.docente=null;
universitario = new LinkedList();
this.curso=null;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getNombre() {
return nombre;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
public String getSigla() {
return sigla;
}
public void setDocente(Docente docente) {
this.docente=docente;
}
public Docente getDocente() {
return docente;
}
public void setUniversitario(List universitario) {
this.universitario = universitario;
}
public List getUniversitario() {
return universitario;
}
public void setCurso(Curso curso) {
this.curso = curso;
}
public Curso getCurso() {
return curso;
}
public boolean agregarUniversitario(Universitario univ) {
if(!universitario.contains(univ)) {
universitario.add(univ);
return true;
} else return false;
}
public boolean removerUniversitario(Universitario univ){
if(universitario.contains(univ)) {
35
universitario.remove(univ);
return true;
}else return false;
}
}
1.24 LA COMPOSICIÓN
La composición es un tipo de asociación fuerte entre un todo y la parte que lo compone; en
este caso la parte no tienen existencia independiente, sino ambas clases comparten el ciclo
de vida del todo, de forma que, si se elimina el todo, también se elimina la parte.
La composición se representa con una línea continua y un rombo relleno (negro) en el extremo
de la clase que representa el todo.
import java.util.Date;
36
import java.util.LinkedList;
import java.util.List;
37
public class ProgramaAnalitico {
String nombrePrograma;
String contenido;
import java.util.Date;
39
public void setProgramaAnalitico(String nombrePrograma, String contenido) {
this.programa = new ProgramaAnalitico(nombrePrograma, contenido);
}
1.25 GENERALIZACIÓN/ESPECIALIZACIÓN
Esta relación de clases está basada en la característica de herencia de la POO; establece una
relación jerárquica entre una clase general, denominada superclase y una o más clases
específicas (subclases), que contienen las características y el comportamiento de la
superclase, además de propiedades y/o comportamiento específico de las subclases.
La generalización/especialización se representa con una línea que consta de un triángulo en
el extremo de la superclase, como muestra la siguiente figura:
40
El nombre de generalización o especialización se aplica de acuerdo orden del diseño realizado;
si primero se define la superclase y luego las subclases, se denomina: especialización; en
contraparte, si primero se definen las subclases para luego pasar a la superclase, este
procedimiento se denomina: generalización.
1.26 APLICACIONES
Actualmente, la POO es el principal paradigma de desarrollo de software y se aplica en la
mayoría de los proyectos de software en todos los ámbitos.
La POO es muy flexible al momento del diseño de las clases, sus propiedades y relaciones,
por ello un mismo proyecto puede tener diferentes diseños, tener diferentes implementaciones
y ser completamente funcionales, sin embargo, las diferencias pueden distinguir características
de software como mantenibilidad, escalamiento, portabilidad, etc. Un diseño de un proyecto de
software, además de satisfacer los requerimientos, debe ser cumplir con especificaciones de
calidad.
Las aplicaciones de la POO se realizarán directamente en el laboratorio.
41