La Programación Orientada a Objetos (POO) es un paradigma de programación que se centra en el uso de "objetos" para diseñar aplicaciones y programas. A diferencia de la programación estructurada que se basa en procedimientos o funciones, la POO organiza el código en torno a objetos que agrupan datos y comportamientos.
- Clases y Objetos:
- Clase: Es una plantilla o modelo que define las características y comportamientos que tendrán los objetos creados a partir de ella. Por ejemplo, si creas una clase llamada
Coche, esta puede tener atributos comocolorymarca, y métodos comoaceleraryfrenar. - Objeto: Es una instancia concreta de una clase. Siguiendo el ejemplo anterior, un objeto sería un coche específico, como un coche rojo de la marca Toyota. Cada objeto tiene su propio conjunto de valores para los atributos definidos en la clase.
- Clase: Es una plantilla o modelo que define las características y comportamientos que tendrán los objetos creados a partir de ella. Por ejemplo, si creas una clase llamada
- Principios de la POO:
- Abstracción: Consiste en ocultar los detalles complejos y mostrar solo la información esencial. Es como una receta de cocina que te dice los pasos esenciales sin entrar en los detalles complicados de cada ingrediente.
- Encapsulamiento: Es la práctica de mantener los datos y métodos dentro de una clase privados y accesibles solo a través de métodos públicos. Esto es como una caja fuerte donde solo puedes interactuar con ella a través de una combinación específica.
- Herencia: Permite que una clase (subclase) herede atributos y métodos de otra clase (superclase). Esto es similar a la herencia biológica donde una persona hereda características de sus padres.
- Polimorfismo: Significa que objetos de diferentes clases pueden ser tratados de manera uniforme a través de una interfaz común, pero pueden responder de diferentes formas. Es como tener una misma función de “imprimir” que funciona de manera diferente si se imprime una foto, un documento o una página web.
- Reusabilidad: Puedes reutilizar las clases y los objetos en diferentes programas, lo que ahorra tiempo y esfuerzo en la codificación.
- Mantenibilidad: El código es más fácil de mantener y actualizar, ya que las modificaciones en una clase no afectan necesariamente a otras.
- Modularidad: El código está organizado en módulos o clases independientes, lo que facilita la gestión y comprensión.
- Escalabilidad: Permite la ampliación y modificación de aplicaciones grandes de manera más sencilla y estructurada.
La programación estructurada se centra en la lógica y las funciones, donde los datos y las funciones están separados. Un ejemplo de lenguaje estructurado es C. En cambio, la POO integra datos y métodos en objetos y se enfoca en la interacción entre estos objetos. Por ejemplo, en Java, los datos y métodos están encapsulados dentro de las clases y objetos.
javaCopiar código
public class Persona {
private String nombre;
private int edad;
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public void mostrarInfo() {
System.out.println("Nombre: " + nombre + ", Edad: " + edad);
}
}Uso de la Clase Persona
javaCopiar código
public class Main {
public static void main(String[] args) {
Persona persona1 = new Persona("Ana", 25);
persona1.mostrarInfo(); // Output: Nombre: Ana, Edad: 25
}
}javaCopiar código
public class Coche {
private String marca;
private String modelo;
private int año;
public Coche(String marca, String modelo, int año) {
this.marca = marca;
this.modelo = modelo;
this.año = año;
}
public void mostrarDetalles() {
System.out.println("Marca: " + marca + ", Modelo: " + modelo + ", Año: " + año);
}
}Uso de la Clase Coche
javaCopiar código
public class Main {
public static void main(String[] args) {
Coche miCoche = new Coche("Toyota", "Corolla", 2020);
miCoche.mostrarDetalles(); // Output: Marca: Toyota, Modelo: Corolla, Año: 2020
}
}javaCopiar código
class Animal {
public void sonido() {
System.out.println("El animal hace un sonido");
}
}
class Perro extends Animal {
public void sonido() {
System.out.println("El perro ladra");
}
}Uso de la Herencia
javaCopiar código
public class Main {
public static void main(String[] args) {
Animal miAnimal = new Animal();
Animal miPerro = new Perro();
miAnimal.sonido(); // Output: El animal hace un sonido
miPerro.sonido(); // Output: El perro ladra
}
}javaCopiar código
abstract class Forma {
abstract void dibujar();
}
class Circulo extends Forma {
void dibujar() {
System.out.println("Dibujando un círculo");
}
}
class Rectangulo extends Forma {
void dibujar() {
System.out.println("Dibujando un rectángulo");
}
}Uso de Clases Abstractas
javaCopiar código
public class Main {
public static void main(String[] args) {
Forma miCirculo = new Circulo();
Forma miRectangulo = new Rectangulo();
miCirculo.dibujar(); // Output: Dibujando un círculo
miRectangulo.dibujar(); // Output: Dibujando un rectángulo
}
}javaCopiar código
public class Calculadora {
public int sumar(int a, int b) {
return a + b;
}
public int sumar(int a, int b, int c) {
return a + b + c;
}
}Uso de la Sobrecarga de Métodos
javaCopiar código
public class Main {
public static void main(String[] args) {
Calculadora calc = new Calculadora();
int resultado1 = calc.sumar(2, 3); // Output: 5
int resultado2 = calc.sumar(2, 3, 4); // Output: 9
System.out.println("Suma de 2 y 3: " + resultado1);
System.out.println("Suma de 2, 3 y 4: " + resultado2);
}
}javaCopiar código
public class Estudiante {
private String nombre;
public Estudiante(String nombre) {
this.nombre = nombre;
}
public void mostrarNombre() {
System.out.println("Nombre del estudiante: " + this.nombre);
}
}Uso de this en Métodos
javaCopiar código
public class Main {
public static void main(String[] args) {
Estudiante estudiante = new Estudiante("Carlos");
estudiante.mostrarNombre(); // Output: Nombre del estudiante: Carlos
}
}javaCopiar código
interface Vehiculo {
void mover();
}
class Coche implements Vehiculo {
public void mover() {
System.out.println("El coche se mueve a través de un motor");
}
}
class Bicicleta implements Vehiculo {
public void mover() {
System.out.println("La bicicleta se mueve pedaleando");
}
}Uso del Polimorfismo
javaCopiar código
public class Main {
public static void main(String[] args) {
Vehiculo miVehiculo;
miVehiculo = new Coche();
miVehiculo.mover(); // Output: El coche se mueve a través de un motor
miVehiculo = new Bicicleta();
miVehiculo.mover(); // Output: La bicicleta se mueve pedaleando
}
}javaCopiar código
public class CuentaBancaria {
private double saldo;
public CuentaBancaria(double saldoInicial) {
this.saldo = saldoInicial;
}
public void depositar(double monto) {
if (monto > 0) {
this.saldo += monto;
}
}
public void retirar(double monto) {
if (monto > 0 && monto <= this.saldo) {
this.saldo -= monto;
}
}
public double obtenerSaldo() {
return this.saldo;
}
}Uso del Encapsulamiento
javaCopiar código
public class Main {
public static void main(String[] args) {
CuentaBancaria cuenta = new CuentaBancaria(1000.0);
cuenta.depositar(500.0);
cuenta.retirar(200.0);
System.out.println("Saldo actual: " + cuenta.obtenerSaldo()); // Output: Saldo actual: 1300.0
}
}javaCopiar código
public class Cuenta {
private double saldo;
public Cuenta(double saldoInicial) {
saldo = saldoInicial;
}
public void depositar(double cantidad) {
saldo += cantidad;
}
public double obtenerSaldo() {
return saldo;
}
}¿Qué ocurrirá si intenta ejecutar el siguiente fragmento de código?
javaCopiar código
public class Banco {
public static void main(String[] args) {
Cuenta miCuenta = new Cuenta(1000);
miCuenta.saldo = 500; // Línea problemática
System.out.println(miCuenta.obtenerSaldo());
}
}- a. Se compilará, pero lanzará una excepción en tiempo de ejecución.
- b. Se compilará y se ejecutará sin errores, imprimiendo 500.
- c. Producirá un error de compilación debido a que el atributo saldo es privado.
- d. Se ejecutará, pero imprimirá 1000.
c. Producirá un error de compilación debido a que el atributo saldo es privado.
Imagina que tienes una clase llamada Empleado con los atributos nombre y salario. ¿Cuál de las siguientes opciones sería la mejor forma de inicializar el atributo nombre en el constructor de la clase?
- a.
this.nombre = nombre; - b.
Empleado.nombre = nombre; - c.
nombre = this.nombre; - d.
nombre = Empleado.nombre;
a. this.nombre = nombre;
Supongamos que tienes una clase llamada Círculo que tiene un atributo radio y un método llamado calcularÁrea(). ¿Cuál sería la mejor forma de definir el atributo radio como privado y proporcionar acceso a él desde otros objetos?
- a. Definir el atributo
radiocomo público y acceder a él directamente desde otros objetos. - b. Definir el atributo
radiocomo privado y proporcionar métodos de accesogetRadio()ysetRadio(). - c. Definir el atributo
radiocomo público y proporcionar métodos de accesogetRadio()ysetRadio(). - d. Definir el atributo
radiocomo protegido y permitir el acceso directo desde otros objetos.
b. Definir el atributo radio como privado y proporcionar métodos de acceso getRadio() y setRadio().
¿Cuál es la diferencia entre un Procedimiento y una Función?
- a. Ninguno necesita retornar un valor siempre.
- b. Solo la llamada a una función puede ser asignada a una variable.
- c. El primero debe retornar un valor siempre.
- d. Ambos pueden retornar un valor.
- e. El segundo debe retornar un valor siempre.
b. Solo la llamada a una función puede ser asignada a una variable. e. El segundo debe retornar un valor siempre.
¿Cuáles de las siguientes afirmaciones corresponden a los métodos constructores?
- a. Si no se implementa un constructor, no se pueden crear instancias.
- b. El constructor tiene que tener el mismo nombre que la clase.
- c. Se implementan para crear instancias con un estado coherente.
- d. La clase solo puede tener un constructor.
- e. Se puede utilizar el modificador de acceso
public.
b. El constructor tiene que tener el mismo nombre que la clase.
c. Se implementan para crear instancias con un estado coherente.
e. Se puede utilizar el modificador de acceso public.
javaCopiar código
public class Vehiculo {
private String marca;
private int year;
public Vehiculo(String marca) {
this.marca = marca;
this.year = 2020; // Valor predeterminado
}
public Vehiculo(String marca, int year) {
this.marca = marca;
this.year = year;
}
public String getMarca() {
return marca;
}
public int getYear() {
return year;
}
}¿Cuál de las siguientes afirmaciones es verdadera respecto a los constructores y la creación de instancias en la clase Vehiculo? (Seleccione todas las opciones correctas)
- a.
Vehiculo v2 = new Vehiculo("Honda", 2018);usará el constructor sin parámetros. - b.
Vehiculo v1 = new Vehiculo("Toyota");compilará y usará el constructor que estableceyeara un valor predeterminado. - c.
Vehiculo v1 = new Vehiculo("Toyota");no compilará porque falta el segundo argumento. - d.
Vehiculo v2 = new Vehiculo("Honda", 2018);compilará y usará el constructor con dos parámetros.
b. Vehiculo v1 = new Vehiculo("Toyota"); compilará y usará el constructor que establece year a un valor predeterminado.
d. Vehiculo v2 = new Vehiculo("Honda", 2018); compilará y usará el constructor con dos parámetros.
La función recursiva se compone de un caso base y de un caso recursivo.
- ⬤ Verdadero
- ◯ Falso
Verdadero.
javaCopiar código
public class Animal {
private String nombre;
private int edad;
public Animal(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
public static void main(String[] args) {
Animal animal1 = new Animal("Gato", 3);
Animal animal2 = new Animal("Perro", 5);
System.out.println(animal1.getNombre() + " tiene " + animal1.getEdad() + " años.");
System.out.println(animal2.getNombre() + " tiene " + animal2.getEdad() + " años.");
}
}¿Cuál de las siguientes afirmaciones es correcta sobre cómo se crean las instancias de la clase Animal?
- a. Las instancias de
Animalse crean utilizando el constructor que toma dos parámetros. - b. Se deben pasar un nombre y una edad como parámetros al constructor.
- c. Se pueden crear instancias de
Animalsin pasar parámetros al constructor. - d. El constructor por defecto sin parámetros no está definido, por lo que no se puede usar.
- e. Se puede crear instancia de
Animalpasando solo el nombre como parámetro.
a. Las instancias de Animal se crean utilizando el constructor que toma dos parámetros.
b. Se deben pasar un nombre y una edad como parámetros al constructor.
d. El constructor por defecto sin parámetros no está definido, por lo que no se puede usar.
Considere el siguiente código:
javaCopiar código
public class Calculadora {
public int sumar(int a, int b) {
return a + b;
}
public int restar(int a, int b) {
return a - b;
}
}
public class Principal {
public static void main(String[] args) {
Calculadora calc = new Calculadora();
int resultado = calc.sumar(10, 5) - calc.restar(8, 3);
System.out.println("Resultado: " + resultado);
}
}¿Qué imprimirá el método main?
- a. 7
- b. 10 ✅
- c. 5
- d. 8
Respuesta correcta: b. 10
Indique qué sucede con el valor de una variable que se pasa como argumento por valor o por referencia a un método y se modifica dicho valor:
- a. En el primer caso, la variable mantiene su valor original luego de finalizar el método.
- b. En ambos casos, el valor original de la variable es modificado al finalizar el método.
- c. En el segundo caso, la variable mantiene su valor original luego de finalizar el método.
- d. En ambos casos, la variable mantiene su valor original luego de finalizar el método.
Respuesta incorrecta: La respuesta correcta es: En el primer caso, la variable mantiene su valor original luego de finalizar el método.
Indicar a qué tipo del recorrido de un árbol corresponde la siguiente proposición:
"Se etiquetan los nodos según su profundidad (nivel). Se recorren ordenados de menor a mayor nivel, a igualdad de nivel se recorren de izquierda a derecha."
- a. Inorden
- b. Por Niveles ✅
- c. Postorden
- d. Preorden
Respuesta correcta: b. Por Niveles
¿Cuál es la diferencia entre Clase y Objeto?
- a. Si el primero es creado por el segundo, entonces se dice que este es una instancia del segundo.
- b. El segundo se utiliza para representar entidades o conceptos (sustantivos).
- c. El segundo es una plantilla para la creación del primero según un modelo predefinido.
- d. El segundo permite definir los valores de la estructura definida por el primero.
- e. El primero es una plantilla para la creación del segundo según un modelo predefinido.
- f. Si el segundo es creado por el primero, entonces se dice que este es una instancia del primero.
Respuesta parcialmente correcta: Las respuestas correctas son: El primero es una plantilla para la creación del segundo según un modelo predefinido, El segundo permite definir los valores de la estructura definida por el primero., Si el segundo es creado por el primero, entonces se dice que este es una instancia del primero.
La parte pública de una clase se denomina interfaz.
Seleccione una:
- Verdadero
- Falso
Respuesta correcta: Verdadero
Imagina que tienes creada una instancia de la clase llamada "Persona" llamada persona1, la clase cuenta con un método llamado "saludar()". ¿Cuál sería la forma correcta de llamar al método "saludar()" desde otra clase de la instancia creada?
- a. saludar();
- b. Persona.saludar();
- c. this.saludar();
- d. persona1.saludar(); ✅
Respuesta correcta: d. persona1.saludar();
¿Cuál es la respuesta correcta?
Se deben pasar un nombre y una edad al constructor por defecto sin parámetros no está definido, por lo cual las instancias se crean utilizando el constructor que toma dos parámetros.
- a. El constructor por defecto sin parámetros no está definido, por lo cual las instancias se crean utilizando el constructor que toma dos parámetros. ✅
- b. Se debe pasar un nombre y una edad al constructor por defecto.
- c. Se pueden crear instancias sin pasar parámetros.
- d. Se debe pasar un nombre al constructor por defecto.
- e. Se puede crear instancia de Animal pasando solo el nombre.
Respuesta correcta: a. El constructor por defecto sin parámetros no está definido, por lo cual las instancias se crean utilizando el constructor que toma dos parámetros.
Completar el siguiente gráfico según corresponda:
- Propiedad y comportamiento de un objeto concreto
- Atributo
- Lo que un objeto puede hacer
- Objeto
- Mensaje
class Coche {
String marca;
String modelo;
int año;
public Coche(String marca, String modelo, int año) {
this.marca = marca;
this.modelo = modelo;
this.año = año;
}
public void verAtributos() {
System.out.println("Marca: " + marca + ", Modelo: " + modelo + ", Año: " + año);
}
public static void main(String[] args) {
Coche coche = new Coche("Toyota", "Corolla", 2020);
coche.verAtributos();
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Marca: Toyota, Modelo: Corolla, Año: 2020
b) Marca: Corolla, Modelo: Toyota, Año: 2020
c) Marca: 2020, Modelo: Toyota, Año: Corolla
d) Marca: Toyota, Modelo: 2020, Año: Corolla
Respuesta correcta: a) Marca: Toyota, Modelo: Corolla, Año: 2020
class Persona {
String nombre;
int edad;
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public void verAtributos() {
System.out.print("Nombre: " + nombre + ", Edad: " + edad);
}
}
class Empleado extends Persona {
double sueldo;
public Empleado(String nombre, int edad, double sueldo) {
super(nombre, edad);
this.sueldo = sueldo;
}
@Override
public void verAtributos() {
super.verAtributos();
System.out.println(", Sueldo: " + sueldo);
}
public static void main(String[] args) {
Empleado empleado = new Empleado("Juan", 30, 3000);
empleado.verAtributos();
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Nombre: Juan, Edad: 30, Sueldo: 3000
b) Nombre: Juan, Edad: 30
c) Sueldo: 3000
d) Edad: 30, Nombre: Juan, Sueldo: 3000
Respuesta correcta: a) Nombre: Juan, Edad: 30, Sueldo: 3000
class CuentaBancaria {
private double saldo;
String numeroCuenta;
public CuentaBancaria(String numeroCuenta, double saldoInicial) {
this.numeroCuenta = numeroCuenta;
this.saldo = saldoInicial;
}
public void depositar(double cantidad) {
saldo += cantidad;
}
public void retirar(double cantidad) {
if (saldo >= cantidad) {
saldo -= cantidad;
} else {
System.out.println("Saldo insuficiente.");
}
}
public void verSaldo() {
System.out.println("Saldo: " + saldo);
}
public static void main(String[] args) {
CuentaBancaria cuenta = new CuentaBancaria("123456789", 1000);
cuenta.depositar(500);
cuenta.retirar(200);
cuenta.verSaldo();
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Saldo: 1000
b) Saldo: 1300
c) Saldo: 1500
d) Saldo: 1200
Respuesta correcta: d) Saldo: 1300
import java.util.ArrayList;
class Animal {
public void hacerSonido() {
System.out.println("Sonido de animal");
}
}
class Perro extends Animal {
@Override
public void hacerSonido() {
System.out.println("Guau");
}
}
class Gato extends Animal {
@Override
public void hacerSonido() {
System.out.println("Miau");
}
}
public class PolimorfismoDemo {
public static void main(String[] args) {
ArrayList<Animal> animales = new ArrayList<>();
animales.add(new Perro());
animales.add(new Gato());
for (Animal animal : animales) {
animal.hacerSonido();
}
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Sonido de animal
b) Guau
c) Guau Miau
d) Miau
Respuesta correcta: c) Guau Miau
class Rectangulo {
int ancho;
int alto;
public Rectangulo(int ancho, int alto) {
this.ancho = ancho;
this.alto = alto;
}
public int calcularArea() {
return ancho * alto;
}
public static void main(String[] args) {
Rectangulo rectangulo = new Rectangulo(5, 3);
System.out.println("Área: " + rectangulo.calcularArea());
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Área: 15
b) Área: 8
c) Área: 10
d) Área: 6
Respuesta correcta: a) Área: 15
class Calculadora {
public int sumar(int a, int b) {
return a + b;
}
public int sumar(int a, int b, int c) {
return a + b + c;
}
public int sumar(int a, int b, int c, int d) {
return a + b + c + d;
}
public static void main(String[] args) {
Calculadora calculadora = new Calculadora();
System.out.println("Suma de 2 números: " + calculadora.sumar(1, 2));
System.out.println("Suma de 3 números: " + calculadora.sumar(1, 2, 3));
System.out.println("Suma de 4 números: " + calculadora.sumar(1, 2, 3, 4));
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Suma de 2 números: 3 Suma de 3 números: 6 Suma de 4 números: 10
b) Suma de 2 números: 3 Suma de 3 números: 5 Suma de 4 números: 8
c) Suma de 2 números: 2 Suma de 3 números: 5 Suma de 4 números: 10
d) Suma de 2 números: 3 Suma de 3 números: 6 Suma de 4 números: 9
Respuesta correcta: a) Suma de 2 números: 3 Suma de 3 números: 6 Suma de 4 números: 10
class Utilidades {
public static String convertirAMayusculas(String texto) {
return texto.toUpperCase();
}
public static void main(String[] args) {
String resultado = Utilidades.convertirAMayusculas("hola mundo");
System.out.println(resultado);
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) hola mundo
b) Hola Mundo
c) HOLA MUNDO
d) hola Mundo
Respuesta correcta: c) HOLA MUNDO
abstract class Figura {
public abstract double calcularArea();
}
class Circulo extends Figura {
private double radio;
public Circulo(double radio) {
this.radio = radio;
}
@Override
public double calcularArea() {
return Math.PI * radio * radio;
}
}
class Cuadrado extends Figura {
private double lado;
public Cuadrado(double lado) {
this.lado = lado;
}
@Override
public double calcularArea() {
return lado * lado;
}
public static void main(String[] args) {
Figura circulo = new Circulo(3);
Figura cuadrado = new Cuadrado(4);
System.out.println("Área del círculo: " + circulo.calcularArea());
System.out.println("Área del cuadrado: " + cuadrado.calcularArea());
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Área del círculo: 28.27 Área del cuadrado: 16
b) Área del círculo: 18.84 Área del cuadrado: 8
c) Área del círculo: 12.56 Área del cuadrado: 16
d) Área del círculo: 9.42 Área del cuadrado: 20
Respuesta correcta: a) Área del círculo: 28.27 Área del cuadrado: 16
class Cliente {
String nombre;
int edad;
public Cliente(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
public String verAtributos() {
return "Nombre: " + nombre + ", Edad: " + edad;
}
}
class Pedido {
int numero;
Cliente cliente;
public Pedido(int numero, Cliente cliente) {
this.numero = numero;
this.cliente = cliente;
}
public void verDetalles() {
System.out.println("Pedido N°: " + numero);
System.out.println("Cliente: " + cliente.verAtributos());
}
public static void main(String[] args) {
Cliente cliente = new Cliente("Ana", 25);
Pedido pedido = new Pedido(123, cliente);
pedido.verDetalles();
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) Pedido N°: 123 Cliente: Nombre: Ana, Edad: 25
b) Pedido N°: 123 Cliente: Ana
c) Pedido N°: 123 Edad: 25
d) Pedido: 123 Cliente: Ana, 25
Respuesta correcta: a) Pedido N°: 123 Cliente: Nombre: Ana, Edad: 25
class Vehiculo {
public void mover() {
System.out.println("El vehículo se está moviendo");
}
}
class Coche extends Vehiculo {
@Override
public void mover() {
System.out.println("El coche se está moviendo");
}
public static void main(String[] args) {
Vehiculo vehiculo = new Vehiculo();
Vehiculo coche = new Coche();
vehiculo.mover();
coche.mover();
}
}Pregunta de Opción Múltiple: ¿Cuál es la salida del programa?
a) El vehículo se está moviendo El vehículo se está moviendo
b) El coche se está moviendo El coche se está moviendo
c) El vehículo se está moviendo El coche se está moviendo
d) El coche se está moviendo El vehículo se está moviendo
Respuesta correcta: c) El vehículo se está moviendo El coche se está moviendo
La POO es una forma poderosa y efectiva de organizar y estructurar el código, especialmente en proyectos grandes y complejos. Al centrarse en objetos que combinan datos y comportamientos, facilita la reutilización, el mantenimiento y la escalabilidad del software.