Está en la página 1de 37

Clases Abstractas e Interfases

Lenguaje de Programación I

Mg. Maruja Emélita Blas Rebaza

Universidad Tecnológica
Universidad Tecnológica de de
LimaLima
Sur –Sur – UNTELS
UNTELS 2021. 2021. 04RG-2021-UNTELS-VPA
Todos
Todoslos
losderechos reservados
derechos reservados 04RG-2021-UNTELS-VPA
¿Qué es una clase?

• Una clase es una plantilla que define la forma de un objeto. Especifica los
datos y el código que operará en esos datos. Java usa una especificación
de clase para construir objetos. Los objetos son instancias de una clase.
Por lo tanto, una clase es esencialmente un conjunto de planes que
especifican cómo construir un objeto.
“Es importante tener claro que una clase es una abstracción lógica”

Nota: No es hasta que se haya creado un objeto de esa clase, que existe una
representación física de esa clase en la memoria.

Recuerda: los métodos y variables que constituyen una clase se llaman miembros


de la clase. Los miembros de datos también se conocen como variables de
instancia. 

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Forma general de una clase

• Cuando defines una clase, class NombreClase{


declaras su forma y naturaleza //Declarar variables de instancia
exactas. Para ello, especifique las tipo var1;
variables de instancia que contiene tipo var2;
y los métodos que operan en ellas. //..
Aunque las clases muy simples //Declarar métodos
tipo metodo1(parámetros) {
pueden contener solo métodos o
//Cuerpo del método
solo variables de instancia, la }
mayoría de las clases del mundo
real contienen ambas. tipo metodo2(parámetros){
//Cuerpo del método
• Una clase se crea al usar la
}
palabra clave . Aquí se muestra }
una forma general simplificada de
una definición de clase:

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Explicación

• Aunque no existe una regla sintáctica que se deba


cumplir, una clase bien diseñada debería definir una y solo
una entidad lógica. Por ejemplo, una clase que almacena
nombres y números de teléfono normalmente no almacenará
información sobre el mercado de valores, el promedio de
precipitaciones u otra información no relacionada. El punto
aquí es que una clase bien diseñada agrupa la información
conectada lógicamente. ¡Poner información no relacionada
en la misma clase des-estructurará rápidamente tu
código!
• Hasta este punto, las clases que hemos estado utilizando
tienen solo un método: . Pronto verás cómo crear otros. Sin
embargo, observe que la forma general de una clase no
especifica un método . Se requiere un método solo si esa
clase es el punto de partida para su programa. Además,
algunos tipos de aplicaciones Java no requieren un .

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Definición de una clase

• Para ilustrar las clases, desarrollaremos una clase que encapsula


información sobre vehículos, tales como automóviles, furgonetas y
camiones. Esta clase se llama vehículo, y almacenará tres elementos
de la información sobre un vehículo: el número de pasajeros que puede
llevar, su capacidad de combustible, y la cantidad media de
combustible consumido (en millas por galón).
• Entonces, se define tres variables de instancia: pasajeros, capacidad y
mpg. Observe que el vehículo no contiene ningún método. Por lo tanto,
actualmente es una clase de sólo datos.

class Vehículo{
int pasajeros; //número de pasajeros
int capacidad; //capacidad en galones
int mpg; //consumo de combustible en millas por galón
}

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
EJEMPLO DE CLASE VEHICULO

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Clase Padre Vehículo (1- 5)

package Polimorfi; public String getMarca() {


return marca;
 
}
public class Vehiculo {  
public String getModelo() {
protected String matricula; return modelo;
protected String marca; }
 
protected String modelo; //metodo mostrar datos
public String mostrarDatos(){
//metodo constructor de vehiculo
return "Matricula: "+matricula+
public Vehiculo(String matricula, String marca, String "\nMarca: "+marca+
modelo) { “\nModelo :"+modelo;
this.matricula = matricula;
}
this.marca = marca;
}
this.modelo = modelo;
}
//creación de los metodos getter para cada atributo
public String getMatricula(){
return matricula;
}
 

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Clase hija (Vehículo Turismo 2- 5)

package Polimorfi;

public class VehiculoTurismo extends Vehiculo{

//atributo extra de la clase VehiculoTurismo

private int nPuertas;

public VehiculoTurismo(int nPuertas, String matricula, String marca, String modelo) {

super(matricula, marca, modelo);

this.nPuertas = nPuertas;

  public int getnPuertas() {

return nPuertas;

//metodo mostrar datos

//@override significa sobreescribir

@Override

public String mostrarDatos(){

return "Matricula: "+matricula+"\nMarca: "+marca+"\nModelo: "+modelo+

"\nNumero de puertas"+nPuertas;

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Clase hija (Vehículo Deportivo 3 - 5)

package Polimorfi;

public class vehiculoDeportivo extends Vehiculo{

//atributo extra de la clase VehiculoDeportivo

private int cilindrada;

//metodo constructor

public VehiculoDeportivo(int cilindrada, String matricula, String marca, String


modelo) {

super(matricula, marca, modelo);

this.cilindrada = cilindrada;

//crear metodo getter

  public int getCilindrada() {

return cilindrada;

//metodo mostrar Datos

// lo sobreescribimos con @Override

@Override

public String mostrarDatos(){

return "Matricula: "+matricula+"\nMarca: "+marca+"\nModelo: "+modelo+

"\ncilindrada"+cilindrada;

}
Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA
Todos los derechos reservados
Clase hija (Vehículo Furgoneta 4 - 5)

package Polimorfi;

public class VehiculoFurgoneta extends Vehiculo {

//atributo extra

private int carga;

public VehiculoFurgoneta(int carga, String matricula, String marca, String


modelo){

super(matricula, marca, modelo);

this.carga = carga;

public int getCarga() {

return carga;

//metodo mostrar Datos

// lo sobreescribimos con @Override

@Override

public String mostrarDatos(){

return "Matricula: "+matricula+"\nMarca: "+marca+"\nModelo: "+modelo+

"\nCarga"+carga;

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Clase Principal 5 - 5

package Polimorfi;

 public class Principal {

public static void main(String[] args){

//crea un arreglo de vehiculos

Vehiculo misVehiculos[] = new Vehiculo[4];

misVehiculos[0] = new Vehiculo ("GH66", "Toyota", "A90");

//polimosrfismo //se va instanciar con vehiculo sino con hijo de vehiculo

//polimosrfismo son las muchas formas como puede actuar un objeto dependiendo del contexto
que lo pongamos

misVehiculos[1] = new VehiculoTurismo(4,"77HP","Toyota","M15");

misVehiculos[2] = new VehiculoDeportivo(200,"54TX","Subaru","ML9");

misVehiculos[3] = new VehiculoFurgoneta(1000,"L141","Audi","H20");

System.out.println("LISTA DE AUTOS\n");

for(Vehiculo vehiculos: misVehiculos){

System.out.println(vehiculos.mostrarDatos());

System.out.println("");

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Clases abstractas

• Las clases abstractas en Java son clases que se declaran con


la palabra “abstract” y pueden o no contener métodos abstractos.

Los métodos abstractos son iguales que en las interfaces, solo
son la declaración del método sin el cuerpo.
• De hecho, en las interfaces de forma automática todos los
métodos son definidos como abstractos por el compilador. Sin
embargo, en las clases abstractas tenemos la oportunidad de
tener métodos normales y métodos abstractos.
• No se permite la creación de instancias de una clase abstracta,
pero si se puede aplicar la herencia sobre ellas. Dejando de esta
forma la implementación de la lógica de los métodos abstractos a
las clases hija.
• Si la clase hija NO implementa lógica para los métodos abstractos
tendrá que ser declarada también como abstracta.

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Clases abstractas

Es toda aquella clase en la que algunos de sus métodos están


declarados pero no están definidos, es decir se especifica su nombre,
parámetros y tipo de retorno pero no incluye código. A este tipo de
métodos se le conoce como métodos abstractos

Sintaxis:
public abstract class nombre_clase{
public abstract <retorno>
nombre_método([argumentos]);
//otros metodos
} Ejemplo:
public abstract class Figura{
public abstract double área();
Nota. Una clase abstracta por lo menos debe
.
tener un método abstracto. El método
abstracto termina con ; .
}

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Ejemplo

public class TestFigura {


public static void main(String[]args){
cuadrado c = new cuadrado("cuadrado1",2);
System.out.println("N="+c.getNombre());
System.out.println("P="+c.getPerimetro());
System.out.println("A="+c.getArea());
}
}

public abstract class Figura { public class cuadrado extends Figura {


private String nombre; private double lado;
public cuadrado (String nombre, double lado){
public Figura(String nombre){ super(nombre);
this.nombre = nombre; this.lado=lado;
}
}
@Override
public double getPerimetro(){
public String getNombre(){ return lado*4;
return nombre; }
} @Override
public abstract double getPerimetro(); public double getArea(){
public abstract double getArea(); return lado*lado;
}
} }

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Tomar en cuenta

• Una clase puede tener métodos no abstractos.


- Basta que un método sea abstracto para que la clase sea considerada como
abstracta.
• No es posible crear objetos de una clase abstracta
• Las subclases de una clase abstracta están obligadas a sobre escribir los
métodos abstractos
- En caso de no sobrescribir algún método abstracto la subclase deberá ser abstracta.
• Una clase abstracta puede tener constructores.
- Aunque no se puedan crear objetos de ella, esta podrá ser heredada y al ejecutar el
constructor de la subclase esta debe también ejecutar el constructor de la superclase.

@Override
Sobre escritura de métodos
Una subclase sobreescribe un método de su superclase cuando define un método con las
mismas características ( nombre, número y tipo de argumentos) que el método de la
superclase.

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Ejemplo de clase abstracta (1 – 2)

Clase Servivo

package abstracta;
public abstract class Servivo {
public abstract void alimentarse();
}

Clase Planta

package abstracta;
 
public class Planta extends Servivo{
@Override
public void alimentarse() {
System.out.println("La planta se alimenta de la fotosintesis");
}
}

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Ejemplo de clase abstracta (2 – 2)

clase AnimalHerbivoro (sub clase de clase animal)


 
Clase Animal
package abstracta;
package abstracta; public class AnimalHervivoro extends Animal {
 public abstract class Animal extends Servivo {
@Override
} public void alimentarse(){
System.out.println("El animal herbívoro se alimenta de hierba");
}
}

Clase AnimalCarnivoro (sub clase de clase animal) class Principal


package abstracta; package abstracta;
 
public class AnimalCarnivoro extends Animal{
public class Principal {
@Override public static void main(String[]args){
public void alimentarse (){ Planta planta =new Planta();
AnimalCarnivoro animalC = new AnimalCarnivoro();
System.out.println("EL animal carnivoro se alimenta de
carne");
planta.alimentarse();
} animalC.alimentarse();
} }
}

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Interfaces

Una interfaz en Java es una colección de


métodos abstractos y propiedades constantes. En
las interfaces se especifica qué se debe hacer
pero no su implementación. Serán las clases que
implementen estas interfaces las que describen la
lógica del comportamiento de los métodos
https://es.wikipedia.org › wiki › Interfaz_(Java)

Por lo general se utilizan interfaces cuando se quiere


unificar nombres de métodos pero seguir manteniendo
comportamientos que no tienen nada que ver uno con el otro.
De hecho, las interfaces suelen utilizarse como factor común
entre clases que no pertenecen a una misma jerarquía.

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Clases Interfaces

• Es un conjunto de métodos y constantes públicos. Una interface


es similar a una clase abstracta llevada al limite donde todos
sus métodos son abstractos.
• Su finalidad es de definir el formato que deben tener los
métodos que han de implementar ciertas clases

Interfaz
public void click();

Clase1 Clase2 ClaseN


public void click(){ public void click(){ public void click(){
. . .
. . .
} } }

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Sintaxis de interface

public interface nombre_interface {


public tipo metodoUno([argumentos]);
public tipo metodoDos([argumentos]);
}

Ejemplo:

public interface Operaciones{


public void rotar([]);
public String serealizar([]);
}

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Recomendaciones al crear interface

• Todos los métodos definidos en interface son públicos y


abstractos
• En una interface es posible definir constantes
• Una interface no es una clase

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Implementación de una interface

public class Triangulo implements Operaciones{


public void rotar () { //aquí va el código }
public String serializar() { //aquí va el código }

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Recomendaciones al implementar una interface

• Toda clase que implementa a una interface esta obligada a definir todos los
métodos de no ser así la clase deberá abstracta.
• Una clase puede implementar mas de una interface.

Ejemplo:
public class Ejemplo Implements IterfazUno, InterfazDos,….{

• Una clase puede heredar a una clase y al mismo tiempo implementar una o
mas interfaces
• Una interface puede heredar otras interfaces

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Utilizando el ejemplo de clases abstractas para aplicar interfaces

• Agregar las clases:


- Tridimensional
- Operaciones

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Programar interfaces (1-2)

• Se programa las interfaces en las clases: public class cuadrado extends Figura implements Tridimensional, Operaciones{
private double lado;
- Tridimensional public cuadrado (String nombre, double lado){
super(nombre);
- Operaciones this.lado=lado;
}
- Cuadrado @Override
public double getPerimetro(){
return lado*4;
}
public interface Tridimensional { @Override
public double getArea(){
//creando los metodos tridimensional return lado*lado;
public double getVolumen(); }
@Override
public double getVolumen(){
} return lado*lado*lado;
}
public int sumar(int x, int y){
return x+y;
public interface Operaciones { }
public int sumar(int x, int y); @Override
public float valor(double d){
public float valor(double d); return 1.0f;
}
}
}

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Programar interfaces (2-2)

public class TestFigura {


public static void main(String[]args){
cuadrado c = new cuadrado("cuadrado1",2);
System.out.println("N="+c.getNombre());
System.out.println("P="+c.getPerimetro());
System.out.println("A="+c.getArea());

//adicionando con interfaces


System.out.println("V="+c.getVolumen());

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Interfaz grafica

• Conocida también como GUI (del ingles graphical


user interface)
• Programa informático que sirve de interfaz de
usuario
• Software que permite la interacción con la
máquina de manera gráfica, esto es con
elementos como botones, ventanas, iconos o
enlaces

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Ejemplo Interfaz grafica

Enunciado
La empresa TEC desea automatizar los pagos mensual de un
empleado en base a la siguiente información: el sueldo básico se
obtiene en base al numero total de horas trabajadas, basada en una
tarifa horaria; al sueldo básico, se aplica una bonificación de 20% ,
obteniéndose el sueldo bruto; al sueldo bruto, se le aplica un
descuento de 10% obteniendo el sueldo neto. Calcular el sueldo
básico, el sueldo bruto y el sueldo neto a pagar.

Datos:
Ingresar datos por teclado:
Horas trabajadas
Tarifa horaria

Datos obtenidos
Bonificación del 20%
Descuento del 10%

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Desarrollo ejemplo de Interfaz grafica

Control Nombre asignado Titulo del control

Label 1 jLabel1 PAGO MENSUAL DE UN EMPLEADO


Label 2 jLabel2 HORAS TRABAJADAS
Label 3 jLabel3 SUELDO BASICO
Label 4 jLabel4 MONTO BONIFICACION
Label 5 jLabel5 SUELDO BRUTO
Label 6 jLabel6 MONTO DESCUENTO
Label 7 jLabel7 SUELDO NETO

Control Nombre asignado Titulo del control


Control Nombre asignado Titulo del
jTextField1 txt_ht PAGO MENSUAL DE UN EMPLEADO control
Button1 btn_calcular Calcular
jTextField2 txt_sb HORAS TRABAJADAS
jTextField3 txt_mb SUELDO BASICO Button2 btn_limpiar Limpiar
jTextField4 txt_sbruto MONTO BONIFICACION
Button3 btn_salir Salir
jTextField5 txt_md SUELDO BRUTO
jTextField6 txt_sn MONTO DESCUENTO
jTextField7 txt_ph SUELDO NETO

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Jframe Forms

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Ejemplo con uso de JFrame Forms (1-2)
private void btn_calcularActionPerformed(java.awt.event.ActionEvent evt) {
//Programando botón calcular
double horasTrabajadas, tarifaHorario, sueldobasico, bonificacion, sueldobruto, descuento, sueldoneto;
horasTrabajadas = Double.parseDouble(txt_ht.getText());
tarifaHorario = Double.parseDouble(txt_ph.getText());

sueldobasico = horasTrabajadas * tarifaHorario;


bonificacion = sueldobasico * 0.2;
sueldobruto = sueldobasico + bonificacion;
descuento = sueldobruto * 0.1;
sueldoneto = sueldobruto - descuento;

//MOSTRAR DATOS...programado por Marita


txt_sb.setText(String.valueOf(sueldobasico));
txt_mb.setText(String.valueOf(bonificacion));
txt_sbruto.setText(String.valueOf(sueldobruto));
txt_md.setText(String.valueOf(descuento));
txt_sn.setText(String.valueOf(sueldoneto));
//hasta aquí
}
Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA
Todos los derechos reservados
Ejemplo con uso de JFrame Forms (2-2)

private void btn_btn_limpiarActionPerformed(java.awt.event.ActionEvent evt) {

//Programado botón limpiar


txt_ht.setText("");
txt_ph.setText("");
txt_sb.setText("");
txt_mb.setText("");
txt_sbruto.setText("");
txt_md.setText("");
txt_sn.setText("");

//focalizando el cursor en la caja de texto horas trabajadas


txt_ht.requestFocus();
}

private void btn_salirActionPerformed(java.awt.event.ActionEvent evt) {

//Programado botón Salir


System.exit(0);
}

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Resultado

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Actividad 3

Investigar los temas tratados en clase 03, elaborar


un texto indicando las referencias de los temas que
ha considerado. Proponer ejemplos en Java.

Fuente: Times New Roman Tamaño:12

Fecha: 11/10/2021 Hora:11:59pm

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Referencias Bibliográficas

• Blasco, F. (2019). Programación orientada a objetos en Java.


Ediciones de la U.
https://elibro.net/es/lc/untels/titulos/127125
• Ceballos Sierra, F. J. (2015). Java 2: lenguaje y aplicaciones.
RA-MA Editorial. https://elibro.net/es/lc/untels/titulos/62458
• Ceballos Sierra, F. (2015). Java: interfaces gráficas y
aplicaciones para internet (4a. ed.). RA-MA Editorial.
https://elibro.net/es/lc/untels/titulos/106453
• Ferrer Martínez, J. (2015). Desarrollo de interfaces. RA-MA
Editorial. https://elibro.net/es/lc/untels/titulos/106456

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
Gracias

Universidad Tecnológica de Lima Sur – UNTELS 2021. 04RG-2021-UNTELS-VPA


Todos los derechos reservados
mblas@untels.edu.pe

Universidad Tecnológica
Universidad Tecnológica de de
LimaLima
Sur –Sur – UNTELS
UNTELS 2021. 2021. 04RG-2021-UNTELS-VPA
04RG-2021-UNTELS-VPA
Todos
Todoslos
losderechos reservados
derechos reservados

También podría gustarte