Clase final
Técnicas de programación 1
1
POO
2
Java: Clases y Objetos
Estructura de una clase
as e
el C
Cam
c ión Datos
ota
N Comportamiento
• Nombre clase: UpperCamelCase, las iniciales de cada palabra
que compone el nombre van en mayúscula.
• Nombre atributos: lowerCamelCase, la primera palabra va toda
en minúscula y la inicial de las demás palabras va en mayúscula.
• Nombre métodos: lowerCamelCase, la primera palabra va toda
en minúscula y la inicial de las demás palabras va en mayúscula.
3
Java: Clases y Objetos
Estructura de una clase
Acceso
- private
+ public
# protected
Modificadores de acceso
Encapsulamiento: Se recomienda que los ATRIBUTOS estén como
privados y acceder a ellos para evitar que puedan ser modificados
directamente desde otras clases.
4
Java: Clases y Objetos
Nomenclatura
Modelo Código
- edad : int private int edad;
5
Java: Clases y Objetos
Nomenclatura
Modelo Código
- edad : int private int edad;
public int sumar(int num){
+ sumar(num : int):int int suma = num + 5;
return suma;
}
6
Java: UML
UML
UML (Unified Modeling Language) es el lenguaje de
modelado unificado que permite la representación gráfica de
elementos o componentes de un software. En POO suele
utilizarse para representar las clases de un proyecto y las
relaciones entre las mismas.
7
Constructor y objetos
8
Java: POO - Constructor
Constructor
• Lleva el mismo nombre de la clase
Mé • NO retorna
tod
o
• Todas las clases de Java tienen un constructor
Clas • El constructor por defecto no recibe parámetros
es • Se pueden definir constructores propios que reciban
Jav parámetros
a
• Función principal: permite crear objetos/instancias de una
clase (instanciar una clase)
Obj • Al crear un objeto se copian los atributos de la clase
eto plantilla y se puede acceder a los métodos públicos
s
9
Java: POO - Objeto
Objeto
Se tiene una clase Persona con los atributos nombre y edad.
Además la clase tiene el método saludar.
Un objeto/instancia de la clase Persona se definiría así:
Persona persona1 = new Persona();
Tipo de dato Nombre de la variable Asignación Inicialización Constructor
Clase Objeto/instancia Reserva espacio en En este ejemplo se
memoria usa el constructor
por defecto
10
Java: POO
Ejemplo
11
Java: POO
Ejemplo
Public class GestionPersonas{ Public class Persona{
private Persona objPersona1; private String nombre;
private Persona objPersona1; private int edad;
public static void main(String public Persona(String
args[]){ nombre, int edad){
objPersona1 = new Persona("Ana", 20); this.nombre = nombre;
objPersona1 = new Persona("Luis", 20); this.edad = edad;
} }
} }
12
Java: POO
THIS
Cuando se utiliza this, se está haciendo referencia al contexto
donde se encuentra.
Por ejemplo, si se crea un objeto de la clase Persona y en la clase
Persona se utiliza el this, este hará referencia a la copia de la clase
que representa a ese objeto.
En el ejercicio anterior, al crear objPersona1 y utilizar el
constructor de la clase, el this que se usa en el constructor
permite hacer referencia a los atributos propios del objeto
creado, diferenciándolos de los parámetros que se reciben por el
constructor.
13
Getters y setters
14
Java: POO
Getters y Setters
Para poder implementar el encapsulamiento, en JAVA existen
unos métodos que permiten acceder de forma segura a los
atributos privados de una clase. Esos métodos se conocen
como Getters y Setters.
Los Getters recuperan o dan información.
Los Setters modifican información.
15
Acceder a un objeto usando
ArrayList
16
Java: POO y ArrayList
import java.util.ArrayList; Public class Persona{
Public class GestionPersonas{ private String nombre;
private ArrayList <Persona> personas = private int edad;
new ArrayList();
public Persona(String
public static void main(String args[]) nombre, int edad){
{ this.nombre = nombre;
Persona obj1 = new Persona ("Ana", 18); this.edad = edad;
personas.add(obj1); }
//personas.get(0) -> trae el objeto
personas.get(0).getEdad(); public int getEdad(){
} return edad;
} }
}
17
Pilares de la programación
18
Java: Pilares POO
Pilares de POO
protected
• Protección de los componentes de una clase
private
Encapsulamiento
• Proteger la visibilidad de los atributos y métodos
• Una clase permite heredar sus atributos y métodos
extends
Herencia • Superclase (clase padre) y clase hija (la que
hereda).
• Enviar mensajes iguales a objetos de distintos tipos.
extends
Polimorfismo
• Responder de distinto modo a un mismo mensaje.
• Extraer métodos y atributos comunes.
Abstracción
• No se pueden crear objetos de estas clases.
Métodos abstractos: abstract void método();
Se declaran en una clase abstracta pero no se implementan.
19
Java: Pilares POO
Pilares de POO
protected
• Protección de los componentes de una clase
private
Encapsulamiento
• Proteger la visibilidad de los atributos y métodos
• Una clase permite heredar sus atributos y métodos
extends
Herencia • Superclase (clase padre) y clase hija (la que
hereda).
• Enviar mensajes iguales a objetos de distintos tipos.
extends
Polimorfismo
• Responder de distinto modo a un mismo mensaje.
• Extraer métodos y atributos comunes.
Abstracción
• No se pueden crear objetos de estas clases.
Métodos abstractos: abstract void método();
Se declaran en una clase abstracta pero no se implementan.
20
Herencia
21
Java: Herencia
Concepto de herencia
Dos clases puede relacionarse por la colaboración o asociación
simple (tiene un, es parte de), como se ha trabajado hasta el
momento. Pero existen otros tipos de relaciones entre clases y
una de estas es la herencia.
La relación de herencia (es un/una) o herencia consiste en
poder crear clases a partir de clases que ya existen.
• Clases hijas: Nuevas clases que se crean a partir de las clases
ya existentes. También son conocidas como clases hija.
• Superclases: Clases de las que se hereda. También conocidas
como clases padre.
22
Java: Herencia
Asociación Vs Herencia
Asociación simple o directa Herencia
Clase A Clase A
tiene un /
es un/a
es parte de
Clase B Clase B
Clase B es un/a Clase A
Clase A tiene un objeto de Clase B /
Un objeto de Clase B es parte de Clase A Cirulo es una Figura
Circulo hereda de Figura 23
Java: Herencia
Asociación Vs Herencia
Asociación simple o directa Herencia
Superclase/
Clase A Clase A Padre
tiene un /
es un/a
es parte de
Clase B Clase B Hija
Clase B es un/a Clase A
Clase A tiene un objeto de Clase B /
Un objeto de Clase B es parte de Clase A Cirulo es una Figura
Circulo hereda de Figura 24
Java: Herencia
¿Qué se hereda?
• Se heredan los atributos y métodos públicos de la
superclase.
• Se continúa aplicando el pilar del Encapsulamiento
(public, private, protected).
25
Java: Herencia
¿Cómo se hereda?
• Añadiendo, en la declaración de la clase hija, la palabra
reservada extends junto con el nombre de la superclase.
Ejemplo:
public class Felino extends Animal{
//contenido de la clase
}
26
Java: Herencia
¿Cómo se hereda?
• Añadiendo, en la declaración de la clase hija, la palabra
reservada extends junto con el nombre de la superclase.
Ejemplo:
public class Felino extends Animal{
//contenido de la clase
}
Esto significa que la clase Felino hereda (extends) de la
superclase Animal.
También se puede decir que: Felino es un Animal
27
Java: Herencia
Ejemplo
Diagrama de clases UML
28
Java: Herencia
Ejemplo
Diagrama de clases UML
extends extends
29
Java: Herencia
Clase Persona
package ejemploherencia;
public class Persona {
private String nombre;
private int edad;
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setEdad(int edad) {
this.edad = edad;
}
@Override
public String toString() {
return "Persona{" + "nombre=" + nombre + ", edad=" + edad + '}';
}
}
30
Java: Herencia
Clase Profesor
package ejemploherencia;
public class Profesor extends Persona{
private String profesion;
public String getProfesion() {
return profesion;
}
public void setProfesion(String profesion) {
this.profesion = profesion;
}
31
Java: Herencia
Clase Estudiante
package ejemploherencia;
public class Estudiante extends Persona{
private String nombreCarrera;
public String getNombreCarrera() {
return nombreCarrera;
}
public void setNombreCarrera(String nombreCarrera) {
this.nombreCarrera = nombreCarrera;
}
@Override
public String toString() {
return "Estudiante{" + "nombreCarrera=" + nombreCarrera + '}';
}
32
Java: Herencia
Clase Ejemplo Herencia
package ejemploherencia;
public class EjemploHerencia {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Estudiante estudiante1 = new Estudiante();
estudiante1.setNombre("Ana");
estudiante1.setEdad(12);
System.out.println("Estudiante: ");
System.out.println(estudiante1);
Profesor profe1 = new Profesor();
profe1.setNombre("Luis");
profe1.setEdad(28);
System.out.println("\nProfesor: ");
System.out.println(profe1);
}
33
Interfaces gráficas Java
GUI – Grafical User Interface
Usando el paquete swing
34
Java: GUI Java
¿Cómo se crea una GUI en Java?
• Una de las formas es utilizando las clases del paquete
swing de Java.
• El nuevo formulario o GUI que se cree debe heredar
(extends) de JFrame.
• Esto hace que la clase hija que hereda de la superclase
JFrame, se comporte como un contenedor de componentes
de GUI.
35
Java: GUI Java
Ejemplo 1
package miprimerformulario;
import javax.swing.JFrame;
public class MiPrimerFormulario extends JFrame{
public MiPrimerFormulario() {
setLayout(null);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
MiPrimerFormulario formulario1=new MiPrimerFormulario();
formulario1.setBounds(10,20,700,400);
formulario1.setVisible(true);
}
• setBounds Para definir la ubicación inicial de la interfaz
(en el ejemplo 10, 20) y el tamaño de la misma (700,400).
• setVisible(true) Para abrir el formulario. Si se coloca como
false, no se abriría nada al ejecutar el programa.
36
Java: GUI Java
Ejemplo
Una vez que se ejecuta el anterior ejemplo, aparece una
ventaja con las dimensiones indicadas (700,400) en la parte
superior izquierda así:
700
400
37
Java: GUI Java
package miprimerformulario;
Ejemplo 2
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.Border;
public class MiPrimerFormulario extends JFrame implements ActionListener {
//Panels
JPanel panelSuperior = new JPanel();
JPanel panelCentral = new JPanel();
JPanel panelInferior = new JPanel();
//Cajas de texto
JTextField campoTxtAreaIzq = new JTextField();
JTextField campoTxtAreaDer = new JTextField();
//Áreas de texto
JTextArea txtAreaIzquierda = new JTextArea("Texto por defecto area izquierda");
JTextArea txtAreaDerecha = new JTextArea("Texto por defecto area derecha");
//Botones
JButton btnEnviarAreaIzq = new JButton("Enviar");
JButton btnEnviarAreaDer = new JButton("Enviar");
//Etiquetas
JLabel lblNombre = new JLabel("Nombre");
JLabel lblApellido = new JLabel("Apellido");
JLabel lblEdad = new JLabel("Edad");
//Constructor de la clase
public MiPrimerFormulario() {
//En el panel superior se crea un Layout de 1 fila y 2 columnas
panelCentral.setLayout(new GridLayout(0, 2));
//Linea negra para el borde de las areas de texto
Border lineaNegra = BorderFactory.createLineBorder(Color.black);
txtAreaIzquierda.setBorder(lineaNegra);
txtAreaDerecha.setBorder(lineaNegra);
//colocando el color de fondo para las areas de texto
txtAreaIzquierda.setBackground(Color.WHITE);
txtAreaDerecha.setBackground(Color.WHITE);
//se agrega primero el txtAreaIzquierda para que quede a la izquierda
panelCentral.add(txtAreaIzquierda);
//luego se agrega de segundo el txtAreaDerecha para que quede a la derecha
panelCentral.add(txtAreaDerecha);
//En el panel inferior se crea un Layout de 1 fila y 4 columnas
//para agregar un campo de texto para cada area de texto
panelInferior.setLayout(new GridLayout(1, 4));
//Agregando el boton al panelInferior
panelInferior.add(campoTxtAreaIzq);
panelInferior.add(btnEnviarAreaIzq);
panelInferior.add(campoTxtAreaDer);
panelInferior.add(btnEnviarAreaDer);
//Se añaden los dos paneles a la ventana principal
add(panelSuperior, BorderLayout.NORTH);
//el panel superior en la ubacion CENTER
add(panelCentral, BorderLayout.CENTER);
//el panel inferior en la ubicacion SOUTH
add(panelInferior, BorderLayout.SOUTH);
btnEnviarAreaIzq.addActionListener(this);
btnEnviarAreaDer.addActionListener(this);
public static void main(String[] ar) {
MiPrimerFormulario formulario1 = new MiPrimerFormulario();
//Se define la posición y tamaño de la ventana principal
formulario1.setBounds(200, 200, 500, 300);
//En el frame o ventana principal se hace visible
formulario1.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnEnviarAreaIzq) {
//En el area de texto de la izquierda se coloca lo que haya en el campo de texto de la izquierda
txtAreaIzquierda.setText(campoTxtAreaIzq.getText());
}
if (e.getSource() == btnEnviarAreaDer) {
//En el area de texto de la derecha se coloca lo que haya en el campo de texto de la derecha
txtAreaDerecha.setText(campoTxtAreaDer.getText());
}
}
}
38
Técnicas de programación 1
¡GRACIAS!
39