0% encontró este documento útil (0 votos)
38 vistas89 páginas

Semana 1 - ISW2-2025 - POO

El documento presenta los principios del diseño de software orientado a objetos, enfocándose en conceptos clave como abstracción, encapsulamiento, herencia y polimorfismo. Se abordan metodologías de desarrollo de software, modelos de procesos y diagramas UML, así como ejemplos prácticos en Java. El objetivo es que los estudiantes comprendan y apliquen estos principios en la resolución de problemas de programación.
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)
38 vistas89 páginas

Semana 1 - ISW2-2025 - POO

El documento presenta los principios del diseño de software orientado a objetos, enfocándose en conceptos clave como abstracción, encapsulamiento, herencia y polimorfismo. Se abordan metodologías de desarrollo de software, modelos de procesos y diagramas UML, así como ejemplos prácticos en Java. El objetivo es que los estudiantes comprendan y apliquen estos principios en la resolución de problemas de programación.
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

FACULTAD DE INGENIERÍA

CARRERA DE INGENIERÍA DE SISTEMAS

Principios del Diseño


de Software Orientado
a Objetos
Semana 01

Ingeniería de Software 2

2025-1
Logro de la sesión

Los estudiantes serán capaces de comprender los conceptos de Diseño y


fundamentales de la POO, como abstracción, encapsulamiento, herencia y
polimorfismo. Adquiriendo capacidad para explicar y justificar sus decisiones de diseño
de código, así como en su habilidad para aplicar estos principios en la resolución de
problemas prácticos.
Imagina poder crear programas
que simulen el mundo real,
donde objetos virtuales
interactúan entre sí como si
fueran personas, animales o
máquinas

¿Alguna vez te has preguntado


cómo los programas que usas a
diario, desde tu teléfono hasta
tu computadora, son capaces
de hacer tantas cosas
diferentes?
I
Contenidos:
➢ Introducción • Herencia y Polimorfismo
➢ Conceptos de Diseño • Generecidad
➢ Procesos de Desarrollo de Software • Excepciones
➢ Modelo UML
➢ POO en JAVA
• Clases y Objetos
• Estructura de una clase

I
Introducción

A
Análisis Orientado a Objetos

Cual es el objetivo del análisis


orientado a objetos ?

INFORMACIÓN FUNCIONAMIENTO

COMPORTAMIENTO
A
Diseño Orientado a Objetos
Que es el Diseño
orientado a objetos ?
TRANSFORMA

Quien lo hace?
Ingeniero de software.

Por qué es importante? Reutilizar


Anteproyecto para ASW
Velocidad del desarrollo
Calidad del producto

A
Conceptos del Diseño

Proceso
SOLID

Metodología

Abstracción
Métod
o
Refinamiento
A
Conceptos del Diseño

Modularidad Partición estructural

A
Arquitectura del software Jerarquía de control Estructura de datos
Conceptos del Diseño

Ocultación de información Acoplamiento

Independencia funcional Cohesión

A
Conceptos del Diseño

A
Procesosde
Proceso de Desarrollo
Desarrollo de
deSoftware
Software

Sistema de Software

Requisitos, Necesidades
¿ Cómo se hace ?

Define el qué, quién, cuándo y cómo del


desarrollo de software.
Especificación Desarrollo Validación Evolución
A
Tipos de modelos de procesos

V- Waterfall Model –
Modelo V (Brook, 1986)
Waterfall Model – http://www.waterfall-model.com/
Modelo cascada (Royce, 1970)
http://www.waterfall-model.com/

A
Tipos de modelos de procesos

Modelo evolutivo
(Boehm en 1988)
Espiral
(Boehm en 1988)

A
Tipos de modelos de procesos
Modelo de Prototipos

Modelo de Procesos Agiles


Modelo de Prototipos
(Gomma en 1984)

A
II. Breve Tour por UML

Diagramas de UML
Los diagramas expresan gráficamente partes de un modelo
State
State
Use Case Diagramas de
Diagrams
Use Case Diagrams State
Use Case Diagramas de
Diagrams Clases State
Use Case Diagrams Diagramas de
Diagrams
Diagramas de
Diagrams Casos de Uso Diagrams
Diagrams Objetos
Secuencia

Scenario State
Scenario State
Diagramas de
Diagrams Diagramas de
Diagrams
Diagrams Diagrams
Colaboración Modelos Componentes

Scenario Component
Scenario Component
Diagramas de
Diagrams
Diagramas de
Diagrams Diagrams
Diagrams Distribución
Estados Diagramas de
Actividad
A
Modelo UML
Estructurales, Comportamiento,
Elementos Agrupación (paquetes), Anotación
(notas, comentarios)

• Bloques básicos
Dependencia, Asociación
Relaciones (Agregación), Generalización,
de construcción Realización

Clases, Objetos, Casos de Uso,


Diagramas Secuencia, Colaboración,
Actividad, Statecharts,
UML Componentes, Despliegue

• Reglas de uso Nombres, Alcance, Visibilidad,


Integridad, Ejecución

Especificaciones, Dicotomía,
• Mecanismos
Adornos (detalles),
Comunes
Mecanismos de Extensibilidad
A
Diagramas de Clase

A
Diagramas de Casos de Uso

A
Diagramas de Interacción

A
Diagramas de Estado

A
Diagramas de Actividades

A
Diagramas de Componentes

A
Diagramas de despliegue

A
Resúmen de Diagramas UML de un Sistema Software
Repository DocumentList

Diagramas Estáticos FileMgr

fetchDoc( )
sortByName( )

FileList
add( )
DocumentList

delete( )
Document
name : int
docid : int
numField : int
get( )
open( )
close( )
read( )
sortFileList( )
read() fill the
code..
FileManager

Document
fList create( )
fillDocument( )
add( )
delete( )
1

GraphicFile
rep
File FileList
Repository File

Use Case 1 (from Persistence) read( ) GrpFile


name : char * = 0
readDoc( ) read( )
Actor A Actor B readFile( ) open( )
create( )
fillFile( )

Use Case 2

Use Case 3
Diagramas de Clases Diagramas de Componentes

Diagramas de Casos de Uso mainWnd : MainWnd Window 95 Window s95


Window s95

¹®¼°ü¸®
Ŭ¶óÀ̾ðÆ®.EXE
¹®¼°ü¸® ¾ÖÇø´
fileMgr : FileMgr gFile : GrpFile
Window s
NT

Solaris

¹®¼°ü¸® ¿£Áø.EXE
fileMgr : FileMgr Alpha
UNIX
ÀÀ¿ë¼¹ö.EXE
Window s
NT

IBM
Mainframe

document : Document µ¥ÀÌŸº£À̽º¼¹ö


repository : Repository
BO Contrapartida
[operación insertada]

Diagramas de Despliegue
Validar y Completar
Operación -Operador BO

Diagramas de Objetos
-K+ (interfaz)

-KBO
[ ok ] Calcular Flujos
de Caja

Notificar Error a Contabilizar -KBO


FO Operación -Host:Contabilidad (interfaz)

[error operación]
[ prima es en divisa ]
Generar Avances
para Extranjero
-Operador BO

-KBO
-Host: Liquidaciones (interfaz)

Enviar
Confirmación
Evalua
Confirmación
-KBO
-Host:SWIFT (interfaz)

-KBO

[ confirmación rechazada ]

Registrar Error

Diagramas Dinámicos
-Operador BO
-KBO (interfaz) [operación contratada]

Identificar
Motivo Rechazo
-Operador BO

Determinar Acciones
Correcion

[operacion no contratada]

Diagramas de Actividad
mainWnd fileMgr : document : gFile repository
user FileMgr Document
9: sortByName ( )

add file ƯÁ¤¹®¼¿¡ ´ëÇÑ º¸±â¸¦ 1: Doc view request ( )


»ç¿ëÀÚ°¡ ¿äûÇÑ´Ù.

2: fetchDoc( )

mainWnd : MainWnd
3: create ( )
1: Doc view request ( )

4: create ( )
Writ ing 2: fetchDoc( )
add file [ numberOffile==MAX ] /
flag OFF 4: create ( ) gFile : GrpFile 5: readDoc ( )

8: fillFile ( )
Openning
ÈÀϰü¸®ÀÚ´Â Àоî¿Â 6: fillDocument ( )
user : Clerk ¹®¼ÀÇ Á¤º¸¸¦ ÇØ´ç ¹®¼
°´Ã¼¿¡ ¼³Á¤À» ¿äûÇÑ´Ù.

close file fileMgr : FileMgr 7: readFile ( )

3: create ( )
6: fillDocument ( ) 8: fillFile ( )

close file
Closing È¸é °´Ã¼´Â ÀоîµéÀÎ 9: sortByName ( )
Reading °´Ã¼µé¿¡ ´ëÇØ À̸§º°·Î
Á¤·ÄÀ» ½ÃÄÑ È¸é¿¡
7: readFile ( ) º¸¿©ÁØ´Ù.

5: readDoc ( )
document : Document
repository : Repository

Diagramas de Estados Diagramas de Colaboracion Diagramas de Secuencia


A
FACULTAD DE INGENIERÍA
CARRERA DE INGENIERÍA DE SISTEMAS

POO en JAVA

tomado del curso de:


programación orientada a objetos
Variables en Java

A
Declaración y tipos de datos primitivos

A
Ejemplo sobre declaración y tipos de datos primitivos

public static void main(String[] args) {


int edad; // Tipo de dato y nombre de variable
double precio = 0.0; // inicializar una variable al declarar
// Tipos de datos primitivos - Enteros
byte a; // 8 bits
short b; // 16 bits
int c; // 32 bits
long d; // 64 bits
// Tipos de datos primitivos - Punto flotante o decimales
float x; // 32 bits
double y; // 64 bits
char r = 'R'; // Tipo de dato primitivo - Textual
boolean estaAbierto = true; // // Tipos de datos primitivos - para valores lógicos true o false
}

A
Operadores matemáticos estándar

A
Ejemplo sobre Incremento y decremento
public static void main(String[] args) {
int c = 15;
int x, y, z, w;
x = c++; // A x se asigna el valor de c y luego se incrementa c
y = c; // A y se asigna el nuevo valor de c ya incrementado
z = ++c; // A z se asigna el nuevo valor de c ya incrementado
w = c; // a w se asigna el mismo valor asignado a z
System.out.println(x + ", " + y + ", " + z + ", " + w);
}

A
Ejemplo sobre Conversión de tipos
public static void main(String args[]) {
// Conversión implícita o automática
short corto = 34;
int largo = corto;
// Conversión explícita o casting
long largaso = 2345L;
int cortito = (int) largaso;
// Promoción en expreciones
short a=45,b=98;
// Error de compilación cuando c = a+b; por posible pérdida de datos
short c = (short) (a+b);
}

A
Operadores relacionales en Java

A
Estructura if/else en Java

operadores lógicos operadores aritméticos

A
Ejemplo sobre if/else en Java
public static void main(String[] args){
// Dado dos números indicar cual es el mayor
java.util.Scanner entrada = new java.util.Scanner(System.in);
System.out.println("Ingrese el primer número: ");
int a = entrada.nextInt();
System.out.println("Ingrese el segundo número: ");
int b = entrada.nextInt();
if (a>b)
System.out.println("El mayor es: "+a);
else
System.out.println("El mayor es: "+b);
}

A
Ejemplo sobre if/else anidado en Java
public static void main(String[] args){
// Dado el número de mes indicar su cantidad de días
Scanner entrada = new Scanner(System.in);
System.out.println("Ingrese el número de mes: "); int mes = entrada.nextInt();
if (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12){
System.out.println("El mes tiene 31 días");
} else if (mes==2){
System.out.println("El mes tiene 28 o 29 días");
} else if (mes==4 || mes==6 || mes==9 || mes==11){
System.out.println("El mes tiene 30 días");
}else { System.out.println("Número de mes invalido..."); }
}

A
Estructura Repetitivas en Java

While for

do
A
Ejemplo sobre while en Java
public static void main(String[] args) {
// Determinar el mayor de n números
Scanner entrada = new Scanner(System.in);
System.out.println("Ingrese n: "); int n = entrada.nextInt();
int i = 0; // Contador
int mayor = 0;
while (i < n) {
i++;
System.out.println("Ingrese un número: "); int numero = entrada.nextInt();
if (numero > mayor) mayor = numero;
}
System.out.println("El mayor de n números es: "+mayor);
}

A
Ejemplo sobre for en Java
public static void main(String[] args) {
// Determinar el mayor de n números
Scanner entrada = new Scanner(System.in);
System.out.println("Ingrese n: "); int n = entrada.nextInt();
int mayor = 0;
for (int i = 0; i < n; i++) {
System.out.println("Ingrese un número: "); int numero = entrada.nextInt();
if (numero > mayor) {
mayor = numero;
}
}
System.out.println("El mayor de n números es: " + mayor);
}

A
Ejemplo sobre do-while en Java
public static void main(String[] args) {
// Determinar el mayor de n números
Scanner entrada = new Scanner(System.in);
System.out.println("Ingrese n: "); int n = entrada.nextInt();
int mayor = 0;
int i = 0;
do {
i++;
System.out.println("Ingrese un número: "); int numero = entrada.nextInt();
if (numero > mayor) { mayor = numero; }
} while (i<n);
System.out.println("El mayor de n números es: " + mayor);
}

A
Estructura de una Clase

A
Estructura de una Clase
1.- Creamos el proyecto: CreacionClase

2.- Adicionamos un paquete (Packages): mi.clase.variable donde crearemos


todas las clases necesarias para nuestro proyecto, en este Caso la clase
SerHumano

A
Estructura de una Clase

3.- Adicionamos una clase Java (Java Class): SerHumano, donde definiremos
los Atributos, métodos para acceder y asignar valores y el método constructor

A
Estructura de una Clase
4.- En la definición de clase creamos 3 atributos: Nombre, Color de Ojos, edad y
una variable Static planeta con el valor: “TIERRA”

A
Estructura de una Clase
5- Creamos el método constructor para nuestra clase, enviado variables para
asignar a Los atributos de la clase

A
Estructura de una Clase
6.- Creamos los métodos getters y setter para cada uno de los atributos creados para
nuestra clase

A
Estructura de una Clase
7.- Adicionamos un método que nos permita visualizar los atributos de la clase creada y nos
muestre en una variable String

A
Estructura de una Clase
8.- Adicionamos un nuevo paquete: mi.clase.principal, donde crearemos la clase Prueba, la
cual contiene a nuestra función principal (main)

A
Estructura de una Clase
9.- Instanciamos dos objetos de la clase SerHumano: refSH1 y refSH2 a través del método
constructor

A
Estructura de una Clase
10.- Mostramos los valores de los dos objetos creados a través del
método:
verCaracteristicas

A
Arreglos de tipo primitivo de una sola dimensión: Sintaxis

● La sintaxis para declarar e inicializar un array será:


Tipo_de_variable[ ] Nombre_del_array =
new Tipo_de_variable[dimensión];

● También podemos alternativamente usar esta declaración:


Tipo_de_variable[ ] Nombre_del_array;
Ejemplos: :
Nombre_del_array
short[ ] edad = new short[4]; = new Tipo_de_variable[dimensión];
int[ ] edad = new int[4];
long[ ] edad = new long[4];
float[ ] estatura = new float[3];
double[ ] estatura = new double[3];
boolean[ ] estado = new boolean[5];
char[ ] sexo = new char[2];

A
String[ ] nombre = new String[2];
Arreglos Bidimensionales - Declaración
• Declaración de arreglo bidimensional:

tipoDato [ ][ ] nombreDelArreglo;

• La sintaxis para crear arreglos es:

nombreDelArreglo = new tipoDato [numFilas][numColumnas];

Recorrido de un arreglo de dos dimensiones A


Definición Arreglo de Referencias
Sintaxis:
NombreClase [ ] nombreArreglo;

NombreClase [ ] nombreArreglo = new NombreClase [tamaño]

Ejemplo 1:
Declaración arreglo de objetos.
Estudiante [ ] arAlumnos;

Declaración del arreglo e inicialización por defecto.


Estudiante [ ] arAlumnos = new Estudiante [4];

0 null

1 null

2 null
3 null
A
Ejemplo Asignación
Ejemplo 1:
Creación de objetos y asignación a posiciones del arreglo.

arAlumnos[0] = new Estudiante (“Juan”, 20);


arAlumnos[1] = new Estudiante (“Luis”, 18);
arAlumnos[2] = new Estudiante (“Aldo”, 17);
arAlumnos[3] = new Estudiante (“Manuel”, 22);

arAlumnos
Nombre: “Juan”
0 Edad: 20

A
Bloque for:each

Estructura repetitiva que nos permite recorrer un arreglo de tipo primitivo o


referencias sin necesidad de recurrir a la estructura repetitiva for.

Ejemplo:

A
Herencia Simple

Vehículo
# numSerie: int
# color:String

Barco Coche
- longAncla: float - capCilindro: float

A
Herencia Simple - Constructores

Ejemplo 1:

Ejemplo 2:

A
Clase Abstracta

• Si una clase contiene al menos un método abstracto, entonces es una clase


abstracta.

• Una clase abstracta es una clase de la que no se pueden crear objetos, pero puede
ser utilizada como clase padre para otras clases.

• Declaración:

public abstract class NombreClase {


..............
}

A
Interfaces
 Colección de métodos abstractos, los cuales solo tienen declaración y no
implementación.
 Los métodos serán implementados por una o mas clases.
 Para crear una interface, se utiliza la palabra reservada «interface» en
lugar de class. La interface puede definirse public o sin modificador de
acceso
 Una interface puede también contener atributos, pero estos son siempre
static y final.
 Todos los métodos que declara una interface son siempre public.

A
Diferencia entre clase Abstracta e Interface

● Como Java no permite herencia múltiple – una clase sólo puede


extender una superclase – esto dificulta que una clase se adecue a
más de un comportamiento. Una interfaz, por el contrario, permite
que una clase implemente una o más interfaces para resolver el
problema de mezclar diversos comportamientos en un mismo tipo
de objeto
● Una clase abstracta no puede implementar los métodos
declarados como abstractos, una interface no puede implementar
ningún método (ya que todos son abstractos).

A
Herencia Múltiple
● Una clase puede implementar varias interfaces, pero sólo puede
tener una clase ascendiente directa
● Contaminación de una interfaz. Cuando se añade un método a una
clase base solo porque una de sus derivadas lo necesita.

A
Declaración de una Interface
Sintaxis:
public interface IdentificadorInterfaz {
// Cuerpo de la interface . . .
}
<<interfaz>
Modificacion

+ incremento (a: int )

Acumulador

- valor int

NOTA: no incluye ni la declaración de variables de instancia ni la implementación de los métodos (sólo las cabeceras).

A
Implementación de una Interface en una clase
Ejemplo:
Definamos ahora la clase Acumulador.
<<interfaz>
Modificacion

+ incremento (a: int )

Obliga a la clase Acumulador a definir el Acumulador


método incremento declarado en la - valor int
interface Modificacion.

A
Jerarquía entre Interface

La jerarquía entre interfaces permite la herencia simple y múltiple.


Es decir, tanto la declaración de una clase, como la de una interfaz
pueden incluir la implementación de otras interfaces.

Ejemplo:

public interface Una implements Dos, Tres {


// Cuerpo de la interface . . .
}

Las clases que implementan la interface Una también lo hacen con


Dos y Tres
A
Jerarquía entre Interface
Otro ejemplo de aplicación:
Construyamos dos interfaces, Constantes y Variaciones, y una clase, Factura, que
las implementa.
<<interfaz> <<interfaz>
Constantes Variaciones
ValorMaximo: double AsignaValor(double): void
ValorMinimo: double Rebaja(double): void

Factura
- TotalSinIGV: double
- IGV: double <static><final>
+ SinIGV() : double
+ ConIGV() : double
+ AsignaValor(double): void
+ Rebaja(double): void

A
Generecidad en Java
Las clases genéricas se definen para:
Otorgan seguridad de tipo en tiempo de compilación
Elimina la necesidad de “castear”
Otorgan la habilidad de crear colecciones homogéneas
Permite a los programadores implementar algoritmos
genéricos que trabajen con colecciones de diferente tipo,
pueden ser personalizables, y son tipos seguros y fáciles de leer.

A
Generecidad en Java
Declaración de una clase genérica:

public class ClaseGenerica <T> {


// se pueden definir atributos y métodos como en
// cualquier clase no genérica.
……….
}

Convención de Parametrización:
T : es el parámetro genérico: clase indeterminada de objetos sobre la
que opera ClaseGenérica.
E: tipo del elemento en una lista, cola, ... (muy usado en las Java Collections)
N: Numero

A
Generecidad en Java
Ejemplo de clase genérica
// Almacén genérico

public class Almacén <T> {


// objeto almacenado (de tipo indeterminado)
private T contenido;
/** Mete un dato en el almacén */ public
void almacena(T dato) {
contenido=dato;
}
/** Obtiene el dato almacenado */
public T obtiene() {
return contenido;
}
}
A
Instanciación de clases Genéricas
Cuando se crea (instanciar) un objeto de una clase genérica hay que especificar
el parámetro genérico

// crea un almacén de coches


Almacén<Coche> ac=new Almacén<Coche>();

// crea un almacén de doubles


Almacén<Double> ad=new Almacén<Double>();

Un objeto de una clase genérica:


➢ puede usarse con objetos de la clase del parámetro genérico o de sus subclases.
Por ejemplo: en una lista genérica instanciada para la clase Vehículo
podríamos meter objetos de sus subclases Coche, Barco, Avión, ...

A
Ejemplo de uso de clases Genéricas
public static void main (String[] args) {
// crea dos objetos
Double d=new Double(5.0);
Coche c=new Coche("ibiza",Color.ROJO);
// crea un almacén de coches
Almacen<Coche> ac=new Almacen<Coche>();
// crea un almacén de doubles
Almacen<Double> ad=new Almacen<Double>();
// almacena objetos
ac.almacena(c);
ad.almacena(d);
ac.almacena(d); // ¡¡error de compilación!!
// obtiene los contenidos de los almacenes
Coche c1=ac.obtiene();
Double d1=ad.obtiene();
} A
Definición de Excepciones
Las excepciones son errores que se generan en momento de ejecución de un
programa JAVA, los cuales se manejan usando los bloques try, catch y finally

Dentro de este bloque se incluyen las sentencias que se


Dentro de este bloque se incluyen las ejecutaran según el tipo de error generado. Van a continuación
sentencias que pueden generar errores, del bloque try

Dentro de este bloque se incluyen las sentencias que se ejecutaran


SIEMPRE, inclusive no se generen errores. Generalmente se usa este bloque
por ejemplo para cerrar una conexión a base de datos, un poll de conexiones, A
Excepciones Estándares
● ArrayIndexOutOfBoundsException.- Cuando se intenta acceder a una posición del array que no existe.
● NumberFormatException.- Cuando se intenta convertir un string en numero y no contiene carácter valido
(números)
● NullPointerException.- Error cuando no se ha inicializado un objeto.
● ArithmeticException.- Errores aritméticos, por ejemplo división entre 0

A
Creación de nuevas Excepciones
Paso 1: crear la clase que va a manejar la excepción, deriva de la clase Exception. Adicionar un constructor
con un parámetro que es el mensaje a mostrar

A
Creación de nuevas Excepciones
Paso 2: Crear el método que va a manejar la excepción que “lance” la excepción

Paso 3: Capturar el error mediante los bloques try y catch

A
EJERCICIOS

T
Ejercicio 1: Sistema de Gestión de Biblioteca

Crea un sistema para gestionar una biblioteca. Debes tener clases como
Libro, Autor, Usuario, Biblioteca y Prestamo. Utiliza herencia para diferentes
tipos de libros (novela, ensayo, etc.) y polimorfismo para manejar diferentes
tipos de usuarios (estudiante, profesor, etc.). Implementa genericidad para
almacenar colecciones de libros y usuarios. Utiliza excepciones para manejar
errores como libros no disponibles o usuarios que no pueden tomar
prestados.

* Complemente con métodos para buscar libros por título, autor o tema,
prestar y devolver libros, y generar informes de préstamos.

T
Solución:

T
T
T
T
T
Ejercicio 2: Juego de Rol con Habilidades

Diseña un juego de rol donde los personajes tienen diferentes


habilidades (ataque, defensa, magia, etc.). Utiliza herencia para crear
diferentes tipos de personajes (guerrero, mago, arquero, etc.) y
polimorfismo para que cada personaje tenga su propia forma de usar
las habilidades. Implementa genericidad para crear listas de
habilidades y excepciones para manejar errores como habilidades no
disponibles o personajes sin energía

Crea un sistema de combate donde los personajes pueden atacar,


defender y usar habilidades especiales.

T
Ejercicio 3: Sistema de Reservas de Hotel

Crea un sistema para gestionar las reservas de un hotel. Debes tener


clases como Habitacion, Cliente, Reserva y Hotel. Utiliza herencia
para diferentes tipos de habitaciones (simple, doble, suite, etc.) y
polimorfismo para manejar diferentes tipos de clientes (regular, VIP,
etc.). Implementa genericidad para almacenar listas de reservas y
excepciones para manejar errores como habitaciones no disponibles o
reservas canceladas

Implementa métodos para buscar habitaciones disponibles, realizar


reservas, cancelar reservas y generar informes de ocupación..

T
Ejercicio 4: Aplicación de Dibujo con Figuras Geométricas

Diseña una aplicación para dibujar diferentes figuras geométricas


(círculos, cuadrados, triángulos, etc.). Utiliza herencia para crear las
diferentes clases de figuras y polimorfismo para dibujar cada figura
de forma específica. Implementa genericidad para almacenar listas de
figuras y excepciones para manejar errores como parámetros
inválidos.

Permite al usuario seleccionar figuras, cambiar sus propiedades (color, tamaño,


posición) y guardarlas en un archivo.

T
Ejercicio 5: Sistema de Gestión de Empleados

Crea un sistema para gestionar los empleados de una empresa.


Debes tener clases como Empleado, Departamento, Cargo y Nomina.
Utiliza herencia para diferentes tipos de empleados (administrativo,
técnico, gerente, etc.) y polimorfismo para calcular el salario de cada
empleado según su cargo y departamento. Implementa genericidad
para almacenar listas de empleados y excepciones para manejar
errores como empleados no encontrados o salarios inválidos.

Implementa métodos para asignar empleados a departamentos,


calcular salarios, generar informes de nómina y buscar empleados por
nombre o cargo.

T
¿Qué se logró?

✓ Aplicar los principios de la Programación Orientada


a Objetos (POO) en la creación de programas en
Java
✓ Implementar programas que no solo cumplan con
los requisitos funcionales, sino que también sean
fáciles de entender, mantener y reutilizar gracias a
la aplicación de buenas prácticas de programación
orientada a objetos
C
¿Qué debemos hacer para alcanzar el objetivo
del tema?

✓ Repasar la teoría, los ejemplos y ejercicios


resueltos.
✓ Resolver los ejercicios propuestos

C
Referencias

1. Sommerville, I. (2011). Ingeniería de software (9a ed.). Pearson Educación.


2. Pressman, R. S., & Maxim, B. R. (2014). Ingeniería de Software: Un Enfoque Práctico (8a ed.). McGraw-Hill.
3. Holzner, S. (2000). La biblia de Java 2. Anaya Multimedia.
4. orstmann, C. S. (2020). Core Java SE 9 for the Impatient. Addison-Wesley Professional.

También podría gustarte