Está en la página 1de 12

Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos.

2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

Tema 1. Objetos y clases

El objetivo de este capítulo es entender los conceptos de:

✓ Objetos
✓ Clases
✓ Campos o atributos
✓ Métodos
✓ Parámetros

1. Objetos y clases

Persona se refiere a una clase. Un ejemplo de Persona es un amigo


cuyo nombre es Antonio, apellidos Esono, y su fecha de nacimiento
27/04/1997, es hombre y pesa 62,7kg. Otro ejemplo de Persona es
Angel Moka Bioko, nacido el 21/02/1910, es hombre y pesa 55,6 kg

Los objetos modelan los elementos del dominio de un problema y se


crean a partir de clases. La clase describe la categoría del objeto, es
decir, las características comunes a otros objetos de la misma clase. Los
objetos representan casos individuales de una clase. Diremos que el
objeto a es una instancia de la clase Persona.

Instancias múltiples. Se pueden crear muchos objetos similares a partir


de una sola clase, cada una de las cuales tendrá valores concretos de los
atributos o campos.

Hemos creado dos objetos de la clase Persona:

• el objeto persona1
• el objeto a.

Convención. Los nombres de las clases comienzan con una letra mayúscula (como Persona) y los
nombres de los objetos con letras minúsculas (persona1). Esto ayuda a distinguir de qué elemento
estamos hablando.

1
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

Práctica de laboratorio 1
1. Instale la última versión de Java SE.
2. Instale el programa Visual Studio Code (VSC), con las extensiones necesarias para Java.
3. Crea una carpeta llamada lab-t1 y abre dicha carpeta desde VSC.
4. Crea los archivos: Persona.java y Programa.java
5. Presione F5 para compilar, ejecutar y depurar el programa.
6. Comente el resultado.
7. Analice la relación entre los modelos UML: clase Persona, objeto a y objeto persona1, y el código Java.

Clase Persona (Persona.java)


import java.util.Calendar;
import java.util.Date;

public class Persona {


private String nombre;
private String apellidos;
private String fechaNacimiento;
private char sexo;
private double peso;

public Persona(String nombre, String apellidos, String fechaNacimiento, char sexo, double peso) {
this.nombre = nombre;
this.apellidos = apellidos;
this.fechaNacimiento = fechaNacimiento;
this.sexo = sexo;
this.peso = peso;
}

public int edad(int a) {


return a - Integer.parseInt(fechaNacimiento.substring(6));
}

public String nombreCompleto() {


return nombre + " " + apellidos;
}

public String getNombre() {


return this.nombre;
}

public void setNombre(String nombre) {


this.nombre = nombre;
}

public String getApellidos() {


return this.apellidos;
}

public void setApellidos(String apellidos) {


this.apellidos = apellidos;
}

public char getSexo() {


return this.sexo;
}

public void setSexo(char sexo) {


this.sexo = sexo;
}

public double getPeso() {


return this.peso;
}

public void setPeso(double peso) {


this.peso = peso;
}

public String getFechaNacimiento() {


return this.fechaNacimiento;
}

public void setFechaNacimiento(String fechaNacimiento) {


this.fechaNacimiento = fechaNacimiento;
}

public void imprimir() {


int year = Calendar.getInstance().get(Calendar.YEAR);
System.out.println("### DATOS PERSONALES ###");
System.out.println("\tNombre: " + nombre + " " + apellidos);
System.out.println("\tEdad: " + edad(year));
System.out.println("\tSexo: " + sexo);
System.out.println("\tPeso: " + peso);
System.out.println("### ### ### ### ### ###");
System.out.println();
}
}

Clase Programa (Programa.java)


public class Programa {
public static void main(String[] args) {
Persona a = new Persona("Antonio", "Esono", "29/04/1967", 'M', 62.5);
Persona persona1 = new Persona("Angel", "Moka Bioko", "21/12/1910", 'M', 55.6);

a.imprimir();
persona1.imprimir();
}
}

2
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

2. Invocar métodos.
Los métodos modelan el comportamiento de un objeto. Podemos comunicarnos con los objetos invocando
sus métodos y, generalmente, los objetos hacen algo cuando invocamos sus métodos.

Práctica de laboratorio 2
Agregue un método llamado compararEdades a la clase Programa.
import java.util.Calendar;

public class Programa {


public static void main(String[] args) {
Persona a = new Persona("Antonio", "Esono", "29/04/1967", 'M', 62.5);
Persona persona1 = new Persona("Angel", "Moka Bioko", "21/12/1910", 'M', 55.6);

a.imprimir();
persona1.imprimir();

compararEdades(a, persona1);
compararEdades(persona1, a);
}

public static void compararEdades(Persona a, Persona b)


{
int year = Calendar.getInstance().get(Calendar.YEAR);
int edadA = a.edad(year);
int edadB = b.edad(year);
if (edadA > edadB) {
System.out.println(a.getNombre() + " es mayor que " + b.getNombre());
} else {
System.out.println(a.getNombre() + " no es mayor que " + b.getNombre());
}
}
}

• Se ha invocado el método imprimir de los objetos a y persona1


• Se ha invocado el método edad de los objetos a y b
• Se ha invocado el método getNombre de los objetos a y b.
• Se ha invocado el método de clase (método estático) compararEdades.

3. Parámetros.
Los parámetros proporcionan información adicional necesaria para que un método pueda realizar su tarea.

• El método edad de la clase Persona calcula la edad en función del año actual (parámetro a).
• El método estático que compararEdades, necesita como parámetros (a y b) dos objetos de la
clase Persona.

4. Signatura e invocación de métodos en java.

La signatura proporciona información sobre el método en cuestión.

• La parte comprendida entre paréntesis es la información sobre los parámetros requeridos.


• Para cada parámetro se define:
o un tipo
o un nombre.

Ejemplo:
void setApellidos(String apellidos)
Nombre del método setApellidos
Tipo de dato de retorno Ninguno → void
Parámetros Número de parámetros: 1
El nombre del parámetro ofrece alguna pista sobre Parámetro 1:
el significado del dato esperado por el método. Nombre: apellidos
Tipo: String

3
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

En java, dicho método se invoca, por ejemplo, de la siguiente manera:

• setApellidos(“Esono Ndong”)
• El parámetro esperado en este caso por setApellidos es una cadena de caracteres, por
tanto, debe ir entre comillas dobles.

En general:

• Para invocar un método, se escribe el nombre del método seguido de los valores de los
parámetros entre paréntesis y separados por comas.
• Los valores deben estar en acorde a sus respectivos tipos establecidos en la signatura.

Ejemplos sobre signatura e invocación de métodos

1. La signatura de un método llamado b1 que devuelve un número real, recibe dos parámetros: el
primer parámetro llamado a de tipo cadena, el segundo parámetro llamado c de tipo carácter.

double b1 (String a, char c) invocación → double x = b1(“Hola mundo”, ‘R’)

Observe que el método b1 devuelve un valor, por tanto, dicho valor se puede asignar a una variable,
en este caso, el valor se ha asignado a la variable x de tipo double.

• El primer parámetro es una cadena, su valor se proporciona entre comillas dobles,


• El segundo parámetro es un carácter, su valor se proporcionar entre comillas simples.

2. Escriba la signatura de un método llamado t, devuelve un número entero y no recibe parámetros.

int t () invocación → int n = t()

Observe que el método t devuelve un valor, por tanto, dicho valor se puede asignar a una variable,
en este caso, el valor se ha asignado a la variable n de tipo int.

3. Escriba la signatura de un método que no devuelve valor alguno y recibe 3 números enteros.
Proponer un nombre para el método y los parámetros.

void miMetodo (int x, int y, int z) invocación → miMetodo(8, 12, 14)

Observe que se ha definido un nombre para el método (miMetodo). Como dicho método no
devuelve ningún valor, no se puede asignar a una variable. Se ha definido nombres para los
parámetros también, tal como propone el ejercicio. En la invocación se proporcionan tres números
enteros para los parámetros definidos en la signatura.

5. Tipos de datos

Los parámetros tienen tipos de datos, el tipo de dato define el conjunto de valores que puede tomar un
parámetro.

En nuestro ejemplo setApellidos(“Esono Ndong”), el tipo de dato del parámetro es String, que
significa cadena de caracteres (palabra o frase). Debe poner entre comillas dobles, ejemplo =“Esono
Ndong”. En el caso del tipo carácter, debe ir entre comillas simples, ejemplo‘F’.

Tipo Norma y valores Ejemplos


byte Entero de 8 bits (1 byte)
sort Entero corto de 16 bits
int Enteros de 32 bits int m = 75; int p = 024; int q = 0x36;
long Enteros de 64 bits long r = 22L; long s = 0x33L;
float Reales IEEE-754 de 32 bits float x = 82.5f;
double Reales IEEE-754, de 64 bits (doble precisión double y = 3.24e1d; double z = 2.75e-2;
boolean Lógicos: true / false boolean v = true;
char Caracteres Unicode de 16 bits char letra = 'A' char salto = '\n'
String Cadenas de caracteres String str = “HOLA”

4
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

• Los enteros: byte, short, int, long. La diferencia es el tamaño de enteros que son capaces de representar.
• El tipo carácter: char, que representa un carácter entre comillas simples: ‘6’, ‘y’, ‘0’
• El tipo cadena String, que es una cadena de caracteres entre comillas dobles: “hola mundo”, “9”
• Los tipos reales: float y double
• El tipo lógico: boolean con dos valores posibles true o false (en minúsculas)

¿Cuál es el tipo de los siguientes valores?

0 “hola” 101 -1 True


int, short, long string int, short, long int, short, long ERROR
“33” 3.1415 ‘5’ ‘r’ ‘hola’
string double char char ERROR
false “true” str r hola
boolean string según el tipo de según el tipo de según el tipo de
la variable str la variable r la variable hola

Ejercicio de reflexión. ¿Por qué los valores del tipo carácter y del tipo cadena deben llevar comillas simples
y dobles respectivamente?, ¿por qué los valores (enteros) de tipo byte, sort, int y long se pueden
escribir directamente?, ¿por qué los valores booleanos se pueden escribir directamente?

6. Estado de los objetos

Los objetos tienen un estado que está representado por los valores almacenados en sus campos. Algunos
métodos, cuando son invocados, cambian el estado el objeto. Por ejemplo, el método setApellidos()
cambia el estado del objeto persona1, al modificar su apellido.

Los métodos describen el comportamiento de los objetos. Pues este comportamiento es predecible
precisamente si se conoce el estado del objeto, es decir, los valores concretos de sus campos en el momento
de invocar el método.

Ejemplo:
public class Programa {
public static void main(String[] args) {
Persona a = new Persona("Antonio", "Esono", "29/04/1967", 'M', 62.5);
a.imprimir();
a.setApellidos("Nguema Nchama");
a.imprimir();
}
}

### DATOS PERSONALES ###


Nombre: Antonio Esono
Edad: 55
Sexo: M
Peso: 62.5
### ### ### ### ### ###

### DATOS PERSONALES ###


Nombre: Antonio Nguema Nchama
Edad: 55
Sexo: M
Peso: 62.5
### ### ### ### ### ###
El primera invocación al método imprimir, se muestra el estado del objeto a (el estado son lo valores de sus
atributos o campos), luego se invoca al método setApellidos() que cambia el estado del objeto a (ya que
modifica por lo menos el valor de un atributo). En la segunda invocación al método imprimir, vemos el
nuevo estado del objeto a.

5
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

7. Interacción entre objetos.

Los objetos se pueden comunicar entre ellos invocando los métodos de los otros objetos.
public class Complejo {
private double real;
private double img;

public Complejo() {
real = 0;
img = 0;
}

public Complejo(double r, double i) {


real = r;
img = i;
}

public double getReal() {


return this.real;
}

public void setReal(double real) {


this.real = real;
}

public double getImg() {


return this.img;
}

public void setImg(double img) {


this.img = img;
}

public double modulo() {


return Math.sqrt(real * real + img * img);
}

public void sumar(Complejo c) {


real = real + c.getReal();
img = img + c.getImg();
}

public void restar(Complejo c) {


real = real - c.getReal();
img = img - c.getImg();
}

public void imprimir() {


System.out.println("### NUMERO COMPLEJO ####");
System.out.println("Parte real: " + real);
System.out.println("Parte imaginaria: " + img);
System.out.println("Modulo: " + modulo());
System.out.println();
}
}

import java.util.Calendar;

public class Programa {


public static void main(String[] args) {
crearComplejos();
}

public static void crearComplejos()


{
Complejo c = new Complejo(2.5, 6.3);
Complejo d = new Complejo(11.1, 19.4);

c.imprimir();
d.imprimir();

d.sumar(c);
d.imprimir();
}
}

Si analizamos el método sumar de la clase Complejo, vemos que hace llamadas a los métodos getReal y
getImg del objeto c (parámetro) para obtener su parte real y su parte imaginaria, para sumarlos a sus
partes real e imaginaria respectivamente.

6
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

8. Clases, modelado UML y código fuente en java.

Supongamos que queremos modelar la clase que se describe a continuación:

Nombre de la clase EstadisticasPrimerSemestre

El modelo UML de esta clase es el Declaración de la clase en Java


siguiente:
public class EstadisticasPrimerSemestre
{
EstadisticasPrimerSemestre
}

Powered By Visual Paradigm Community Edition

Atributos o campos:

Nombre campo Tipo de datos


descripcionDatos Cadena de caracteres
datoEnero Número real
datoFebrero Número real
datoMarzo Número real
datoAbril Número real
datoMayo Número real
datoJunio Número eral

Si agregamos los campos al modelo UML y al código fuente de java:

Modelo UML con atributos o campos: Declaración de la clase en Java, con sus atributos o campos

EstadisticasPrimerSemestre
public class EstadisticasPrimerSemestre
{
-datoEnero : double private double datoEnero;
-datoFebrero : double private double datoFebrero;
-datoMarzo : double
private double datoMarzo;
private double datoAbril;
-datoAbril : double private double datoMayo;
-datoMayo : double private double datoJunio;
-datoJunio : double private String descripcionDatos;
}
-descripcionDatos : String

Ejemplo: private double datoJunio significa:


Powered By Visual Paradigm Community Edition ✓ private se corresponde con el signo (-), campo privado
Es decir, el nombre del campo dos puntos, ✓ El tipo de dato es double
el tipo al que pertenece. ✓ El nombre es datoJunio.

7
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

Métodos:
Nombre método Tipo de dato de retorno Descripción de parámetros
suma Número real No recibe parámetros
producto Número real No recibe parámetros
escalar Ninguno Parámetro 1:
Nombre: k
Tipo de dato: entero
promedio Número real Ninguno
varianza Número real Ninguno
desviacionTipica Número real Ninguno
getDescripcionDatos Cadena de caracteres Ninguno
setDescripcionDatos Ninguno Parámetro 1:
Nombre: d
Tipo de dato: cadena
getDato Número real Parámetro 1:
Nombre: mes
Tipo de dato: entero
setDato Ninguno Parámetro 1:
Nombre: mes
Tipo de dato: entero

Parámetro 2:
Nombre: dato
Tipo de dato: número real

Si agregamos los métodos al modelo UML y al código Java:

Modelo UML y código Java


public class EstadisticasPrimerSemestre
EstadisticasPrimerSemestre {
private double datoEnero;
-datoEnero : double private double datoFebrero;
-datoFebrero : double private double datoMarzo;
private double datoAbril;
-datoMarzo : double private double datoMayo;
private double datoJunio;
-datoAbril : double private String descripcionDatos;
-datoMayo : double
public double suma()
-datoJunio : double {
return 0.0;
-descripcionDatos : String }
+suma() : double public double producto()
+producto() : double {
return 0.0;
+escalar(k : int) }
+primedio() : double public void escalar(int k)
+varianza() : double {
}
+desviacionTipica() : double
public double promedio()
+getDescripcionDatos() : String {
+setDescripcion(mes : int, dato : double) return 0.0;
}
+setDescripcionDatos(d : String)
public double varianza()
+getDato(mes : int) : double {
Powered By Visual Paradigm Community Edition
return 0.0;
}
Si un método está definido para public double desviacionTipica()
devolver un valor, para evitar {
return 0.0;
errores de complicación antes }
de la implementación, public String getDescripcionDatos()
devolvemos el valor por defecto {
return "";
del tipo de dato de retorno. }

public void setDescripcionDatos(String d)


Cuando implementemos el {
}
método, se devuelve el valor
adecuado. public void getDato(int mes)
{
}
En la Programación Orientada public void setDato(int mes, double dato)
a Objetos, la lógica funcional de {
}
nuestro programa se }
implementa en los métodos.

8
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

Ejemplo 1 de transformación de UML a JAVA


UML Java
public class Cuentabancaria {
private String titilar;
private String numeroCuenta;
private String nombreBanco;
private double importeLimite;
private double saldo;

public String getTitilar() {


return this.titilar;
}

public void setTitilar(String titilar) {


this.titilar = titilar;
}

public String getNumeroCuenta() {


return this.numeroCuenta;
}

public void setNumeroCuenta(String numeroCuenta) {


this.numeroCuenta = numeroCuenta;
}

public String getNombreBanco() {


return this.nombreBanco;
}

public void setNombreBanco(String nombreBanco) {


this.nombreBanco = nombreBanco;
}
public double getImporteLimite() {
return this.importeLimite;
}

public void setImporteLimite(double importeLimite) {


this.importeLimite = importeLimite;
}

public double getSaldo() {


return this.saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}

public void ingreso(double importe) {


throw new UnsupportedOperationException();
}

public void reintegro(double importe) {


throw new UnsupportedOperationException();
}

public double consultarSaldo() {


throw new UnsupportedOperationException();
}
}

9
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

Ejemplo 2 de transformación de UML a JAVA.

public class Factura {

private String nombreEmpresa;

private String nifEmpresa;

private String direccionEmpresa;

private String nombreCliente;

private String direccionCliente;

private String numeroFactura;

private Date fechaFactura;

private Date fechaVencimiento;

private String referencia;

private String codigoArticulo;

private String descripcionArticulo;

private int cantidadArticulo;

private double precioUnitario;

private double tipoImpositivo;

public void pagarFactura(double importe) {

throw new UnsupportedOperationException();

public double totalFactura() {

throw new UnsupportedOperationException();

public int diasRestantesVencimiento() {

throw new UnsupportedOperationException();

public double importePendientePago() {

throw new UnsupportedOperationException();

public double importePagado() {

throw new UnsupportedOperationException();

public double importeImpuesto() {

throw new UnsupportedOperationException();

public boolean facturaVencida() {

throw new UnsupportedOperationException();

public String getNombreEmpresa() {

return this.nombreEmpresa;

public void setNombreEmpresa(String nombreEmpresa) {

this.nombreEmpresa = nombreEmpresa;

public String getNifEmpresa() {

return this.nifEmpresa;

public void setNifEmpresa(String nifEmpresa) {

10
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

this.nifEmpresa = nifEmpresa;

public String getDireccionEmpresa() {

return this.direccionEmpresa;

public void setDireccionEmpresa(String direccionEmpresa) {

this.direccionEmpresa = direccionEmpresa;

public String getNombreCliente() {

return this.nombreCliente;

public void setNombreCliente(String nombreCliente) {

this.nombreCliente = nombreCliente;

public String getDireccionCliente() {

return this.direccionCliente;

public void setDireccionCliente(String direccionCliente) {

this.direccionCliente = direccionCliente;

public String getNumeroFactura() {

return this.numeroFactura;

public void setNumeroFactura(String numeroFactura) {

this.numeroFactura = numeroFactura;

public Date getFechaFactura() {

return this.fechaFactura;

public void setFechaFactura(Date fechaFactura) {

this.fechaFactura = fechaFactura;

public Date getFechaVencimiento() {

return this.fechaVencimiento;

public void setFechaVencimiento(Date fechaVencimiento) {

this.fechaVencimiento = fechaVencimiento;

public String getReferencia() {

return this.referencia;

public void setReferencia(String referencia) {

this.referencia = referencia;

public String getCodigoArticulo() {

return this.codigoArticulo;

public void setCodigoArticulo(String codigoArticulo) {

this.codigoArticulo = codigoArticulo;

11
Universidad Nacional de Guinea Ecuatorial. Programación Orientada a Objetos. 2022-2023 Versión
Melitón Pablo Mangué Mañana Tel: 222060362 | email: mangue@mait.gq marzo de 2023

public String getDescripcionArticulo() {

return this.descripcionArticulo;

public void setDescripcionArticulo(String descripcionArticulo) {

this.descripcionArticulo = descripcionArticulo;

public int getCantidadArticulo() {

return this.cantidadArticulo;

public void setCantidadArticulo(int cantidadArticulo) {

this.cantidadArticulo = cantidadArticulo;

public double getPrecioUnitario() {

return this.precioUnitario;

public void setPrecioUnitario(double precioUnitario) {

this.precioUnitario = precioUnitario;

public double getTipoImpositivo() {

return this.tipoImpositivo;

public void setTipoImpositivo(double tipoImpositivo) {

this.tipoImpositivo = tipoImpositivo;

9. Resumen de conceptos

✓ Objeto. Los objetos Java modelan los objetos del dominio de un problema.
✓ Clase. Los objetos se crean a partir de las clases. La clase describe la categoría del objeto; los
objetos representan instancias individuales de la clase.
✓ Método. Podemos comunicarnos con los objetos invocando sus métodos. Generalmente, los
objetos hacen algo cuando invocamos un método.
✓ Parámetro. Los métodos pueden tener parámetros para aportar información adicional para
realizar su tarea.
✓ Signatura. El encabezado de un método se denomina su signatura. Proporciona la información
necesaria para invocar dicho método.
✓ Tipo de datos. El tipo define la clase de valor que un parámetro puede tomar.
✓ Instancias múltiples. Se pueden crear muchos objetos a partir de una sola clase.
✓ Estado. Los objetos tienen un estado. El estado está representado por los valores almacenados
en los campos.
✓ Llamar métodos. Los objetos se pueden comunicar invocando los métodos de otros objetos.
✓ Código fuente. El código de una clase determina la estructura (los campos) y el comportamiento
(los métodos) de cada uno de los objetos de dicha clase.
✓ Resultado. Los métodos pueden devolver información de un objeto mediante valores de retorno.

12

También podría gustarte