Sesión 09 POO

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 26

CICLO II:

Programación
Básica en Java
Sesión 9:
Introducción a
Java
Programación Orientada a Objetos (POO)
Objetivos de la sesión
Al finalizar esta sesión estarás en capacidad de:

1. Definir y aplicar los conceptos relacionados con herencia en POO


2. Especificar los contextos donde se puede aplicar la herencia
3. Diseñar la herencia entre clases: definición de superclase y subclases
4. Explicar el uso del tipo de acceso protected y su aplicación en herencia
5. Construir programas en Java con la aplicación de los conceptos básicos de herencia
Herencia - Organización jerárquica
● Es un mecanismo para la reutilización de software.
¿Qué es? ● Permite crear una clase que es capaz de absorber los
atributos y métodos de una clase padre.

● Crea estructuras jerárquicas especializadas.


¿Por qué? ● Ahorra tiempo durante el desarrollo.

¿Para qué? • Extiende comportamientos a otros


objetos.
Herencia
(subclase y superclase)
En Java, es posible heredar atributos y métodos de una clase a otra.

Se agrupa el "concepto de herencia" en dos


categorías:

•Subclase (hijo):La clase que hereda de otra


clase.

•Superclase (padre): La clase que se hereda


de…

Para heredar de una clase, se usa la palabra


reservada extends.
Herencia (subclase y superclase)

En Java, es posible heredar atributos y métodos de una clase a otra.


Herencia - Organización jerárquica

● Permite reutilizar código creando nuevas clases a partir de las existentes


(construidas y depuradas)

● Compromete una relación de jerarquía

● Una nueva clase se generará agregando atributos y/o código a una clase existente

● Una clase (derivada) puede heredar de otra clase (base):

○ Atributos
○ Métodos
Herencia - Organización jerárquica

● Si una clase B hereda de otra clase A se tiene que:

○ B adopta la estructura (atributos) y comportamiento (métodos) de la clase A.

○ B puede:

■ Agregar nuevos atributos

■ Agregar nuevos métodos

■ Redefinir métodos
Herencia - Ejemplo:

Avión
-Alas
-Cabina
+ Despegar()
+ Aterrizar()

AvionGuerra AvionComercial AvionCarga


-TipoMisil -NumeroPasajeros -Peso

+ Disparar() +DarRefrigerio() + ValidarPeso()


Tipos de Herencia

Herencia Simple: Una clase puede Herencia Múltiple: Una clase puede
heredar de una única clase. heredar de varias clases. Cabe anotar
que en Java no se permite la herencia
múltiple.
A

B C B C

D E E
Herencia
Superclases y Subclases

● El proceso de herencia es transitivo:

A ○ B puede redefinir métodos

○ B hereda de A

▪ A es la superclase y B la subclase
B
○ C hereda de B y A

○ B y C son subclase de A

○ B es un descendiente directo de A
C
○ C es un descendiente indirecto de A
Herencia – Superclases y Subclases
Ejemplo
La superclase Vehículo representa a todos los vehículos, como taxis,
autobuses, barcos, bicicletas, camiones, etcétera.

Por el contrario, la subclase Auto representa a un subconjunto más pequeño


y específico de los vehículos.
Herencia – Superclases y Subclases
Ejemplo Vehículo
- matricula
Atributos
- modelo
comunes
- potencia
+ getMatricula()
+ getModelo() Métodos
+ getPotemcia() comunes

Taxi Autobus
Atributos
- numeroLicencia específicos - numeroCupos
+ setNumeroLicencia() Métodos + setNumeroCupos()
+ getNumeroLicencia() específicos + getNumeroCupos()
Herencia – Superclases y Subclases
Ejemplo de terminología
● Se define la clase Taxi a partir de la clase Vehículo y se tiene que:
• “Taxi" hereda las variables y métodos de "Vehiculo“.
• “Taxi" extiende de "Vehiculo“.
• “Taxi" es subclase de "Vehiculo“.
clase derivada.
clase hija.
• "Vehiculo" es superclase de “Taxi“.
clase base.
clase padre.

● La herencia realiza la relación es-un.


• Un Taxi es-un vehículo
• Un Autobus es-un vehiculo
Herencia – Superclases y Subclases
Sintaxis

La sintaxis para declarar subclases es:

public class SubClase extends SuperClase{

...

}
Modificador de acceso
Protected
La palabra clave protected es un modificador de acceso
utilizado para atributos, métodos y constructores,
haciéndolos accesibles en el mismo paquete y subclases.

public class Ejemplo3


{
protected static int atributo = 10; Protected: Las clases hijo
} pueden acceder a este atributo

import app.ejemplo3.Ejemplo3;
public class Ejemplo3_1 extends Ejemplo3
{
public static void main(String[] args)
{
System.out.println(Ejemplo3.atributo)
}
}
protected - EJEMPLO
class Persona {
protected String pnom = "Carolina";
protected String snom = "Sofia";
protected String email = "[email protected]";
protected int edad = 22;
}

class Estudiante extends Persona { La subclase Estudiante


private int agraduacion = 2020;
accede a la clase Persona
public static void main(String[] args) { con atributos protected
Estudiante myObj = new Estudiante();
System.out.println("Nombre: " + myObj.pnom + " " + myObj.snom);
System.out.println("Email: " + myObj.email);
System.out.println("Edad: " + myObj.edad);
System.out.println("Año de graduacion: " + myObj.agraduacion);
}
}
Ejemplo: la clase Car (subclase) hereda los atributos y métodos de la Vehicleclase (superclase):
//la clase Car (subclase) hereda los atributos y métodos de la Vehicleclase (superclase)
class Herencia_Vehiculo {// superclase (padre)
protected String marca = "Ford"; // atributo clase Herencia_Vehiculo

public void bocina() { // metodo clase Herencia_Vehiculo


System.out.println("Bocina en accion: Tuut, tuut!");
}
} ¿Notaste el modificador protected en Vehículo?

class Car extends Herencia_Vehiculo {// subclase (hijo) El atributo de marca en Herencia_Vehículo en
private String nomModelo = "Mustang"; // atributo clase Car un modificador de acceso protected .

public static void main(String[] args) { Si estuviera configurado en private, la clase myCar no
System.out.print("\033[H\033[2J"); // limpia pantalla podría acceder a él.
// Creamos objeto myCar
Car myCar = new Car();
// Llamoal metod bocina() (de la clase Herencia_Vehiculo) en el objeto myCar
myCar.bocina();
//Muestra el valor del atributo de marca (de la clase de vehículo)
//y el valor del nombre del modelo de la clase de Herencia_Vehiculo
System.out.println("Atributo Clase Herencia_Vehiculo--> "+myCar.marca);
System.out.println("Atributo Clase Car--> "+myCar.nomModelo);
}
}
Ejemplo

La clase Alumno
contendrá solamente el
atributo curso, el
nombre y el nif son los
heredados de Persona
Clase Persona con los atributos nif y nombre.

//Clase Persona. La superclase Persona es la Clase Base


public class Persona {
private String nif;
private String nombre;

public String getNif() {


return nif;
}

public void setNif(String nif) {


this.nif = nif;
}

public String getNombre() {


return nombre;
}

public void setNombre(String nombre) {


this.nombre = nombre;
}
}
Creamos la clase Alumno como derivada de la clase Persona. La clase Alumno
contendrá solamente el atributo curso, el nombre y el nif son los heredados de
Persona.

//Clase Alumno. Es la subclase. La clase Alumno hereda de la clase Persona


public class Alumno_H extends Persona{
private String curso;

public String getCurso() {


return curso;
}

public void setCurso(String curso) {


this.curso = curso;
}
}
La clase alumno hereda los atributos nombre y nif de la clase Persona y añade el
atributo propio curso. Por lo tanto:
Los atributos de la clase Alumno son nif, nombre y curso.

Los métodos de la clase Alumno son:


getNif(), setNif(String nif), getNombre(),
setNombre(String nombre), getCurso(),
setCurso(String curso).

La clase Alumno aunque hereda los


atributos nif y nombre, no puede acceder a
ellos de forma directa ya que son privados
a la clase Persona. Se acceden a través de
los métodos heredados de la superclase.

La clase Alumno puede utilizar los


componentes public y protected de la clase
Persona como si fueran propios.
public static void main(String[] ar) {
System.out.print("\033[H\033[2J");
Alumno_H a = new Alumno_H();
Se utilizan los
a.setNombre("Charmen Aragon Mendoza"); métodos heredados de
la superclase Persona
a.setNif("272813"); como propios
Se utiliza el
método propio a.setCurso("JAVA");
de la clase System.out.println("Nombre: " + a.getNombre());
Alumno.
System.out.println("Curso: " + a.getCurso());
}
}

También podría gustarte