Está en la página 1de 9

República Bolivariana de Venezuela

Ministerio del Poder Popular para la Educación Universitaria


Instituto Universitario de Tecnología de Cumaná
Departamento de Informática
Cumaná – Estado Sucre

Objetivo 4.- Desarrollo de Programas aplicando los fundamentos


de la Programación Orientada a Objetos en un lenguaje de
Programación Orientado a Objetos

Recopilado por:
Ing. Leonardo Malavé MSc

Unidad Curricular:
Programación Orientada a Objetos

Semestre: IV

Sección: Única

Cumaná, Agosto 2010


El desarrollo de programas en donde se involucre la creación y manejo de
clases a través de objetos, es la base esencial de la programación orientada a
objetos sin menospreciar el uso de los demás pilares de la POO.

Aquí desarrollaremos los siguientes ítems:

• Relaciones de composición (agregación)


• Relación de herencia: simple y múltiple
• Acceso a los miembros de acuerdo a las jerarquías de
composición y herencia
• Relación de constructores y herencia
• Creación de una jerarquía multinivel
• Clases abstractas
• Métodos abstractos o virtuales
• Sobreescritura de métodos
• Polimorfismo.
Relaciones de composición (agregación)

Es un tipo de agregación donde la relación de posesión es tan fuerte como


para marcar otro tipo de relación. Las clases en UML tienen un tiempo de vida
determinado, en las relaciones de composición, el tiempo de vida de la clase que
es parte del todo (o agregado) viene determinado por el tiempo de vida de la clase
que representa el todo, por tanto es equivalente a un atributo, aunque no lo es
porque es una clase y puede funcionar como tal en otros casos.

Relación de herencia: simple y múltiple

La herencia permite que se pueden definir nuevas clases basadas en clases


existentes, lo cual facilita re-utilizar código previamente desarrollado. Si una clase
deriva de otra (extends) hereda todas sus variables y métodos. La clase derivada
puede añadir nuevas variables y métodos y/o redefinir las variables y métodos
heredados.

Una superclase es aquella clase de la cual otra deriva directamente.


Decimos que la clase A es padre de la clase B si B deriva directamente de A (está
conectada directamente en el árbol de jerarquías de las clases). También se le
denomina Clase Padre.

Una subclase es aquella clase que es derivada directamente de otra.


Decimos que la clase B es hija de la clase A si B deriva directamente de A (está
conectada directamente en el árbol de jerarquías de las clases). También se le
denomina Clase Hija.
Tipos de Herencia

• Simple: En Java, a diferencia de otros lenguajes orientados a objetos,


una clase sólo puede derivar de una única clase, con lo cual no es
posible realizar herencia múltiple en base a clases.
• Múltiple: Es cuando una clase se deriva de más de una clase en
forma directa.

Acceso a los miembros de acuerdo a las jerarquías de


composición y herencia / Relación de constructores y herencia

public class Mamifero


{
private int patas;
private int colorPelo;
private String nombre;
public Mamifero(String nombre, int patas)
{
this.nombre = nombre;
this.patas = patas;
}
public void imprimirPatas()
{
System.out.println(nombre + " tiene " + patas + " patas\n");
}
}
public class Perro extends Mamifero
{
private int ladridos;
public Perro(String nombre)
{
super(nombre, 4);
ladridos = 0;
}
}

public class Gato extends Mamifero


{
private int maullidos;
public Gato(String nombre)
{
super(nombre, 4);
maullidos = 0;
}
}

class principal
{
public static void main(String [] args)
{
Perro bobi = new Perro("Bobi");
bobi.imprimirPatas(); /*Está en la clase mamífero*/
}
}

Creación de una jerarquía multinivel

Clases Abstractas / Métodos Abstractos o virtuales

Son aquellas clases que cumplen con las siguientes características:


• No tienen instancias propias, es decir no pueden reverenciarse a ellas
ningún objeto.
• Puede por lo menos tener un método más solo declarado más no
implementado, como también pueden tenerlo desarrollado. (Métodos
Abstractos o Virtuales)

import java.io.*;
import java.lang.*;
import java.text.*;

abstract class Person


{
public Person(String n)
{
name = n;
}

public abstract String getDescription();

public String getName()


{
return name;
}

private String name;


}

class Employee extends Person


{
public Employee(String n, double s)
{
// pass name to superclass constructor
super(n);
salary = s;
}

public double getSalary()


{
return salary;
}

public String getDescription()


{
NumberFormat formatter = NumberFormat.getCurrencyInstance();
return "an employee with a salary of " +
formatter.format(salary);
}

public void raiseSalary(double byPercent)


{
double raise = salary * byPercent / 100;
salary += raise;
}

private double salary;


}

class Student extends Person


{
/**
@param n the student's name
@param m the student's major
*/
public Student(String n, String m)
{
// pass n to superclass constructor
super(n);
major = m;
}

public String getDescription()


{
return "a student majoring in " + major;
}

private String major;


}

public class PersonTest


{
public static void main(String[] args)
{
Person[] people = new Person[2];

// fill the people array with Student and Employee objects


people[0]= new Employee("Harry Hacker", 50000);
people[1]= new Student("Maria Morris", "computer science");

// print out names and descriptions of all Person objects


for (int i = 0; i < people.length; i++)
{
Person p = people[i];
System.out.println(p.getName() + ", "
+ p.getDescription());
}
}
}
Sobreescritura o Sobrecarga de Métodos

Al igual que C++, Java permite métodos sobrecargados (overloaded),


es decir, métodos distintos que tienen el mismo nombre, pero que se diferencian
por el número y/o tipo de los argumentos.
A la hora de llamar a un método sobrecargado, Java sigue unas reglas
para determinar el método concreto que debe llamar:
1. Si existe el método cuyos argumentos se ajustan exactamente al
tipo de los argumentos de la llamada (argumentos actuales), se llama ese método.
2. Si no existe un método que se ajuste exactamente, se intenta
promover los argumentos actuales al tipo inmediatamente superior (por ejemplo
char a int, int a long, float a double, etc.) y se llama el método correspondiente.
3. Si sólo existen métodos con argumentos de un tipo más restringido
(por ejemplo, int en vez de long), el programador debe hacer un cast explícito en
la llamada, responsabilizándose de esta manera de lo que pueda ocurrir.
4. El valor de retorno no influye en la elección del método
sobrecargado. En realidad es imposible saber desde el propio método lo que se va
a hacer con él. No es posible crear dos métodos sobrecargados, es decir con el
mismo nombre, que sólo difieran en el valor de retorno.

También podría gustarte