Está en la página 1de 15

Laboratorio de Lenguajes de Programación II

UNIVERSIDAD CATÓLICA DE SANTA MARÍA


ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS

SESIÓN N° 02:

Abstracción, Métodos, Mensajes, Encapsulamiento en POO

I
OBJETIVOS

 Comprender los conceptos fundamentales de la programación orientada a objetos (POO), como


abstracción, métodos, mensajes y encapsulamiento. (Comprensión)
 Diferenciar entre abstracción y concreción en el contexto de POO. (Análisis)
 Identificar las diferentes formas de encapsulamiento y su importancia en la POO. (Identificación)
 Aplicar la abstracción y el encapsulamiento en la creación de clases y objetos en POO. (Aplicación)
 Diseñar y crear clases que utilicen métodos y mensajes para interactuar entre ellas. (Creación)
 Utilizar la abstracción para simplificar el código y hacerlo más legible. (Aplicación)
 Valorar la importancia de la abstracción, los métodos, los mensajes y el encapsulamiento en la
programación orientada a objetos. (Valoración)
 Desarrollar una actitud crítica y reflexiva para identificar oportunidades de mejorar el diseño y la
implementación de soluciones en POO. (Análisis)
 Mostrar interés en seguir aprendiendo sobre la programación orientada a objetos y cómo aplicarla en
diferentes contextos. (Interés)

II
TEMAS A TRATAR

 Introducción.
 ¿Qué es la abstracción?
 Propiedades de la abstracción
 ¿QUÉ ES EL ENCAPSULAMIENTO?
 ¿Qué es la abstracción y la encapsulación y cómo se relacionan?
 Colaboración de objetos de diferentes clases
 Resumen

III
MARCO TEORICO

1. INTRODUCCIÓN
La programación orientada a objetos (POO) es un paradigma de programación que se enfoca en la
creación de soluciones de software a través de la definición y manipulación de objetos y sus
interacciones. En este enfoque, los objetos representan entidades en el mundo real, y se definen sus
propiedades y comportamientos a través de la definición de clases, abstracción, encapsulamiento,
métodos y mensajes.
La abstracción se refiere a la capacidad de simplificar la complejidad de un sistema, aislando las
características esenciales y eliminando las características no esenciales. En la POO, la abstracción se
logra a través de la definición de clases y objetos, que representan entidades y comportamientos
que son relevantes para la solución de un problema específico.
El encapsulamiento es el mecanismo que permite ocultar el estado interno de un objeto y restringir
el acceso a él desde fuera del objeto. En la POO, el encapsulamiento se logra a través de la definición
de métodos públicos y privados, que permiten manipular y acceder a las propiedades de un objeto
de manera controlada.

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

Los métodos son procedimientos o funciones que se definen dentro de una clase y que permiten
realizar operaciones en los objetos de esa clase. Los métodos se llaman a través de mensajes, que
son las solicitudes que se envían a un objeto para realizar una acción específica.
En la POO, la combinación de abstracción, encapsulamiento, métodos y mensajes permite crear
soluciones de software más modulares, escalables y fáciles de mantener. El dominio de estos
conceptos es fundamental para cualquier programador que desee crear soluciones de software de
alta calidad.
En esta actividad de aprendizaje, nos enfocaremos en estos temas y exploraremos en profundidad
sus fundamentos teóricos y su aplicación práctica. Utilizaremos ejemplos y casos de estudio para
que los participantes puedan aplicar estos conceptos en la creación de soluciones de software en
POO. Al finalizar la actividad, los participantes habrán adquirido una comprensión sólida de los
conceptos fundamentales de la POO, así como habilidades prácticas para aplicarlos en la creación
de soluciones de software más eficientes y escalables.

2. ¿ QUÉ ES LA ABSTRACCIÓN?
La abstracción es uno de los conceptos fundamentales en la programación orientada a objetos
(POO). Se refiere a la capacidad de simplificar la complejidad de un sistema, aislando las
características esenciales y eliminando las características no esenciales. En la POO, la abstracción se
logra a través de la definición de clases y objetos, que representan entidades y comportamientos
que son relevantes para la solución de un problema específico.
Según Bjarne Stroustrup en su libro "The C++ Programming Language", la abstracción es un
mecanismo que permite enfocarse en los aspectos importantes de un problema y evitar preocuparse
por los detalles irrelevantes. En lugar de tratar con datos y operaciones complejas directamente, se
pueden utilizar clases y objetos que encapsulan el comportamiento y los datos en un paquete fácil
de usar. Esto ayuda a reducir la complejidad y aumentar la modularidad del sistema.
Por su parte, en su libro "Thinking in Java", Bruce Eckel define la abstracción como la capacidad de
representar conceptos complejos con entidades simples y fácilmente manejables. La abstracción
permite enfocarse en lo que un objeto es capaz de hacer, en lugar de como lo hace.
En el libro "Java: How to Program" de Paul y Harvey Deitel, se hace hincapié en que la abstracción
es un concepto fundamental en la POO y es esencial para crear software de alta calidad. Se utiliza
para separar la implementación de los detalles de la interfaz de usuario y otras partes del sistema,
lo que permite crear soluciones más robustas y escalables.
Finalmente, en el libro "Object-Oriented Software Construction" de Bertrand Meyer, se destaca que
la abstracción es el mecanismo que permite a los programadores construir modelos que representan
entidades del mundo real, y que estos modelos pueden ser utilizados para crear soluciones de
software más robustas y escalables.
Para ejemplificar la abstracción en la POO, a continuación, se presentan algunos ejemplos en
diferentes lenguajes de programación:
En C++, se puede utilizar una clase "Rectangle" para representar un rectángulo y encapsular sus
propiedades y comportamientos. Por ejemplo:

class Rectangle {
private:
int width;
int height;
public:
void setWidth(int w) { width = w; }
void setHeight(int h) { height = h; }
int getArea() { return width * height; }
};

En este ejemplo, se define una clase "Rectangle" que tiene dos propiedades privadas "width" y
"height", y tres métodos públicos "setWidth", "setHeight" y "getArea". Los métodos "setWidth" y
"setHeight" se utilizan para establecer los valores de las propiedades, mientras que el método
"getArea" se utiliza para calcular el área del rectángulo.

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

En Java, se puede utilizar una clase "Person" para representar a una persona y encapsular sus
propiedades y comportamientos. Por ejemplo:

public class Person {


private String name;
private int age;

public void setName(String n) { name = n; }


public void setAge(int a) { age = a; }
public String getName() { return name; }
public int getAge() { return age; }
}

En este ejemplo, se define una clase "Person" que tiene dos propiedades privadas "name" y "age",
y cuatro métodos públicos "setName", "setAge", "getName" y "getAge". Los métodos "setName" y
"setAge" se utilizan para establecer los valores de las propiedades, mientras que los métodos
"getName" y "getAge" se utilizan para obtener los valores de las propiedades.
En Python, se puede utilizar una clase "Animal" para representar un animal y encapsular sus
propiedades y comportamientos. Por ejemplo:

class Animal:
def __init__(self, name, species):
self.name = name
self.species = species

def get_name(self):
return self.name

def get_species(self):
return self.species

En este ejemplo, se define una clase "Animal" que tiene dos propiedades "name" y "species", y dos
métodos "get_name" y "get_species". El método "init" se utiliza para inicializar las propiedades
"name" y "species" cuando se crea un objeto de la clase.
En JavaScript, se puede utilizar una función constructora "Car" para representar un coche y
encapsular sus propiedades y comportamientos. Por ejemplo:

function Car(make, model, year) {


this.make = make;
this.model = model;
this.year = year;

this.getMake = function() {
return this.make;
}

this.getModel = function() {
return this.model;
}

this.getYear = function() {
return this.year;
}
}

En este ejemplo, se define una función constructora "Car" que tiene tres propiedades "make",
"model" y "year", y tres métodos "getMake", "getModel" y "getYear". Los métodos se utilizan para
obtener los valores de las propiedades.

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

3. PROPIEDADES DE LA ABSTRACCIÓN
Desde el punto de vista de la Programación Orientada a Objetos (POO), las propiedades de la
abstracción se refieren a la capacidad de modelar objetos en términos de sus características
esenciales, ignorando los detalles irrelevantes o secundarios. Estas propiedades incluyen:
Simplificación: La abstracción permite simplificar la representación de los objetos, enfocándose en
los aspectos esenciales y eliminando los detalles innecesarios.
Generalización: La abstracción permite representar objetos de manera general, creando clases
abstractas que definen características comunes a un grupo de objetos.
Modularidad: La abstracción permite crear módulos de software que se comunican a través de
interfaces abstractas, permitiendo una mayor flexibilidad y reusabilidad del código.
Polimorfismo: La abstracción permite que los objetos se comporten de manera polimórfica, es decir,
que se adapten a diferentes situaciones y puedan ser tratados como objetos genéricos o específicos
según el contexto.
Encapsulamiento: La abstracción permite ocultar la complejidad interna de los objetos, exponiendo
solo los aspectos relevantes para su interacción con otros objetos.
Flexibilidad: La abstracción permite la flexibilidad y adaptabilidad del código, ya que permite que los
objetos se modifiquen o extiendan de manera controlada y segura.
Estas propiedades son fundamentales para el diseño de sistemas orientados a objetos, ya que
permiten crear modelos de software que son más simples, flexibles, modulares y fáciles de mantener.

4. ¿QUÉ ES EL ENCAPSULAMIENTO?
En Programación Orientada a Objetos (POO), el encapsulamiento es uno de los principios
fundamentales de diseño que se refiere a la capacidad de ocultar la complejidad interna de un
objeto y exponer solo las interfaces o métodos públicos que permiten interactuar con él. Esto
significa que los datos y comportamientos internos de un objeto están protegidos y solo son
accesibles a través de una interfaz pública.
El encapsulamiento tiene varios beneficios importantes, como la mejora de la seguridad y la robustez
del código, la simplificación de la interacción con objetos y la facilidad de mantenimiento. Al ocultar
los detalles internos de un objeto, se evita que los usuarios del objeto hagan cambios no deseados
y se asegura que los cambios realizados en el objeto estén controlados y verificados.
Es importante destacar que el encapsulamiento es diferente al ocultamiento. El ocultamiento se
refiere específicamente a la ocultación de los detalles internos de un objeto, mientras que el
encapsulamiento se refiere al mecanismo general que permite el ocultamiento y la protección de
los datos y comportamientos internos de un objeto. El ocultamiento es una técnica específica que
se utiliza para implementar el encapsulamiento.
En resumen, el encapsulamiento es un principio fundamental de la POO que permite proteger y
controlar el acceso a los datos y comportamientos internos de un objeto a través de una interfaz
pública. El ocultamiento, por su parte, se refiere específicamente a la ocultación de los detalles
internos de un objeto. Juntos, el encapsulamiento y el ocultamiento son importantes para la creación
de objetos seguros, robustos y fáciles de usar.

5. ¿QUÉ ES LA ABSTRACCIÓN Y LA ENCAPSULACIÓN Y CÓMO SE


RELACIONAN?
La abstracción y la encapsulación son dos conceptos fundamentales en la Programación Orientada
a Objetos (POO) que se utilizan para simplificar la complejidad de un sistema. La abstracción se
refiere a la creación de clases y objetos que encapsulan el comportamiento y los datos en un
paquete fácil de usar, mientras que la encapsulación se refiere a la ocultación de los detalles de
implementación de una clase.
En C++, se puede utilizar una clase "BankAccount" para representar una cuenta bancaria y
encapsular sus propiedades y comportamientos. Por ejemplo:

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

class BankAccount {
private:
std::string accountNumber;
double balance;

public:
void deposit(double amount);
void withdraw(double amount);
double getBalance();
};

En este ejemplo, se define una clase "BankAccount" que tiene dos propiedades "accountNumber" y
"balance", y tres métodos públicos "deposit", "withdraw" y "getBalance". Los métodos "deposit" y
"withdraw" se utilizan para agregar o retirar dinero de la cuenta, mientras que el método
"getBalance" se utiliza para obtener el saldo actual de la cuenta. La propiedad "accountNumber"
está oculta al mundo exterior de la clase, lo que proporciona un nivel de encapsulación.
En Java, se puede utilizar una clase "Person" para representar una persona y encapsular sus
propiedades y comportamientos. Por ejemplo:

public class Person {


private String name;
private int age;

public void setName(String name) {


this.name = name;
}

public void setAge(int age) {


this.age = age;
}

public String getName() {


return this.name;
}

public int getAge() {


return this.age;
}
}

En este ejemplo, se define una clase "Person" que tiene dos propiedades "name" y "age", y cuatro
métodos públicos "setName", "setAge", "getName" y "getAge". Los métodos "setName" y "setAge"
se utilizan para establecer los valores de las propiedades, mientras que los métodos "getName" y
"getAge" se utilizan para obtener los valores de las propiedades. La propiedad "name" y "age" están
ocultas al mundo exterior de la clase, lo que proporciona un nivel de encapsulación.
En Python, se puede utilizar una clase "Employee" para representar un empleado y encapsular sus
propiedades y comportamientos. Por ejemplo:

class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary

def get_name(self):
return self.name

def get_salary(self):
return self.salary

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

En este ejemplo, se define una clase "Employee" que tiene dos propiedades "name" y "salary", y dos
métodos "get_name" y "get_salary". El método "init" se utiliza para inicializar las propiedades "name"
y "salary" cuando se crea un objeto de la clase. Las propiedades "name" y "salary" están ocultas al
mundo exterior de la clase, lo que proporciona un nivel de encapsulación.
En JavaScript, la abstracción se puede lograr mediante la creación de clases que encapsulan los
detalles de implementación y proporcionan una interfaz pública clara y coherente para interactuar
con los objetos. Por ejemplo, podemos crear una clase "Persona" que abstraiga las características
esenciales de una persona, como su nombre y su edad:

class Persona {
constructor(nombre, edad) {
this._nombre = nombre;
this._edad = edad;
}

get nombre() {
return this._nombre;
}

set nombre(nuevoNombre) {
this._nombre = nuevoNombre;
}

get edad() {
return this._edad;
}

set edad(nuevaEdad) {
this._edad = nuevaEdad;
}

saludar() {
console.log(`Hola, mi nombre es ${this._nombre} y tengo ${this._edad} años`);
}
}
En este ejemplo, la clase "Persona" abstrae las características esenciales de una persona y encapsula
los detalles de implementación, como el almacenamiento de los datos en atributos privados
(_nombre y _edad) y la definición de métodos públicos para interactuar con ellos (get nombre(), set
nombre(), get edad(), set edad()). Además, la clase proporciona un método público saludar() que
utiliza los atributos encapsulados para imprimir un mensaje de saludo.
Podemos crear instancias de la clase "Persona" y utilizar sus métodos públicos para interactuar con
los objetos:

let persona1 = new Persona("Juan", 30);


let persona2 = new Persona("María", 25);

persona1.saludar(); // Imprime "Hola, mi nombre es Juan y tengo 30 años"


persona2.saludar(); // Imprime "Hola, mi nombre es María y tengo 25 años"

persona1.nombre = "Pedro";
persona1.edad = 40;

persona1.saludar(); // Imprime "Hola, mi nombre es Pedro y tengo 40 años"

En este ejemplo, estamos utilizando los métodos get nombre(), set nombre(), get edad() y set edad()
para acceder y modificar los atributos encapsulados de las instancias de la clase "Persona", sin
conocer los detalles de implementación. De esta manera, estamos interactuando con los objetos a
través de una interfaz pública clara y coherente, que nos permite abstraer las características
esenciales de una persona y trabajar con ellas de manera abstracta y modular.

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

6. COLABORACIÓN DE OBJETOS DE DIFERENTES CLASES


La programación orientada a objetos (POO) es una técnica de programación que se basa en la
creación de objetos que interactúan entre sí para cumplir una tarea en común. Los objetos son
entidades que tienen un estado y un comportamiento definidos por su clase. En este capítulo, nos
centraremos en la colaboración de objetos de diferentes clases para realizar las tareas de un sistema
en una tarea en común.

A. CLASES Y OBJETOS
Antes de profundizar en la colaboración de objetos de diferentes clases, es importante comprender
los conceptos de clases y objetos en POO. Una clase es una plantilla para crear objetos, que define
sus atributos y métodos. Un objeto es una instancia de una clase, que tiene un estado único definido
por sus atributos y puede realizar acciones definidas por sus métodos.

B. COLABORACIÓN DE OBJETOS
La colaboración de objetos es una técnica utilizada para dividir una tarea compleja en partes más
pequeñas y manejables, en las que cada objeto realiza una tarea específica. La colaboración de
objetos puede ser entre objetos de la misma clase o de diferentes clases.
La colaboración de objetos de diferentes clases implica que cada objeto realiza una tarea específica,
pero trabajan juntos para lograr una tarea en común. Cada objeto se comunica con los demás a
través de métodos públicos, compartiendo información y realizando acciones necesarias para lograr
la tarea.

C. EJEMPLO DE COLABORACIÓN DE OBJETOS


Supongamos que estamos desarrollando un sistema para una tienda de libros en línea. Para realizar
una compra, se requiere la colaboración de diferentes objetos de diferentes clases. En primer lugar,
el objeto "Libro" debe proporcionar información sobre el libro a comprar, como el título, el autor y
el precio. El objeto "Carrito de compras" se encarga de almacenar la información del libro
seleccionado y del precio total de la compra. Finalmente, el objeto "Pago" procesa el pago y realiza
una transacción financiera.
La colaboración de objetos de diferentes clases también puede ser vista en un sistema bancario. Por
ejemplo, el objeto "Cuenta bancaria" maneja la información de la cuenta de un cliente, como el
saldo y las transacciones. El objeto "Cajero automático" se encarga de interactuar con el cliente,
permitiendo la realización de transacciones bancarias. El objeto "Tarjeta de crédito" es responsable
de la autorización de pagos y transacciones.

D. BENEFICIOS DE LA COLABORACIÓN DE OBJETOS


La colaboración de objetos de diferentes clases ofrece varios beneficios, entre ellos:
 Simplifica el diseño y la implementación de sistemas complejos, al dividir la tarea en partes
manejables.
 Permite la reutilización de código, al permitir que los objetos se comuniquen y compartan
información.
 Facilita el mantenimiento del código, al permitir que los objetos se modifiquen sin afectar a
los demás objetos.
La colaboración de objetos de diferentes clases es una técnica importante en POO, que permite
dividir una tarea compleja en partes manejables y reutilizables. Los objetos colaboran a través de
métodos públicos, compartiendo información y realizando acciones necesarias para lograr la tarea
en común. La colaboración de objetos ofrece beneficios importantes en el diseño, implementación
y mantenimiento de sistemas complejos.

#include <iostream>
#include <vector>

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

using namespace std;

class Libro {
string titulo;
string autor;
double precio;

public:
Libro(string t, string a, double p) {
titulo = t;
autor = a;
precio = p;
}

string getTitulo() {
return titulo;
}

string getAutor() {
return autor;
}

double getPrecio() {
return precio;
}
};

class CarritoDeCompras {
vector<Libro> librosSeleccionados;
double precioTotal;

public:
CarritoDeCompras() {
precioTotal = 0;
}

void agregarLibro(Libro libro) {


librosSeleccionados.push_back(libro);
precioTotal += libro.getPrecio();
}

vector<Libro> getLibrosSeleccionados() {
return librosSeleccionados;
}

double getPrecioTotal() {
return precioTotal;
}
};

class Pago {
public:
void procesarPago(CarritoDeCompras carrito, double monto) {
if (monto >= carrito.getPrecioTotal()) {
// Realizar la transacción financiera
cout << "La compra ha sido exitosa" << endl;
} else {
cout << "El monto ingresado es insuficiente" << endl;
}
}
};

int main() {

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

// Crear algunos libros


Libro libro1("El Quijote", "Miguel de Cervantes", 20.99);
Libro libro2("100 años de soledad", "Gabriel García Márquez", 25.99);
Libro libro3("La Divina Comedia", "Dante Alighieri", 18.99);

// Agregar los libros al carrito de compras


CarritoDeCompras carrito;
carrito.agregarLibro(libro1);
carrito.agregarLibro(libro2);
carrito.agregarLibro(libro3);

// Obtener la lista de libros seleccionados y el precio total


vector<Libro> librosSeleccionados = carrito.getLibrosSeleccionados();
double precioTotal = carrito.getPrecioTotal();

// Realizar el pago
Pago pago;
pago.procesarPago(carrito, 30.00);

return 0;
}

En este ejemplo, se crean tres objetos "Libro" con diferentes títulos, autores y precios. Luego, se
agrega cada libro al objeto "CarritoDeCompras". Después, se obtiene la lista de libros seleccionados
y el precio total de la compra utilizando los métodos "get" de la clase "CarritoDeCompras".
Finalmente, se realiza el pago utilizando el objeto "Pago", que procesa el pago y realiza la
transacción financiera.

class Libro:
def __init__(self, titulo, autor, precio):
self.titulo = titulo
self.autor = autor
self.precio = precio

class CarritoDeCompras:
def __init__(self):
self.lista_de_libros = []
self.total = 0

def agregar_libro(self, libro):


self.lista_de_libros.append(libro)
self.total += libro.precio

def imprimir_carrito(self):
for libro in self.lista_de_libros:
print(libro.titulo, libro.autor, libro.precio)
print("Total:", self.total)

class Pago:
def procesar_pago(self, carrito, metodo_de_pago):
if metodo_de_pago == "Tarjeta de credito":
print("Procesando pago con tarjeta de credito...")
print("Pago realizado con exito!")
elif metodo_de_pago == "PayPal":
print("Procesando pago con PayPal...")
print("Pago realizado con exito!")
else:
print("Metodo de pago no valido.")

# Ejemplo de uso
libro1 = Libro("El gran Gatsby", "F. Scott Fitzgerald", 10.99)
libro2 = Libro("1984", "George Orwell", 8.99)
carrito = CarritoDeCompras()

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

carrito.agregar_libro(libro1)
carrito.agregar_libro(libro2)
carrito.imprimir_carrito()
pago = Pago()
pago.procesar_pago(carrito, "Tarjeta de credito")

Este código crea tres clases: Libro, CarritoDeCompras y Pago. El objeto Libro representa un libro en
la tienda, con los atributos titulo, autor y precio. El objeto CarritoDeCompras se encarga de
almacenar los libros seleccionados y calcular el precio total. El objeto Pago procesa el pago y realiza
una transacción financiera.
El ejemplo de uso crea dos objetos Libro y un objeto CarritoDeCompras. Los libros se agregan al
carrito y luego se llama al método imprimir_carrito() para mostrar la lista de libros y el precio total.
Finalmente, se crea un objeto Pago y se llama al método procesar_pago() para procesar el pago
utilizando el método de pago especificado.

import java.util.ArrayList;

public class Libro {


private String titulo;
private String autor;
private double precio;

public Libro(String titulo, String autor, double precio) {


this.titulo = titulo;
this.autor = autor;
this.precio = precio;
}

public String getTitulo() {


return titulo;
}

public String getAutor() {


return autor;
}

public double getPrecio() {


return precio;
}
}

public class CarritoDeCompras {


private ArrayList<Libro> libros;
private double precioTotal;

public CarritoDeCompras() {
this.libros = new ArrayList<Libro>();
this.precioTotal = 0.0;
}

public void agregarLibro(Libro libro) {


this.libros.add(libro);
this.precioTotal += libro.getPrecio();
}

public ArrayList<Libro> getLibros() {


return libros;
}

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

public double getPrecioTotal() {


return precioTotal;
}
}

public class Pago {


public static boolean procesarPago(double monto) {
// Lógica para procesar el pago
return true;
}
}

public class TiendaDeLibrosEnLinea {


public static void main(String[] args) {
// Crear algunos libros
Libro libro1 = new Libro("La Sombra del Viento", "Carlos Ruiz Zafón",
15.99);
Libro libro2 = new Libro("El Código Da Vinci", "Dan Brown", 12.99);
Libro libro3 = new Libro("Los Juegos del Hambre", "Suzanne Collins", 10.99);

// Crear un carrito de compras y agregar los libros


CarritoDeCompras carrito = new CarritoDeCompras();
carrito.agregarLibro(libro1);
carrito.agregarLibro(libro2);
carrito.agregarLibro(libro3);

// Mostrar los libros del carrito y el precio total


System.out.println("Libros en el carrito:");
for (Libro libro : carrito.getLibros()) {
System.out.println(libro.getTitulo() + " - " + libro.getAutor() + " -
$" + libro.getPrecio());
}
System.out.println("Precio total: $" + carrito.getPrecioTotal());

// Procesar el pago
if (Pago.procesarPago(carrito.getPrecioTotal())) {
System.out.println("Pago procesado exitosamente.");
} else {
System.out.println("Error al procesar el pago.");
}
}
}

En este ejemplo en Java se utilizan las mismas tres clases que en los ejemplos anteriores: Libro,
CarritoDeCompras y Pago. La sintaxis y la estructura del código es diferente debido a las
particularidades del lenguaje de programación.
En la clase Libro se definen los mismos atributos que en los ejemplos anteriores (titulo, autor y
precio) y se crean los métodos get para acceder a ellos. En la clase CarritoDeCompras se definen
dos atributos (libros y precioTotal) y se crean los métodos para agregar libros al carrito, obtener la
lista de libros y el precio total. En la clase Pago se define un atributo metodoPago y se crea un
método para procesar el pago.
En el método main de la clase TiendaLibrosEnLinea se crea un objeto Libro de ejemplo, se crea un
objeto CarritoDeCompras, se agrega el libro al carrito y se crea un objeto Pago. Finalmente, se llama
al método procesarPago del objeto Pago y se pasa como parámetro el precio total del carrito de
compras.

7. RESUMEN
La programación orientada a objetos (POO) es un paradigma de programación que se centra en el
uso de objetos para representar conceptos del mundo real y permite una mejor organización y
modularidad del código. Los objetos son entidades que tienen atributos y métodos que los definen

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

y les permiten interactuar con otros objetos.


Los conceptos fundamentales de POO incluyen la abstracción, la encapsulación, la herencia y el
polimorfismo. La abstracción es el proceso de identificar y separar los aspectos esenciales de un
objeto e ignorar los detalles irrelevantes. La encapsulación es la técnica de ocultar la complejidad
del objeto y proporcionar una interfaz de acceso para interactuar con él. La herencia es el proceso
de definir una nueva clase a partir de una clase existente y utilizar sus atributos y métodos. El
polimorfismo es la capacidad de un objeto de tomar diferentes formas y comportarse de diferentes
maneras en función del contexto.
Para implementar POO en un lenguaje de programación, se utilizan clases y objetos. Una clase es
un modelo o plantilla para crear objetos, y define los atributos y métodos que tendrán los objetos
creados a partir de ella. Un objeto es una instancia de una clase, es decir, una entidad real que tiene
sus propios valores de atributos y puede llamar a los métodos de su clase.
Algunos de los procesos clave en POO incluyen la creación de objetos, la definición de atributos y
métodos, el encapsulamiento de datos y la interacción entre objetos. Los métodos get y set se
utilizan para acceder y modificar los atributos privados de una clase de forma segura y controlada.
En esta práctica, se propusieron diversas actividades para aplicar los conceptos y procesos de POO
en la creación de programas prácticos y funcionales, incluyendo el desarrollo de juegos y sistemas
de gestión de información. El enfoque práctico y la práctica continua son fundamentales para
desarrollar habilidades sólidas en programación orientada a objetos.
En resumen, la programación orientada a objetos es un enfoque de programación poderoso que
permite la creación de programas más modulares, organizados y reutilizables. Los conceptos
fundamentales, procesos y técnicas de POO son esenciales para cualquier programador que busque
desarrollar habilidades sólidas en programación orientada a objetos.

IV
(La práctica tiene una duración de 2 horas) ACTIVIDADES

1. EXPERIENCIA DE PRÁCTICA N° 01: ABSTRACCIÓN


Conforme un grupo tal como lo indica el docente.
Crear una cuenta de GitHub donde creará y registrará todos sus proyectos:

a) MODELAR ABSTRACCIONES Y CREAR CLASES:


1. Crear una clase de animales: crear una clase de animales que incluya atributos como nombre, edad
y tipo de animal, y métodos para alimentar y hacer sonidos. Los estudiantes también pueden crear
objetos para representar diferentes animales y llamar a los métodos correspondientes para
interactuar con ellos.
a) ¿Qué métodos son necesarios para hacer sonidos y alimentar a los animales?
b) ¿Cómo se pueden crear diferentes objetos para representar diferentes animales?
2. Crear una clase de coches: Los estudiantes pueden crear una clase de coches que incluya atributos
como modelo, año y velocidad, y métodos para acelerar y frenar. Los estudiantes también pueden
crear objetos para representar diferentes coches y llamar a los métodos correspondientes para
interactuar con ellos.
a) ¿Qué métodos son necesarios para acelerar y frenar los coches?
b) ¿Cómo se pueden crear diferentes objetos para representar diferentes coches?
3. Crear una clase de estudiantes: Los estudiantes pueden crear una clase de estudiantes que incluya
atributos como nombre, edad y grado, y métodos para tomar exámenes y calificar. Los estudiantes
también pueden crear objetos para representar diferentes estudiantes y llamar a los métodos
correspondientes para interactuar con ellos.
a) ¿Qué métodos son necesarios para tomar exámenes y calificar a los estudiantes?
b) ¿Cómo se pueden crear diferentes objetos para representar diferentes estudiantes?
4. Crear una clase de tiendas: Los estudiantes pueden crear una clase de tiendas que incluya atributos
como nombre, dirección y tipo de tienda, y métodos para vender y agregar productos. Los
estudiantes también pueden crear objetos para representar diferentes tiendas y llamar a los métodos
correspondientes para interactuar con ellas.

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

a) ¿Qué métodos son necesarios para vender y agregar productos a las tiendas?
b) ¿Cómo se pueden crear diferentes objetos para representar diferentes tiendas?

2. EXPERIENCIA DE PRÁCTICA N° 02: ENCAPSULAMIENTO

b) GESTIÓN DEL ENCAPSULAMIENTO:


1. Crear una clase de persona: Los estudiantes pueden crear una clase de persona que incluya atributos
como nombre, edad y género, y métodos get y set para cada atributo. Los estudiantes pueden crear
objetos para representar diferentes personas y usar los métodos get y set para actualizar o recuperar
información sobre cada persona.
a) ¿Qué beneficios tiene el uso de métodos get y set en la clase de persona?
b) ¿Cómo se pueden utilizar los métodos get y set para actualizar y recuperar información sobre
diferentes personas?
2. Crear una clase de cuenta bancaria: Los estudiantes pueden crear una clase de cuenta bancaria que
incluya atributos como saldo y número de cuenta, y métodos get y set para cada atributo. Los
estudiantes pueden crear objetos para representar diferentes cuentas bancarias y usar los métodos
get y set para actualizar o recuperar información sobre cada cuenta.
a) ¿Qué beneficios tiene el uso de métodos get y set en la clase de cuenta bancaria?
b) ¿Cómo se pueden utilizar los métodos get y set para actualizar y recuperar información sobre
diferentes cuentas bancarias?
3. Crear una clase de libro: Los estudiantes pueden crear una clase de libro que incluya atributos como
título, autor y género, y métodos get y set para cada atributo. Los estudiantes pueden crear objetos
para representar diferentes libros y usar los métodos get y set para actualizar o recuperar
información sobre cada libro.
a) ¿Qué beneficios tiene el uso de métodos get y set en la clase de libro?
b) ¿Cómo se pueden utilizar los métodos get y set para actualizar y recuperar información sobre
diferentes libros?
4. Crear una clase de factura: Los estudiantes pueden crear una clase de factura que incluya atributos
como número de factura, fecha de emisión y monto, y métodos get y set para cada atributo. Los
estudiantes pueden crear objetos para representar diferentes facturas y usar los métodos get y set
para actualizar o recuperar información sobre cada factura.
a) ¿Qué beneficios tiene el uso de métodos get y set en la clase de factura?
b) ¿Cómo se pueden utilizar los métodos get y set para actualizar y recuperar información sobre
diferentes facturas?

3. EXPERIENCIA DE PRÁCTICA N° 03: USO DE OBJETOS

a) GESTIÓN DE OBJETOS Y ARREGLOS DE OBJETOS EN EL PROGRAMA:


1. Crear objetos de las clases creadas: Los estudiantes pueden crear objetos de las clases que han
creado y utilizar los métodos get y set para establecer o recuperar los valores de los atributos de
cada objeto.
a) ¿Cómo se crean objetos de una clase?
b) ¿Cómo se establecen los valores de los atributos de un objeto?
c) ¿Cómo se recuperan los valores de los atributos de un objeto?
2. Crear arreglos de objetos: Los estudiantes pueden crear arreglos de objetos de las clases que han
creado y utilizar ciclos para recorrer y manipular los objetos en el arreglo.
a) ¿Cómo se crean arreglos de objetos?
b) ¿Cómo se agregan objetos a un arreglo?
c) ¿Cómo se recorren los objetos en un arreglo?
3. Realizar operaciones con objetos y arreglos de objetos: Los estudiantes pueden crear objetos y
arreglos de objetos y realizar operaciones como agregar, eliminar o modificar objetos en el arreglo.
a) ¿Cómo se agrega un objeto a un arreglo?
b) ¿Cómo se elimina un objeto de un arreglo?
c) ¿Cómo se modifica un objeto en un arreglo?
4. Implementar la comparación de objetos: Los estudiantes pueden crear objetos y utilizar métodos
para comparar dos objetos de la misma clase y determinar si son iguales o diferentes.
a) ¿Cómo se implementa la comparación de objetos?

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

b) ¿Qué métodos se utilizan para comparar dos objetos de la misma clase?


c) ¿Cómo se determina si dos objetos son iguales o diferentes?

4. EXPERIENCIA DE PRÁCTICA N° 04: USO DE OBJETOS

a) COLABORACIÓN ENTRE OBJETOS:


1. Crear una clase de biblioteca y una clase de libro: Los estudiantes pueden crear una clase de
biblioteca y una clase de libro. La clase de biblioteca puede tener un método para prestar libros,
que acepta un objeto de la clase de libro como parámetro y establece un atributo de préstamo en
el libro. La clase de libro puede tener un método para devolver libros, que elimina el atributo de
préstamo.
a) ¿Cómo se crea una clase de biblioteca?
b) ¿Cómo se crea una clase de libro?
c) ¿Cómo se utiliza un objeto de la clase de libro como parámetro en el método de la clase de
biblioteca?
d) ¿Cómo se establece un atributo en un objeto de la clase de libro?
2. Crear una clase de factura y una clase de producto: Los estudiantes pueden crear una clase de
factura y una clase de producto. La clase de factura puede tener un método para agregar productos,
que acepta un objeto de la clase de producto como parámetro y agrega el producto a una lista de
productos. La clase de producto puede tener métodos para establecer el precio y la cantidad de un
producto.
a) ¿Cómo se crea una clase de factura?
b) ¿Cómo se crea una clase de producto?
c) ¿Cómo se utiliza un objeto de la clase de producto como parámetro en el método de la clase
de factura?
d) ¿Cómo se agrega un objeto a una lista?
3. Crear una clase de carro y una clase de rueda: Los estudiantes pueden crear una clase de carro y
una clase de rueda. La clase de carro puede tener cuatro objetos de la clase de rueda como atributos,
y métodos para mover el carro y cambiar las ruedas. La clase de rueda puede tener un atributo para
el tamaño de la rueda.
a) ¿Cómo se crea una clase de carro?
b) ¿Cómo se crea una clase de rueda?
c) ¿Cómo se utilizan objetos de la clase de rueda como atributos de la clase de carro?
d) ¿Cómo se cambian los atributos de los objetos de la clase de rueda?
4. Crear una clase de tienda y una clase de cliente: Los estudiantes pueden crear una clase de tienda
y una clase de cliente. La clase de tienda puede tener una lista de productos disponibles y una lista
de compras de clientes. La clase de cliente puede tener métodos para agregar productos a la lista
de compras y para pagar la cuenta.
a) ¿Cómo se crea una clase de tienda?
b) ¿Cómo se crea una clase de cliente?
c) ¿Cómo se utilizan objetos de la clase de producto como elementos de una lista?
d) ¿Cómo se agregan elementos a una lista?

V
EJERCICIOS PROPUESTOS

1. Juego de carreras: Crea una clase "Carrera" y la clase “Auto” que permita a los jugadores competir
contra la computadora. La clase debe tener atributos como la distancia total de la carrera y la
dificultad del oponente de la computadora. Los estudiantes deben crear métodos para simular la
carrera y determinar el ganador.
2. Sistema de gestión de pedidos: Crea una clase "Inventario" que tenga una lista de productos
disponibles y una lista de productos agotados. Los estudiantes deben crear métodos para agregar
productos al inventario y actualizar las listas de productos disponibles y agotados. También deben
crear métodos para realizar pedidos y actualizar la lista de facturas de clientes.
3. Programa de simulación de vuelo: Crea una clase "Misión" y “Avión” que permita a los estudiantes
planificar una misión de vuelo. La clase debe tener atributos como el destino, la duración de la
misión y la tripulación necesaria. Los estudiantes deben crear métodos para simular la misión y
determinar si el avión tiene suficiente combustible para completar la misión con éxito.

Mgter. Ángel Montesinos Sesión N° 00


Laboratorio de Lenguajes de Programación II

V
CUESTIONARIO

1. ¿Qué es la programación orientada a objetos (POO)?


2. ¿Qué es la abstracción en POO?
3. ¿Cuál es la diferencia entre una clase y un objeto?
4. ¿Qué son los atributos de una clase?
5. ¿Qué son los métodos de una clase?
6. ¿Cómo se crea un objeto en POO?
7. ¿Cuál es la diferencia entre una variable y un atributo?
8. ¿Qué es el encapsulamiento en POO?
9. ¿Qué es la visibilidad de miembros en POO?
10. ¿Qué es una clase abstracta en POO?
11. ¿Qué es una interfaz en POO?
12. ¿Cómo se implementa la herencia en POO?
13. ¿Qué es una sobrecarga de métodos en POO?
14. ¿Qué es una sobreescritura de métodos en POO?
15. ¿Qué son los métodos estáticos en POO?
16. ¿Qué son los arreglos de objetos en POO?
17. ¿Cómo se utiliza un método get en POO?
18. ¿Cómo se utiliza un método set en POO?
19. ¿Qué es el polimorfismo en POO?
20. ¿Por qué es importante la POO en la programación de software?

VI
BIBLIOGRAFIA Y REFERENCIAS

[1] B. Eckel, Thinking in C++, Prentice Hall, 2000.

[2] B. Stroustrup, El Lenguaje de Programación C++, Madrid: Pearson Educación S.A., 2012.

[3] C. S. Hortsmann, Big Java: Early Objects, Hoboken: John Wiley & Sons, 2019.

[4] I. Kalb, OBJECT-ORIENTED PYTHON: Master OOP by Building Games and GUIs, San Francisco: No
Starch Press, Inc., 2022.

[5] P. Deitel y H. Deitel, Cómo programar en C++, México: Pearson Educación, 2009.

[6] B. Moo, S. Lippman y J. Lajoie, C++ Primer, 2015: Adisson Wesley, Wesford.

Mgter. Ángel Montesinos Sesión N° 00

También podría gustarte