Diagrama de clase con atributos, métodos y múltiples instancias en memoria
← RECURSOS

Programación Orientada a Objetos: Clases, Instanciación y Métodos

Principios fundamentales del paradigma orientado a objetos: definición de clases, instanciación en memoria, constructores y métodos.

📌 En síntesis: Principios fundamentales del paradigma orientado a objetos: definición de clases, instanciación en memoria, constructores y métodos.

Guía técnica desarrollada por el equipo de Proyecto Luna para formación profesional y consulta técnica abierta.


En esta primera semana, te adentrarás en el mundo de la Programación Orientada a Objetos (POO), un paradigma esencial del desarrollo de software moderno que permite crear programas organizados y reutilizables. A través de este enfoque, aprenderás a pensar como un programador que diseña soluciones basadas en objetos, es decir, en entidades que combinan datos y comportamientos para representar situaciones del mundo real. Este modelo te ayudará a construir soluciones más claras y escalables frente a los requerimientos de un cliente. Durante esta semana, identificarás los elementos fundamentales de la POO, como las clases, los objetos, los atributos, los métodos, los constructores, el encapsulamiento y la herencia. Además, comenzarás a desarrollar soluciones con interfaz gráfica, integrando componentes como cajas de texto, botones, listas y casillas de verificación, que permiten la interacción directa entre el usuario y la aplicación. Este apunte presenta los conceptos básicos para comprender la importancia de la POO y su aplicación en el desarrollo de soluciones informáticas efectivas y bien estructuradas.


🚀 Introducción

POO es un paradigma que organiza el código en torno a entidades llamadas objetos, los cuales integran datos y comportamientos para representar elementos del mundo real o abstracto. Según Groussard (2015), este enfoque permite desarrollar programas más flexibles, comprensibles y fáciles de mantener, al estructurar el código en unidades lógicas que colaboran entre sí. En la POO, el desarrollo gira en torno a ciertos elementos esenciales que definen la estructura y funcionalidad del programa: clases, objetos, atributos, métodos, constructores, encapsulamiento y paquetes. Cada uno cumple un papel específico en la construcción de aplicaciones eficientes y organizadas.

🔹 1.1. Clases y objetos

Una clase es la plantilla o modelo que define las propiedades y comportamientos de un conjunto de objetos. Un objeto es una instancia concreta creada a partir de esa clase. Gervais (2019) explica que las clases agrupan datos (atributos) y funciones (métodos) que operan sobre esos datos, constituyendo la base de la abstracción en Java.


🧩 1. Elementos de programación orientada a objeto

Elemento Descripción Ejemplo en Java y su sintaxis Clase, cáscara Define la estructura general de un tipo de objeto. Objeto Instancia concreta creada a partir de una clase. Se utiliza el operador new para instanciarlo o crearlo Atributos Características o datos del objeto, que se escriben en sustantivo. Mayor rapidez en la contratación Métodos Acciones o comportamientos del objeto. public void saludar() { System.out.println(“Hola”); } Persona p1 = new Persona(); private String nombre; private int edad; Tabla 1. Elementos de la Programación Orientada a Objetos y su sintaxis Fuente: adaptado de Groussard (2015), Gervais (2019) y Reese (2001)

🔹 1.2. Constructores

Un constructor es un método especial que se ejecuta automáticamente cuando se crea un objeto. Su función es inicializar los atributos de la clase, garantizando que el objeto comience en un estado válido. Según Gervais (2019), los constructores permiten simplificar la creación de objetos personalizados y favorecen la legibilidad del código, ya que cada instancia puede configurarse de manera única desde su creación, con valores iniciales que en su mayoría pueden cambiar en el tiempo.

🔹 1.3. Encapsulamiento

El encapsulamiento consiste en proteger los datos internos de una clase, restringiendo su acceso directo desde el exterior. Groussard (2015) resalta que este principio mantiene la integridad de los datos, asegurando que solo se modifiquen a través de métodos controlados (getters y setters). Elemento Propósito Ejemplo en Java Constructor por defecto Crea objetos sin parámetros. public Persona() { acá va la inicialización de los atributos con un valor por defecto } Constructor con parámetros Inicializa valores específicos al crear el objeto. public Persona(String n, int e) { nombre = n; edad = e; }

Este principio promueve la seguridad y el control de los datos dentro del programa, además de reforzar la separación entre la interfaz pública y la implementación interna.

🔹 1.4. Paquetes y organización del código

Los paquetes (packages) agrupan clases relacionadas, facilitando la organización y mantenimiento del código. Según Reese (2001), esta estructura jerárquica permite desarrollar aplicaciones complejas de forma modular, evitando conflictos entre clases y promoviendo la reutilización. Para su definición se utiliza la palabra reservada package, y es la primera sentencia dentro del código, su sintaxis es: package nombrePaquete; Elemento Función Ejemplo en Java Atributo privado Protege los datos del acceso directo. private String nombre; Métodos getter/setter Permiten acceder o modificar los datos de forma segura. getNombre(), retorna el nombre a quien lo solicite setNombre(String nombre) cambia el valor de nombre que estaba por el nuevo entregado en este paréntesis Tabla 3. Elementos asociados al encapsulamiento de la Programación Orientada a Objetos Fuente: adaptado de Groussard (2015), Gervais (2019) y Reese (2001) Elemento Descripción Ejemplo Paquete Carpeta lógica que agrupa clases relacionadas. package empresa.empleados; Importación Permite usar clases de otros paquetes. import empresa.empleados. Empleado; Tabla 4. Paquetes y organización del código en Java Fuente: adaptado de Reese (2001), Groussard (2015) y Gervais (2019)

En conclusión, comprender los elementos de la POO te permite desarrollar una visión estructurada del código, identificando cómo las clases, objetos y métodos interactúan para formar sistemas coherentes. Este conocimiento es la base para crear programas más modulares y reutilizables, promoviendo buenas prácticas de diseño que facilitan el mantenimiento, la ampliación y la comprensión del software en entornos reales de desarrollo. Ejemplo de código aplicando los conceptos aprendidos, para la clase punto, que representa un punto en el plano cartesiano:

Figura 1. Package, cáscara y definición de atributos con encapsulamiento Figura 1. Package, cáscara y definición de atributos con encapsulamiento

Figura 2. Constructores para la clase punto, sobrecargados. Figura 2. Constructores para la clase punto, sobrecargados.

Figura 3. Accedores (getters) y mutadores (setters) para los atributos de la clase Figura 3. Accedores (getters) y mutadores (setters) para los atributos de la clase

Figura 4. Métodos de impresión y de propósito de cliente para la clase Punto Figura 4. Métodos de impresión y de propósito de cliente para la clase Punto


📌 2. Herencia

La herencia es uno de los pilares fundamentales de la POO. Este principio permite que una clase (denominada subclase o clase hija) adquiera los atributos y métodos de otra clase (superclase o clase padre). Gracias a la herencia, se promueve la reutilización del código, la extensibilidad de los programas y una estructura jerárquica más clara, lo que facilita la organización y comprensión del sistema (Gervais, 2019). En Java, la herencia se implementa mediante la palabra clave extends, que permite crear nuevas clases basadas en clases existentes. Por ejemplo, si se define una clase Empleado, se puede crear una subclase Gerente que herede sus atributos y métodos, añadiendo comportamientos específicos según sea necesario. Este enfoque favorece el mantenimiento y la escalabilidad del software (Groussard, 2015). A través de la herencia, las subclases también pueden sobrescribir métodos de la superclase para modificar su comportamiento. Este proceso se conoce como overriding y se logra empleando la anotación Override. Además, Java soporta herencia simple, es decir, una clase sólo puede heredar directamente de una única superclase, aunque puede implementar múltiples interfaces para agregar funcionalidades adicionales (Reese, 2001). La siguiente tabla muestra los tipos de herencia en Java: Tabla 5. Tipos de herencia en Java Fuente: adaptado de Reese (2001), Groussard (2015) y Gervais (2019) Tipo de herencia Descripción Ejemplo en Java Herencia simple Una clase hereda de una única superclase. Herencia multinivel Una clase hereda de otra que, a su vez, hereda de una tercera. Herencia jerárquica Varias clases heredan de una misma superclase. class Gerente extends Empleado {} class Director extends Gerente {} class Empleado, class Cliente extienden Persona Mediante interfaces Permite simular herencia múltiple implementando varias interfaces. class Gerente implements Líder, Trabajador

🔹 2.1. Acceso a la clase padre

En Java, una subclase puede acceder a los miembros (atributos y métodos) de su clase padre, siempre que estos no sean privados. ● Los miembros públicos (public) y protegidos (protected) son accesibles directamente desde la subclase. ● Los miembros privados (private) no son accesibles de forma directa, pero pueden ser utilizados a través de métodos públicos o protegidos definidos en la superclase. Para hacer referencia explícita a la clase padre, se utiliza la palabra clave super, que cumple dos funciones principales: 1. Llamar al constructor de la superclase, permitiendo inicializar correctamente los atributos heredados. Ejemplo: super(nombre, salario); 2. Acceder a los métodos o atributos de la superclase que han sido sobrescritos en la subclase. Ejemplo: super.mostrarDatos(); El uso adecuado de super garantiza que las clases hijas mantengan la coherencia funcional con sus clases padre, respetando la estructura jerárquica de la herencia (Gervais, 2019).

🔹 2.2. Crear clases hijas

Figura 5. Diagrama de representación de herencia Figura 5. Diagrama de representación de herencia

Crear una clase hija en Java implica extender una clase existente mediante la palabra clave extends, para heredar sus características y añadir nuevas funcionalidades. Ejemplo:

En este ejemplo, Gerente es un Empleado que tiene nombre y Salario (heredado de Empleado) y que se especializa con el atributo departamento, además de sobrescribir el método mostrarDatos() para incluir información adicional. De esta forma, la subclase amplía las capacidades de la clase padre sin duplicar código (Groussard, 2015). En síntesis, la herencia constituye una herramienta esencial para construir programas más organizados y reutilizables, al permitir que las clases compartan y amplíen comportamientos de manera coherente. Su correcta aplicación no solo optimiza el uso del código, sino que también favorece

Figura 6. Clase Padre o super clase Empleado Figura 6. Clase Padre o super clase Empleado

Figura 7. Clase hija o subclase Gerente, Figura 7. Clase hija o subclase Gerente,

la creación de jerarquías lógicas que reflejan relaciones del mundo real, fortaleciendo la claridad y eficiencia del diseño orientado a objetos.


📌 3. Interfaz gráfica

La interfaz gráfica de usuario (GUI, por sus siglas en inglés) es el medio que permite a los usuarios interactuar con una aplicación de forma visual y sencilla. En lugar de escribir comandos en una consola, el usuario puede comunicarse con el programa a través de ventanas, botones, listas o cuadros de texto, lo que hace la experiencia mucho más intuitiva y agradable (Reese, 2001). En Java, existen varias herramientas para crear interfaces gráficas. Las más utilizadas son AWT, Swing y JavaFX, cada una con sus propias características y ventajas. 1. AWT (Abstract Window Toolkit) ● Fue la primera biblioteca gráfica de Java. ● Usa los componentes nativos del sistema operativo (botones, cajas de texto, menús, listas desplegables, cadillac de verificación, etc.). ● Permite crear interfaces simples y ligeras. ● Soporta manejo de eventos (respuestas del programa ante acciones del usuario). Ventajas: ● Ligera y rápida para aplicaciones pequeñas. ● Integración directa con el sistema operativo. Desventajas: ● Apariencia diferente en cada sistema operativo. ● Poca flexibilidad para personalizar los componentes.

  1. Swing ● Es una evolución de AWT, completamente escrita en Java. ● Introduce componentes como: - JButton (botón) - JTextField (campo de texto) - JComboBox (lista desplegable) - JPanel (contenedor visual) ● Permite aplicar diferentes estilos visuales (Look and Feel). ● Soporta manejo de eventos (respuestas del programa ante acciones del usuario). Ventajas: ● Portabilidad: funciona igual en cualquier sistema operativo. ● Gran variedad de componentes y opciones visuales. ● Amplia comunidad y documentación. Desventajas: ● Menor rendimiento en interfaces complejas. ● Diseño visual menos moderno comparado con JavaFX. 3. Plataforma moderna para crear interfaces avanzadas. ● Permite usar: - Animaciones y transiciones. - Gráficos 2D y 3D. - Estilos CSS para personalizar la apariencia. - FXML, un lenguaje basado en XML que separa la parte visual de la lógica del programa. ● Es ideal para aplicaciones interactivas y actuales.

Ventajas: ● Diseño moderno y atractivo. ● Integración con herramientas multimedia. ● Separación clara entre diseño y programación. Desventajas: ● Requiere más recursos del sistema. ● Curva de aprendizaje más alta para principiantes. 4. Contenedores y componentes ● Los contenedores (como JFrame- heredado de Frame o JPanel heredado de Panel) son estructuras donde se colocan los elementos visuales. ● Los componentes son los elementos que el usuario utiliza: botones, cajas de texto, listas, casillas, etc. ● Para organizarlos, se usan los Layout Managers, que distribuyen los componentes de manera ordenada y adaptable. Ventajas: ● Facilita el diseño estructurado de interfaces. ● Permite adaptar la interfaz a diferentes tamaños de ventana o dispositivos. Desventajas: ● Puede ser complejo dominar los diferentes tipos de layouts. ● Requiere planificación previa para mantener la coherencia visual.

  1. Usabilidad y diseño ● Una buena interfaz no solo debe verse bien, sino también ser fácil de usar. ● Los botones deben tener nombres claros. ● Las opciones deben estar bien agrupadas. ● Los colores y tamaños deben facilitar la lectura y no distraer al usuario. Ventajas: ● Favorece la comprensión y rapidez en la interacción. ● Mejora la experiencia del usuario. Desventajas: ● Requiere pruebas con usuarios reales. ● Un mal diseño puede dificultar el uso o causar errores. La siguiente tabla complementa la información anterior al presentar las principales bibliotecas utilizadas para construir interfaces gráficas en Java. Cada una ofrece diferentes características, ventajas y limitaciones que influyen en la forma en que el usuario interactúa con la aplicación y en la facilidad de desarrollo para el programador.

En conclusión, la interfaz gráfica constituye un elemento clave para lograr una interacción intuitiva y eficiente entre el usuario y la aplicación. Su correcta implementación no solo mejora la experiencia visual, sino que también facilita la comprensión y el uso del programa, permitiendo desarrollar aplicaciones más accesibles, funcionales y centradas en las necesidades del usuario.


🧩 4. Componentes

En una aplicación con interfaz gráfica, los componentes son los elementos visuales que el usuario utiliza para interactuar con el programa. Cada componente cumple una función específica: mostrar información, permitir el ingreso de datos o ejecutar acciones. En Java, los componentes se crean principalmente con las bibliotecas Swing o JavaFX, y se agrupan dentro de contenedores como JFrame o JPanel. Tabla 6. Comparación entre bibliotecas gráficas en Java Fuente: adaptado de Reese (2001), Groussard (2015) y Gervais (2019) Biblioteca Características principales Ventajas Limitaciones AWT Biblioteca original de Java; usa componentes nativos del sistema. Basada en AWT; completamente escrita en Java. Swing JavaFX Simple y ligera. Portabilidad; variedad de componentes; personalización visual. Menor rendimiento en interfaces complejas. Plataforma moderna con soporte multimedia. Diseño moderno; animaciones; integración con CSS y FXML. Mayor consumo de recursos y curva de aprendizaje alta. Apariencia variable entre sistemas.

Los componentes son esenciales porque: ● Permiten recoger datos (por ejemplo, el nombre del usuario o su correo). ● Facilitan la interacción mediante botones, listas o casillas. ● Hacen que la aplicación sea más intuitiva y dinámica, guiando al usuario paso a paso

🔹 4.1. Caja de texto (JTextField/TextField)

● Es un componente que permite al usuario ingresar texto corto, como su nombre o una dirección de correo. ● En Java Swing, se usa JTextField y se puede inicializar indicando su tamaño (número de columnas). ● Puede tener un valor inicial, validación de datos y eventos asociados (por ejemplo, presionar Enter). Ejemplo: JTextField txtNombre = new JTextField(20); Uso común: formularios de registro, búsqueda o ingreso de datos numéricos. (Gervais, 2019)

🔹 4.2. Área de texto (JTextArea)

● Se utiliza para ingresar o mostrar texto más extenso, como comentarios o descripciones. ● Permite el ajuste automático de líneas (line wrapping) y el uso de barras de desplazamiento (scroll bars). ● Es ideal para campos donde el texto no tiene una longitud fija. Ejemplo: JTextArea txtComentario = new JTextArea(5, 30); Uso común: cuadros de observaciones o mensajes. (Reese, 2001)

🔹 4.3. Botón (JButton/Button)

● Permite ejecutar una acción cuando el usuario hace clic. ● Cada botón puede tener texto, un ícono o ambos. ● Se utiliza junto con un evento que define lo que debe ocurrir (por ejemplo, guardar datos o cerrar una ventana). Ejemplo: JButton btnEnviar = new JButton(“Enviar”); Uso común: enviar formularios, abrir archivos, navegar entre pantallas (Groussard, 2015).

🔹 4.4. Lista (JList/ComboBox)

● Permite mostrar un conjunto de opciones al usuario. ● Puede ser de selección única (el usuario elige una sola opción) o múltiple (varias opciones). ● El componente más usado es JComboBox, una lista desplegable que ahorra espacio en la interfaz. Ejemplo: JComboBox cmbOpciones = new JComboBox<>(new String[]{“Opción 1”, “Opción 2”, “Opción 3”}); Uso común: selección de país, género o categoría (Gervais, 2019).

🔹 4.5. Casilla de verificación (JCheckBox, Choice)

● Permite activar o desactivar una opción determinada. ● Puede haber una o varias casillas en un mismo formulario. ● Es útil cuando se requiere que el usuario seleccione varias opciones de un conjunto.

Ejemplo: JCheckBox chkAceptar = new JCheckBox(“Acepto los términos”); Uso común: formularios, configuraciones y preferencias (Reese, 2001).

🔹 4.6. Etiquetas y mensajes (JLabel)

● Se utilizan para mostrar texto o imágenes estáticas. ● Ayudan a guiar al usuario dentro de la interfaz, indicando qué debe ingresar o qué acción realizar. Ejemplo: JLabel lblNombre = new JLabel(“Ingrese su nombre:”); Uso común: instrucciones, nombres de campos o mensajes de confirmación (Groussard, 2015).

🔹 4.7. Organización y diseño

● Los componentes se organizan dentro de contenedores mediante Layout Managers. ● Esto garantiza que los elementos estén bien alineados y que se adapten al tamaño de la ventana. ● Algunos layouts comunes son: - FlowLayout: distribuye los componentes en línea, como texto en un párrafo. - BorderLayout: divide la ventana en zonas (norte, sur, este, oeste y centro). - GridLayout: organiza los componentes en filas y columnas (Gervais, 2019). En conclusión, los componentes básicos de una interfaz gráfica en Java Swing, como los campos de texto, botones, listas y casillas de verificación, permiten la interacción dinámica entre el usuario y la aplicación. Su correcta selección y organización mediante Layout Managers contribuye a

crear interfaces funcionales, intuitivas y visualmente ordenadas, facilitando así la experiencia del usuario en el desarrollo de software. Ejemplo de una interfaz gráfica escrita en AWT, que contiene un Label o etiqueta y un campo de texto o TextField:

Figura 8. Código en AWT de una ventana de ingreso Figura 8. Código en AWT de una ventana de ingreso

Figura 8. Resultado de la ejecución del código, sin Figura 8. Resultado de la ejecución del código, sin

agregar el evento aún, que permita la funcionalidad

Durante esta primera semana, pudiste consolidar los fundamentos de la POO y su relación con el desarrollo de aplicaciones con interfaz gráfica. A través de ejercicios y reflexiones, has observado cómo los conceptos de clase, objeto, atributo, método y herencia permiten estructurar soluciones claras, organizadas y reutilizables, favoreciendo una programación más eficiente y coherente. Asimismo, al trabajar con la interfaz gráfica, has podido reconocer la importancia de los componentes visuales como botones, cajas de texto, listas o casillas de verificación para mejorar la interacción entre el usuario y el programa. Este enfoque práctico te permitió conectar la teoría con la aplicación real, fortaleciendo la capacidad para analizar requerimientos del cliente y traducirlos en código funcional. Finalmente, esta experiencia refuerza la idea de que programar implica tanto pensamiento lógico como creatividad. Dado ello, no solo aprendes a codificar, sino también a diseñar soluciones eficientes y centradas en el usuario, sentando las bases para avanzar hacia proyectos más complejos y profesionales en las siguientes semanas.


💡 Conclusión

  • Groussard, T. (2015). JAVA 8: Los fundamentos del lenguaje Java (con ejercicios prácticos corregidos). Editorial: ENI. Formato digital disponible en biblioteca .

  • Gervais, L. (2019). Aprender la Programación Orientada a Objetos con el lenguaje Java: Los fundamentos del lenguaje Java (con ejercicios prácticos corregidos). Editorial: ENI. Formato digital disponible en biblioteca .

  • Reese, G. (2001). Programación de bases de datos con JDBC y JAVA. Editorial: Anaya Multimedia. Formato impreso disponible en biblioteca .



🚀 Potencia tus proyectos tecnológicos con Proyecto Luna

En Proyecto Luna desarrollamos arquitectura de software de alto rendimiento, optimización de bases de datos críticas y soluciones aplicadas de inteligencia artificial y automatización para empresas y profesionales.

  • 💼 Soluciones de ingeniería: Conoce nuestras capacidades y casos de estudio en proyectoluna.com/work/.
  • 🛡️ Seguridad y auditoría: Orientación técnica y respuesta ante incidentes en ¿Te han hackeado?.
  • 📩 Contacto directo: Escríbenos a través de nuestro formulario de contacto o a contacto@proyectoluna.com.

📚 Fuentes y lecturas recomendadas

CONTINÚA EXPLORANDO

ARTÍCULOS SUGERIDOS

Dilema ético en la toma de decisiones tecnológicas e informáticasInformática

Actos Humanos, Libertad y Dilemas Éticos en la Tecnología

Análisis de decisiones éticas: actos del hombre vs actos humanos voluntarios, consentimiento, privacidad de datos y dilemas en algoritmos de IA.

Representación conceptual de la dignidad de la persona y la ética del trabajoInformática

Dignidad de la Persona, Ética de las Virtudes y Excelencia Profesional

La persona como centro de la actividad técnica: dignidad intrínseca, virtudes cardinales y búsqueda de la excelencia en el ejercicio del trabajo.

Representación simbólica de la balanza de la justicia y la éticaInformática

Fundamentos de la Ética: Moral, Leyes y Responsabilidad Social

Distinción conceptual entre ética y moral: el origen de las normas de convivencia, relación con el ordenamiento jurídico y responsabilidad ciudadana.

VER TODOS LOS RECURSOS →

HABLEMOS DE TU CASO

¿Necesitas ayuda? Contáctanos y te contestamos!

SERVICIOS →