Skip to content
IRC-CodingIRC-Coding
Fundamentos OOPClase ObjetoAtributos MétodosInstanciaConstructor

OOP Fundamentos: Clases, Objetos e Instancias

Aprende OOP: clases como planos, objetos como instancias. Atributos, métodos, constructores y la relación entre abstracción y realización.

S

schutzgeist

6 min read
OOP Fundamentos: Clases, Objetos e Instancias

Fundamentos de OOP: Clase, Objeto, Instancia, Atributos y Métodos

Este artículo es una explicación de conceptos sobre los fundamentos de la programación orientada a objetos, incluyendo clases, objetos, atributos y métodos.

En pocas palabras

OOP es un paradigma de programación que estructura el software a partir de componentes reutilizables y bien organizados: los objetos. La clase es el plano, el objeto es su realización concreta.

Descripción técnica compacta

La programación orientada a objetos (OOP) es un paradigma que modela objetos del mundo real mediante objetos de software. La diferencia fundamental entre clase y objeto es crítica:

Clase (Plano):

  • Plantilla o esquema abstracto
  • Define atributos (propiedades) y métodos (capacidades)
  • Existe una única vez en el código
  • Ejemplo: la clase Auto define propiedades como color y métodos como frenar()

Objeto/Instancia (algo concreto):

  • Realización concreta de una clase
  • Se crea en tiempo de ejecución (operador new)
  • Tiene valores específicos para sus atributos
  • Ejemplo: objeto miGolf con color=“azul”, potencia=150CV

Conceptos clave:

  • Encapsulación: Los datos y métodos se agrupan en una unidad
  • Reutilización: Las clases se pueden instanciar múltiples veces
  • Estructuración: Separación clara de responsabilidades
  • Abstracción: Reducir la realidad compleja a propiedades relevantes

Puntos clave para evaluación

  • Clase vs objeto: Plano abstracto vs instancia concreta
  • Atributos: Propiedades o datos de un objeto
  • Métodos: Comportamiento o capacidades de un objeto
  • Instanciación: Creación de objetos a partir de clases
  • Constructor: Método especial para inicializar objetos
  • Encapsulación: Agrupar datos y métodos
  • Relevancia práctica: Comprensión fundamental para desarrollo de software
  • Aplicación: Reutilización y mantenibilidad del código

Componentes principales

  1. Clase: Definición con atributos y métodos
  2. Objeto: Instancia concreta de una clase
  3. Atributos: Propiedades o datos de un objeto
  4. Métodos: Comportamiento o funciones de un objeto
  5. Constructor: Método de inicialización para nuevos objetos
  6. Variables de instancia: Datos específicos de cada objeto
  7. Métodos de clase: Métodos válidos para la clase
  8. Getter/Setter: Métodos para acceder a atributos

Ejemplos prácticos

1. Clase simple en Java

// Clase como plano
public class Auto {
    // Atributos (propiedades)
    private String farbe;
    private int anzahlTueren;
    private int leistungInPS;
    private int aktuelleGeschwindigkeit;
    
    // Constructor para crear objetos
    public Auto(String farbe, int anzahlTueren, int leistungInPS) {
        this.farbe = farbe;
        this.anzahlTueren = anzahlTueren;
        this.leistungInPS = leistungInPS;
        this.aktuelleGeschwindigkeit = 0;
    }
    
    // Métodos (comportamiento)
    public void beschleunigen(int kmh) {
        this.aktuelleGeschwindigkeit += kmh;
        System.out.println("Auto beschleunigt auf " + this.aktuelleGeschwindigkeit + " km/h");
    }
    
    public void bremsen(int kmh) {
        if (this.aktuelleGeschwindigkeit >= kmh) {
            this.aktuelleGeschwindigkeit -= kmh;
            System.out.println("Auto bremst auf " + this.aktuelleGeschwindigkeit + " km/h");
        } else {
            System.out.println("Kann nicht unter 0 km/h bremsen");
        }
    }
    
    // Métodos getter para acceder a atributos
    public String getFarbe() {
        return farbe;
    }
    
    public int getAktuelleGeschwindigkeit() {
        return aktuelleGeschwindigkeit;
    }
    
    public void anzeigen() {
        System.out.println("Auto - Farbe: " + farbe + 
                          ", Türen: " + anzahlTueren + 
                          ", Leistung: " + leistungInPS + " PS" +
                          ", Geschwindigkeit: " + aktuelleGeschwindigkeit + " km/h");
    }
}

// Uso de la clase
public class Garage {
    public static void main(String[] args) {
        // Crear objetos (instancias)
        Auto meinGolf = new Auto("blau", 5, 150);
        Auto deinA3 = new Auto("schwarz", 3, 120);
        Auto companyAuto = new Auto("silber", 4, 200);
        
        // Usar los objetos
        meinGolf.anzeigen();
        meinGolf.beschleunigen(50);
        meinGolf.beschleunigen(30);
        meinGolf.bremsen(20);
        
        System.out.println("---");
        
        deinA3.anzeigen();
        deinA3.beschleunigen(80);
        
        System.out.println("---");
        
        companyAuto.anzeigen();
        companyAuto.beschleunigen(100);
    }
}

2. Clase en Python

# Clase como plano
class Auto:
    # Atributo de clase (válido para todos los autos)
    anzahl_autos = 0
    
    # Constructor
    def __init__(self, farbe, anzahl_tueren, leistung_in_ps):
        # Atributos de instancia (específicos de cada objeto)
        self.farbe = farbe
        self.anzahl_tueren = anzahl_tueren
        self.leistung_in_ps = leistung_in_ps
        self.aktuelle_geschwindigkeit = 0
        
        # Incrementar atributo de clase
        Auto.anzahl_autos += 1
    
    # Métodos
    def beschleunigen(self, kmh):
        self.aktuelle_geschwindigkeit += kmh
        print(f"Auto beschleunigt auf {self.aktuelle_geschwindigkeit} km/h")
    
    def bremsen(self, kmh):
        if self.aktuelle_geschwindigkeit >= kmh:
            self.aktuelle_geschwindigkeit -= kmh
            print(f"Auto bremst auf {self.aktuelle_geschwindigkeit} km/h")
        else:
            print("Kann nicht unter 0 km/h bremsen")
    
    def anzeigen(self):
        print(f"Auto - Farbe: {self.farbe}, Türen: {self.anzahl_tueren}, " +
              f"Leistung: {self.leistung_in_ps} PS, " +
              f"Geschwindigkeit: {self.aktuelle_geschwindigkeit} km/h")
    
    # Método de clase
    @classmethod
    def get_anzahl_autos(cls):
        return cls.anzahl_autos

# Uso de la clase
def garage_demo():
    # Crear objetos (instancias)
    mein_golf = Auto("blau", 5, 150)
    dein_a3 = Auto("schwarz", 3, 120)
    company_auto = Auto("silber", 4, 200)
    
    # Usar los objetos
    mein_golf.anzeigen()
    mein_golf.beschleunigen(50)
    mein_golf.beschleunigen(30)
    mein_golf.bremsen(20)
    
    print("---")
    
    dein_a3.anzeigen()
    dein_a3.beschleunigen(80)
    
    print("---")
    
    company_auto.anzeigen()
    company_auto.beschleunigen(100)
    
    print(f"Anzahl erstellter Autos: {Auto.get_anzahl_autos()}")

if __name__ == "__main__":
    garage_demo()

3. Clase en C#

using System;

// Clase como plano
public class Auto
{
    // Atributos (propiedades)
    private string farbe;
    private int anzahlTueren;
    private int leistungInPS;
    private int aktuelleGeschwindigkeit;
    
    // Propiedad estática para todos los autos
    public static int AnzahlAutos { get; private set; }
    
    // Constructor
    public Auto(string farbe, int anzahlTueren, int leistungInPS)
    {
        this.farbe = farbe;
        this.anzahlTueren = anzahlTueren;
        this.leistungInPS = leistungInPS;
        this.aktuelleGeschwindigkeit = 0;
        AnzahlAutos++;
    }
    
    // Métodos
    public void Beschleunigen(int kmh)
    {
        this.aktuelleGeschwindigkeit += kmh;
        Console.WriteLine($"Auto beschleunigt auf {this.aktuelleGeschwindigkeit} km/h");
    }
    
    public void Bremsen(int kmh)
    {
        if (this.aktuelleGeschwindigkeit >= kmh)
        {
            this.aktuelleGeschwindigkeit -= kmh;
            Console.WriteLine($"Auto bremst auf {this.aktuelleGeschwindigkeit} km/h");
        }
        else
        {
            Console.WriteLine("Kann nicht unter 0 km/h bremsen");
        }
    }
    
    // Properties para acceder a atributos
    public string Farbe => farbe;
    public int AktuelleGeschwindigkeit => aktuelleGeschwindigkeit;
    
    public void Anzeigen()
    {
        Console.WriteLine($"Auto - Farbe: {farbe}, Türen: {anzahlTueren}, " +
                         $"Leistung: {leistungInPS} PS, " +
                         $"Geschwindigkeit: {aktuelleGeschwindigkeit} km/h");
    }
}

// Uso de la clase
public class Garage
{
    public static void Main(string[] args)
    {
        // Crear objetos (instancias)
        Auto meinGolf = new Auto("blau", 5, 150);
        Auto deinA3 = new Auto("schwarz", 3, 120);
        Auto companyAuto = new Auto("silber", 4, 200);
        
        // Usar los objetos
        meinGolf.Anzeigen();
        meinGolf.Beschleunigen(50);
        meinGolf.Beschleunigen(30);
        meinGolf.Bremsen(20);
        
        Console.WriteLine("---");
        
        deinA3.Anzeigen();
        deinA3.Beschleunigen(80);
        
        Console.WriteLine("---");
        
        companyAuto.Anzeigen();
        companyAuto.Beschleunigen(100);
        
        Console.WriteLine($"Anzahl erstellter Autos: {Auto.AnzahlAutos}");
    }
}

Conceptos en detalle

Constructores

// Constructores sobrecargados en Java
public class Auto {
    private String farbe;
    private int leistung;
    
    // Constructor por defecto
    public Auto() {
        this.farbe = "schwarz";
        this.leistung = 100;
    }
    
    // Constructor con parámetros
    public Auto(String farbe, int leistung) {
        this.farbe = farbe;
        this.leistung = leistung;
    }
    
    // Constructor copia
    public Auto(Auto other) {
        this.farbe = other.farbe;
        this.leistung = other.leistung;
    }
}

Miembros estáticos vs miembros de instancia

public class MathUtil {
    // Método estático - pertenece a la clase
    public static int addiere(int a, int b) {
        return a + b;
    }
    
    // Método de instancia - pertenece al objeto
    private int wert;
    
    public MathUtil(int startWert) {
        this.wert = startWert;
    }
    
    public int addiereZuWert(int a) {
        this.wert += a;
        return this.wert;
    }
}

// Uso
int ergebnis1 = MathUtil.addiere(5, 3);  // Estático
MathUtil rechner = new MathUtil(10);
int ergebnis2 = rechner.addiereZuWert(5);  // Instancia

Getters y setters

public class Person {
    private String name;
    private int alter;
    
    // Getter
    public String getName() {
        return name;
    }
    
    // Setter con validación
    public void setAlter(int alter) {
        if (alter >= 0 && alter <= 150) {
            this.alter = alter;
        } else {
            throw new IllegalArgumentException("Ungültiges Alter");
        }
    }
    
    // Getter para valor calculado
    public boolean istVolljaehrig() {
        return alter >= 18;
    }
}

Ventajas y desventajas

Ventajas de OOP

  • Reutilización: Las clases se pueden usar múltiples veces
  • Mantenimiento: La estructura clara facilita los cambios
  • Comprensibilidad: Se refleja el mundo real
  • Encapsulación: Los datos están protegidos y accesibles de forma controlada
  • Escalabilidad: Los sistemas grandes se pueden estructurar ordenadamente

Desventajas

  • Sobrecarga: Más código para tareas simples
  • Curva de aprendizaje: El pensamiento orientado a objetos requiere práctica
  • Rendimiento: La creación de objetos puede ser costosa
  • Complejidad: Demasiadas clases pueden resultar confusas

Preguntas frecuentes en exámenes

  1. ¿Cuál es la diferencia entre clase y objeto? La clase es el plano, el objeto es la instancia concreta en tiempo de ejecución.

  2. Explica los términos atributo y método Los atributos son propiedades o datos, los métodos son el comportamiento o funciones de un objeto.

  3. ¿Qué es un constructor? Método especial para inicializar nuevos objetos, se invoca al usar new.

  4. ¿Por qué es importante la encapsulación? Protege los datos del acceso incontrolado y permite validación.

Referencias principales

  1. https://de.wikipedia.org/wiki/Objektorientierte_Programmierung
  2. https://docs.oracle.com/javase/tutorial/java/concepts/
  3. https://docs.python.org/3/tutorial/classes.html

Continúa en la ruta de aprendizaje de OOP

El siguiente artículo en la ruta de aprendizaje de OOP cubre OOP Begriffe: Attribute, Nachrichten, Methodenaufruf, Persistenz & Schnittstellen - conceptos clave de OOP explicados.

Lecturas recomendadas: Programación orientada a objetos

Keine Bücher für Kategorie "objektorientierte-programmierung" gefunden.

Volver al blog
Share:

Nächster Artikel in Desarrollo de Software

Weiterlesen
OOP Herencia: Inheritance, Polimorfismo y Principios

Entradas relacionadas