Académique Documents
Professionnel Documents
Culture Documents
Valorar la incidencia de los Analizar los requerimientos del cliente para construir el sistema de
datos en los procesos del información.
macrosistema.
Duración de la guía ( en 24
horas):
Página 1 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
2. INTRODUCCIÓN
En esta guía apropiará los fundamentos de la programación orientada a objetos. Conceptos tales como
encapsulación, polimorfismo y herencia. También desarrollará programas que le permitirán crear objetos y
realizar entrada/salida por consola y cuadros de dialogo.
La herencia es uno de los tres principios fundamentales de la programación orientada a objetos. Con el
uso de esta característica se puede crear una clase base, que defina características comunes a un
conjunto de elementos, que también comparten dichos atributos comunes. Esta clase puede ser
heredada por otras clases más específicas y cada una le agrega las características que le son comunes a
ella.
Una clase general recibe el nombre de Superclase o Clase Base y la clase que hereda recibe el nombre de
subclase. Por lo tanto la Subclase es una versión especializada de una superclase. La Subclase hereda
todas las variables y métodos definidos por la superclase y añade los propios.
Como ya ha observado, no es posible en java asignar una variable de referencia de un determinado tipo a
una variable de referencia de otro tipo.
import javax.swing.*;
class A {
int numeroa;
A (int n) {
Página 2 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
numeroa = n;
}
}
class B{
int numerob;
B(int n) {
numerob = n;
}
}
class principal {
public static void main(String args[]) {
A objA = new A(5);
A objA1 = objA;
}
}
Sin embargo existe una excepción, y es que una variable de referencia subclase puede ser asignada a una
variable de referencia superclase. Aun asi, la variable de referencia de la superclase, no puede tener
acceso parte de la subclase.
import javax.swing.*;
class A {
int numeroa;
A () {
this(0); // Llama al constructor con un argumento.
}
A (int n) {
numeroa = n;
Página 3 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
}
}
class B extends A{
int numerob;
B(int n) {
super(100);
numerob = n;
}
}
class principal {
public static void main(String args[]) {
A objA = new A(5);
A objA1 = objA;
}
}
Un uso importante donde las referencias subclase se pueden asignar a referencias superclases, es cuando
los constructores son llamados en una jerarquía de clases.
import javax.swing.*;
DosDimensiones() {
this(0,0); // Llama al constructor con dos argumentos.
}
DosDimensiones(double w, double h) {
fijarAncho(w);
Página 4 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
fijarAlto(h);
}
DosDimensiones(DosDimensiones obj) {
ancho = obj.ancho;
alto = obj.alto;
}
import javax.swing.*;
Triangulo() {
this(null,0,0); // Llama al constructor con tres argumentos
}
Triangulo(Triangulo obj) {
super(obj);
figura = obj.figura;
}
Página 5 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
import javax.swing.*;
class MisFiguras {
JOptionPane.showMessageDialog(null,"Alto = " +
miTriangulo1.obtenerAlto() + "\nAncho = " +
miTriangulo1.obtenerAncho() + "\nArea = " +
miTriangulo1.area(), TRIANGULO1",
JOptionPane.INFORMATION_MESSAGE,icono);
JOptionPane.showMessageDialog(null,"Alto = " +
miTriangulo2.obtenerAlto() + "\nAncho = " +
miTriangulo2.obtenerAncho() + "\nArea = " +
miTriangulo2.area(), "TRIANGULO2",
JOptionPane.INFORMATION_MESSAGE,icono);
JOptionPane.showMessageDialog(null,"Alto = " +
miTriangulo3.obtenerAlto() + "\nAncho = " +
miTriangulo3.obtenerAncho() + "\nArea = " +
miTriangulo3.area(), "TRIANGULO3",
JOptionPane.INFORMATION_MESSAGE,icono);
}
}
Sobreescritura de métodos.
En una jerarquía de clases cuando un método en una subclase tiene el mismo nombre y firma de
Página 6 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
class A {
int i, j;
A(int a, int b) {
i = a;
b = j;
}
void show() {
System.out.println("i = " + i + " j = " + j);
}
class B extends A {
int k;
void show() {
super.show(); Llama el metodo show()
System.out.println("k = " + k);
} definida en la superclase A
class Sobreescritura {
public static void main(String args[]) {
B objB = new B(1,2,3);
objB.show();
}
}
La sobré escritura de método ocurre solo cuando los nombres y los tipos del método son idénticos. Si no lo
son, entonces los dos métodos son simplemente sobrecargados.
class A {
int i,j;
Página 7 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
A(int a, int b) {
i = a;
j = b;
}
void show() {
System.out.println("i = " + i + " j = " + j);
}
}
class B extends A{
int k;
class Sobrecarga {
public static void main(String args[]) { Hace un llamado a show()
B objB = new B(1,2,3); en A
objB.show();
Hace un llamado a show()
objB.show("k = ");
en B
}
}
La sobreescritura de método, forma la base de uno de los conceptos más poderosos de java: el despacho
de un método dinámico; mediante el cual una llamada a un método sobreescrito es resuelta en tiempo de
ejecución. De manera que cuando un método sobreescrito es llamado mediante una referencia superclase,
java determina cual versión de este método ejecutar, basado en el tipo de objeto que está siendo referido
en el momento de la llamada. Cuando diferentes tipos de objetos son referidos, diferentes versiones de un
método sobreescrito serán llamadas. En otras palabras, es el tipo de objeto que está siendo referido el que
determina cual versión de un método sobreescrito se ejecutará.
Digite, compile y ejecute el siguiente programa
import javax.swing.JOptionPane;
class Sup {
void who() {
Página 8 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
JOptionPane.showMessageDialog(null,"who() de Sup");
}
}
class DespachoDinamico {
public static void main(String args[]) {
Sup objSup = new Sup();
Sub1 objSub1 = new Sub1();
Sub2 objSub2 = new Sub2();
Sup supRef;
supRef = objSup;
supRef.who();
supRef = objSub1;
supRef.who();
supRef = objSub2;
supRef.who();
}
}
El polimorfismo permite que una clase general especifique métodos que serán comunes a todas sus
derivadas, lo que permite que las subclases definan la implementación especifica de algunos o todos esos
métodos.
class TwoDShape {
private double width;
private double height;
private String name;
TwoDShape() {
Página 9 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
width = height = 0;
name = "null";
}
TwoDShape(double x, String n) {
width = height = x;
name = n;
}
TwoDShape(TwoDShape obj) {
width = obj.width;
height = obj.height;
name = obj.name;
}
void showDim() {
System.out.println("Ancho = " + width + "Heigth = " + height);
}
double area() {
System.out.println("Area() debe ser sobreescrito");
return 0.0;
}
}
Triangle() {
super();
style = "null";
}
Página 10 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
style = s;
}
Triangle(double x) {
super(x,"Triangle");
style = "Isoceles";
}
Triangle(Triangle ob) {
super(ob);
style = ob.style;
}
double area() {
return getWidth() * getHeight() / 2;
}
}
Rectangle(double w, double h) {
super(w,h,"Rectangle");
Rectangle(double x) {
super(x,"Rectangle");
}
Rectangle(Rectangle ob) {
super(ob);
}
boolean isSquare() {
if (getWidth() == getHeight())
return true;
return false;
}
double area() {
return getWidth() * getHeight();
}
class DespachoDinamico2 {
public static void main(String args[]) {
TwoDShape shapes[] = new TwoDShape[5];
Página 11 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
Clases abstractas
En algunas ocasiones necesitará garantizar que las subclases sobreescriban algunos métodos de su
Página 12 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
TwoDShape no tiene significado para las subclases, por lo que es necesario que estas lo sobreescriban
para dar un significado de valor a dicho método.
La solución a esta situación en java es el método abstracto; el cual se crea especificando el modificador de
acceso abstract. Un método abstracto no contiene cuerpo y por lo tanto no es implementado por la
superclase. Así una subclase debe sobreescribirlo; no puede simplemente utilizar la versión de la
superclase.
Sintaxis:
Como puede observar el método abstracto no tiene cuerpo, no puede ser aplicado a constructores y
métodos estáticos.
Una clase que contenga métodos abstractos también debe ser declarada abstract. Debido a que las clases
abstractas no definen una implementación completa, no puede haber objetos de una clase abstracta;
cualquier intento de instanciar este tipo de clases dará un mensaje de error en tiempo de compilación.
Cuando un subclase hereda una clase abstracta, debe implementar todos los métodos definidos como
abstractos en la superclase; si no es así, entonces la subclase también debe ser especificada como abstract;
de esta manera el modificador abstracto será heredado hasta que se logre una implementación completa.
El código del programa anterior se puede mejorar definiendo la clase TwoDShape como abstracta. El
siguiente programa declara area() como abstract dentro de TwoDShape y a TwoDShape.
TwoDShape() {
width = height = 0;
name = "null";
}
TwoDShape(double x, String n) {
width = height = x;
name = n;
Página 13 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
TwoDShape(TwoDShape obj) {
width = obj.width;
height = obj.height;
name = obj.name;
}
void showDim() {
System.out.println("Ancho = " + width + "Heigth = " + height);
}
Triangle() {
super();
style = "null";
}
Triangle(double x) {
super(x,"Triangle");
style = "Isoceles";
}
Triangle(Triangle ob) {
super(ob);
Página 14 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
style = ob.style;
}
double area() {
return getWidth() * getHeight() / 2;
}
Rectangulo(double w, double h) {
super(w,h,"Rectangle");
Rectangulo(double x) {
super(x,"Rectangle");
}
Rectangulo(Rectangle ob) {
super(ob);
}
boolean isSquare() {
if (getWidth() == getHeight())
return true;
return false;
double area() {
return getWidth() * getHeight();
}
}
class DespachoDinamico2 {
public static void main(String args[]) {
TwoDShape shapes[] = new TwoDShape[4];
Página 15 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
}
}
Uso de final
El uso de esta palabra reservada de java, tiene como objetivo prevenir la Sobreescritura y la herencia;
para prevenir la sobreescritura debe anteponer la palabra final como un modificador al comienzo de la
declaración y para evitar la herencia debe anteponer la palabra final a la palabra class.
class A {
final void mensaje() {
System.out.println("Este metodo no se puede sobreescribir");
}
}
class B extends A {
void mensaje() { // Error no puede sobreescribirse
System.out.println("Esto no compila");
}
}
final class A {
void mensaje() {
System.out.println("Este metodo no se puede sobreescribir");
}
}
Otro uso de la palabra reservada final, es declarar como valores constantes los datos miembros o
variables locales.
Ejemplo:
Página 16 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
import javax.swing.JOptionPane;
class Circulo {
private double radio;
final double pi = 3.1416;
double area() {
return radio * radio * pi;
}
void setRadio(double r) {
radio = r;
}
}
class Principal {
public static void main(String args[]) {
Circulo circulo = new Circulo();
circulo.setRadio(3.3);
JOptionPane.showMessageDialog(null,"Area del circulo = " + circulo.area());
}
}
Ejercicio propuesto
Página 17 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
Escrito
- codigo : String
- titulo : String
- autor : String
- año : int
- paginas : int
+ mostrar () : void
...
o Para cada posición de los arreglos Libro y Articulo, debe crear un respectivo objeto haciendo uso
de un constructor parametrizado.1
5. Al método mostrar(), implemente el código necesario para mostrar la información completa de los
respectivos objetos. Este método debe ser llamado a través de una instancia de la superclase.
7. Use el modificador de acceso final con el método mostrar() de la superclase y con la superclase,
digite, compile y ejecute de nuevo el programa.
Página 18 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
Evidencias de Producto:
Programas java
Página 19 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
SISTEMA INTEGRADO DE GESTIÓN Versión: 02
Procedimiento Ejecución de la Formación Profesional Integral
GUÍA DE APRENDIZAJE Código: GFPI-F-019
Página 20 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
SISTEMA INTEGRADO DE GESTIÓN Versión: 02
Procedimiento Ejecución de la Formación Profesional Integral
GUÍA DE APRENDIZAJE Código: GFPI-F-019
5. GLOSARIO DE TERMINOS
JDK
J2SE
Java
6. REFERENTES BIBLIOGRÁFICOS
Harvey M. Deitel, Paul J. Deitel (2004). Como Programar en Java, Pearson Education.
Froufe Quintas, Agustín (2009). Java 2 : manual de usuario y tutorial , Alfaomega Ra-Ma
Flórez Fernández, Héctor Arturo (2012). Programación Orientada a Objetos Usando Java, Ecoe
Ediciones.
http://www.digitaliapublishing.com.bdigital.sena.edu.co/a/30030/programacion-orientada-a-objetos-
con-java
Página 21 de 22
SERVICIO NACIONAL DE APRENDIZAJE SENA
GUÍA DE APRENDIZAJE Versión: 02
SISTEMA INTEGRADO DE GESTIÓN
Proceso Gestión de la Formación Profesional Integral Código: GFPI-F-019
Procedimiento Ejecución de la Formación Profesional Integral
Página 22 de 22