Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MC AA1 FundamentosPOO
MC AA1 FundamentosPOO
FACULTAD DE INGENIERIA
DEPARTAMENTO DE EDUCACIÓN A DISTANCIA
PROGRAMA
TECNOLOGÍA EN INFORMÁTICA Y SISTEMAS
COMPILADO
UNIDAD TEMÁTICA
PROGRAMACIÓN II
PREPARADO POR
YOIS S. PASCUAS RENGIFO
Ingeniera de Sistemas
Magíster en Ciencias de la Información y las Comunicaciones
y.pascuas@udla.edu.co
Compilado Programación II
1
TABLA DE CONTENIDO
INTRODUCCIÓN
4
COMPETENCIAS
5
SUB
EJES
PROBLÉMICOS
5
1.
CONCEPTOS
DE
PROGRAMACIÓN
ORIENTADA
A
OBJETOS
6
1.1
EL
MUNDO
REAL
COMO
UNA
COLECCIÓN
DE
OBJETOS
7
1.2
CARACTERÍSTICAS
DE
LA
POO
8
1.3
IMPORTANCIA
DE
LA
POO
9
1.4
PRINCIPIOS
FUNDAMENTALES
DE
LA
POO
9
1.4.1
OBJETOS
10
1.4.2
CLASE
12
1.4.3
RELACIÓN
ENTRE
CLASE
Y
OBJETO
14
1.4.4
ATRIBUTO
14
1.4.5
MÉTODO
15
1.4.6
MENSAJE
16
1.5
ORIENTACIÓN
A
OBJETOS
17
1.5.1
ABSTRACCIÓN
17
1.5.2
ENCAPSULACIÓN
19
1.5.3
MODULARIDAD
20
1.5.4
HERENCIA
20
1.5.5
POLIMORFISMO
21
1.6
LENGUAJES
DE
PROGRAMACIÓN
ORIENTADO
A
OBJETOS
23
2.
CLASES
Y
OBJETOS
26
2.1
OBJETOS
27
2.2
INSTANCIACIÓN
DE
LAS
CLASES:
LOS
OBJETOS
27
2.2.1
REFERENCIAS
A
OBJETO
E
INSTANCIAS
27
2.3
IDENTIFICACIÓN
DE
OBJETOS
28
2.4
CLASES
28
2.4.1
ATRIBUTOS
30
2.4.2
MÉTODOS
30
2.4.3
CONSTRUCTORES
Y
DESTRUCTORES
31
2.5
APLICACIÓN
PRÁCTICA
34
3.
HERENCIA
41
3.1
VENTAJAS
DE
LA
HERENCIA
42
3.2
TIPOS
DE
HERENCIA
42
3.2.3
HERENCIA
MÚLTIPLE
43
3.3
VISIBILIDAD
PÚBLICA,
PRIVADA
Y
PROTEGIDA
44
3.4
CLASES
ABSTRACTAS
E
INTERFACES
45
3.4.1
INTERFACES
47
3.5
APLICACIÓN
PRÁCTICA
CON
LA
HERENCIA
49
4.
POLIMORFISMO
54
Compilado Programación II
3
INTRODUCCIÓN
Compilado Programación II
5
1. CONCEPTOS DE PROGRAMACIÓN ORIENTADA A
OBJETOS
Compilado Programación II
7
− Los programas son fáciles de diseñar debido a que los objetos
reflejan elementos del mundo real.
− Las aplicaciones son más sencillas para los usuarios debido a
que los datos innecesarios están ocultos.
− Los objetos son unidades autocontenidas.
− La productividad se incrementa debido a que puede reutilizar
el código.
− Los sistemas son fáciles de mantener y se adaptan a las
cambiantes necesidades de negocios.
− Es más fácil crear nuevos tipos de objetos a partir de los ya
existentes.
− Simplifica los datos complejos.
− Reduce la complejidad de la transacción.
− Confiabilidad.
− Robustez.
− Capacidad de ampliación.
− Permite mostrar la magnitud de los lenguajes de
programacion basada en objetos.
− Crea sistemas mas flexibles, que en un futuro son
modificables.
- Uniformidad
Ya que es la representación de los objetos implica tanto el
análisis como el diseño y la codificación de los mismos.
- Comprensión
Tanto los datos que componen los objetos, como los
procedimientos que los manipulan, están agrupados en
clases, que se corresponden con las estructuras de
información que el programa trata.
- Flexibilidad
Al tener relacionados los procedimientos que manipulan los
datos con los datos a tratar, cualquier cambio que se realice
sobre ellos quedará reflejado automáticamente en cualquier
lugar donde estos datos aparezcan.
Compilado Programación II
9
Programación
Orientada
a
Objetos
1.4.1 OBJETOS
Características Generales
- Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea
y utiliza. Para ser utilizado en un algoritmo el objeto debe ser creado con una
instrucción particular (New ó Nuevo) y al finalizar su utilización es destruido
con el uso de otra instrucción o de manera automática. (Programación, 2007)
Objeto
Animal Planta
Perro Humano
Comerciant
Pluto
e
Artista
1.4.2 CLASE
Características Generales
1.4.4 ATRIBUTO
1.4.5 MÉTODO
Para acciones:
Características Generales
1.4.6 MENSAJE
1.5.1 ABSTRACCIÓN
1.5.2 ENCAPSULACIÓN
− Público (+) Atributos o Métodos que son accesibles fuera de la clase. Pueden
ser llamados por cualquier clase, aun si no está relacionada con ella.
− Privado (-) Atributos o Métodos que solo son accesibles dentro de la
implementación de la clase.
− Protegido (#): Atributos o Métodos que son accesibles para la propia clase y
sus clases hijas (subclases).
Los atributos y los métodos que son públicos constituyen la interfaz de la clase,
es decir, lo que el mundo exterior conoce de la misma.
Normalmente lo usual es que se oculten los atributos de la clase y solo sean
visibles los métodos, incluyendo entonces algunos de consulta para ver los
valores de los atributos. El método constructor (Nuevo, New) siempre es Público.
1.5.4 HERENCIA
La herencia es la propiedad que permite a los objetos construirse a partir de otros objetos.
La utilidad de la herencia es que las clases hijas reciben propiedades de sus clases padres,
evitando la necesidad de repetir el código anterior, haciendo el código reutilizable. Existen
varias formas de determinar qué atributos y comportamientos pueden heredar las clases
hijas de su superclase. El propio acto de tomar propiedades de su superclase se
denomina “herencia”.
1.5.5 POLIMORFISMO
Es una propiedad del EOO que permite que un método tenga múltiples
implementaciones, que se seleccionan en base al tipo objeto indicado al solicitar
la ejecución del método. El polimorfismo operacional o sobrecarga operacional
permite aplicar operaciones con igual nombre a diferentes clases o están
relacionados en términos de inclusión. En este tipo de polimorfismo, los métodos
son interpretados en el contexto del objeto particular, ya que los métodos con
nombres comunes son implementados de diferente manera dependiendo de cada
clase.
Ejemplos:
Clase_Madre::nombre_método;
Para el ejemplo, la llamada en la clase hija Ave del método sobrecargado Comer
de la clase madre Animal sería:
Animal::Comer
Recomendado…
http://webdelprofesor.ula.ve/ingenieria/hyelitza/materias/prog
ramacion2/oxo/ProfaYusneyi_Tema8_POOClasesyObjetos.pdf
− ABAP
− ABL Lenguaje de programación de OpenEdge de Progress
Software
− ActionScript
− ActionScript 3
− Ada
− C++
− C#
− Clarion
− Clipper (lenguaje de programación) (Versión 5.x con librería
de objetos Class(y))
Bus FZP30B
Tren VCE751
Los objetos y las clases se comparan con las variables y tipos en lenguaje
de programación convencional. Una variable es una instancia de un tipo,
como un objeto es una instancia de una clase. Sin embargo. Una clase es
más expresiva que un tipo. Una clase describe un grupo similar de objetos
y encapsula el estado de un objeto: las estructura de datos y las funciones
que manipulan esas estructuras. (Aguilar, 1996)
2.1 OBJETOS
MiPunto p;
Compilado Programación II
27
Esta es una declaración de una variable p que es una referencia
a un objeto de la clase MiPunto, de momento con un valor por
defecto de null. La referencia null es una referencia a un objeto
de la clase Object, y se podrá convertir a una referencia a
cualquier otro objeto porque todos los objetos son hijos de la
clase Object.
2.4 CLASES
class MiPunto {
}
class Nombre_De_Clase {
tipo_de_variable nombre_de_atributo1;
tipo_de_variable nombre_de_atributo2;
// . . .
tipo_devuelto nombre_de_método1( lista_de_parámetros ) {
cuerpo_del_método1;
}
tipo_devuelto nombre_de_método2( lista_de_parámetros ) {
cuerpo_del_método2;
}
2.4.1 ATRIBUTOS
class MiPunto {
int x, y; }
2.4.2 MÉTODOS
void metodoVacio( ) { };
2.4.3.1 Constructores
Por ejemplo:
MiPunto( ) {
inicia( -1, -1 );
}
Se muestra en la pantalla:
p1.- x = 10 y = 20
class ClaseFinalizada{
ClaseFinalizada() { // Constructor
// Reserva del recurso no Java o recurso compartido
}
2.5 APLICACIÓN
PRÁCTICA
Clase
Para crear una clase se utiliza la palabra reservada class y a
continuación el nombre de la clase. La definición de la clase se
pone entre las llaves de apertura y cierre. El nombre de la clase
empieza por letra mayúscula.
class Campo{
//miembros dato
}
//constructores //funciones miembro
Compilado Programación II
35
Miembro dato
Los valores de los atributos se guardan en los miembros dato o
variables de instancia. Los nombres de dichas variables
comienzan por letra minúscula.
Constructor
Un objeto de una clase se crea llamando a una función especial
denominada constructor de la clase. El constructor se llama de
forma automática cuando se crea un objeto, para situarlo en
memoria e inicializar los miembros dato declarados en la clase.
El constructor tiene el mismo nombre que la clase. Lo específico
del constructor es que no retorna ningún valor.
class Campo{
int numeroOlivas; // variable de instancia o miembro dato
int edadOlivo; // variable de instancia o miembro dato
Campo(edad,numOlivas){ // recibe los valores de los objetos
this.edadOlivo=edad; // los valores son asignados a las variables
de instancia.
this.numeroOlivas=numOlivas; }
}
Método
En el lenguaje Java las funciones miembro o métodos se definen
en la clase y se llaman mediante los objetos. El nombre de las
funciones miembro o métodos comie nza por letra minúscula.
La definición de una función tiene el siguiente formato:
class Campo{
int numeroOlivas; // variable de instancia o miembro dato int
edadOlivo; // variable de instancia o miembro dato static final
double PVPOLIVA=0.05; // variable de clase
Campo(edad,numOlivas){ // primer constructor recibe los valores
de los objetos this.edadOlivo=edad; // los valores son asignados
a las variables de instancia.
this.numeroOlivas=numOlivas; }
Campo(numOlivas){ // segundo constructor recibe los valores de
los objetos this.edadOlivo= 30; // los valores son asignados a las
variables de instancia.
this.numeroOlivas=numOlivas; }
double beneficio(){ // función calculo beneficio
dinero=numeroOlivas*PVPOLIVA ;
return dinero; }
void sumaEdad (int incremento){ // función incremento edad del
olivo no devuelve nada
edadOlivo+=incremento ; }
void sumaOlivas (int sumaOlivas){ // función incremento de
olivas no devuelve nada
}
numeroOlivas+=sumaOlivas; }
Objeto
Animal
Herbívoro Carnívoro
Omnívoro
Humano
ü Se ahorra código
ü Permite reutilizar código extendiendo su funcionalidad
ü Desventajas
ü Se ahorra código
ü Se introduce una fuerte dependencia en la clase hija respecto
a la clase padre
ü Puede dificultar la reutilización
ü Un cambio en la clase padre puede tener efectos imprevistos
en las clases hijas
ü Un objeto de una clase hija puede tener un comportamiento
inconsistente con lo esperado de un objeto de la clase padre
ü Se establece una jerarquía o clasificación. Si cambia el
criterio de clasificación puede acarrear muchas
modificaciones (Herencia)
A
B C
D
E
A B
C
La herencia múltiple permite a una clase tomar funcionalidades
de otras clases, como permitir a una clase llamada
MusicoEstudiante heredar de una clase llamada Persona, una
clase llamada Músico, y una clase llamada Trabajador. Esto
puede ser abreviado como MusicoEstudiante : Persona, Músico,
Trabajador.
class Empleado {
private:
char* m_nombre;
char* m_departamento;
char* m_posicion;
long m_salario;
public:
void ImprimirInfo();
void SetNombre( char* nombre ) { m_nombre = nombre }
void SetDepartamento( char * departamento) {
m_departamento = departamento }
void SetPosicion ( char* posicion ) { m_posicion = posicion
}
void SetSalario ( long salario ) { m_salario = salario }
const char* GetNombre( ){ return m_nombre }
const char* GetDepartamento( ){ return m_departamento }
const char* GetPosicion( ){ return m_posicion }
const char* GetSalario( ){ return m_salario }
};
3.4.1 INTERFACES
import javax.*;
import javax.swing.JOptionPane;
EJEMPLO
50 Universidad de la Amazonia - Tecnología en Informática y Sistemas
Se tiene la creación de la clase Persona:
EJEMPLO
//Metodos:
public void correrMuyRapido(){
//TODO: implementar
}
Nota: La palabra clave extends nos indica que SuperHeroe está heredando
o extendiendo a la super clase Persona. Ahora veamos como se comporta
esta nueva clase dentro del cuerpo del programa principal:
En resumen Herencia …
Ventajas
− Se ahorra código
− Permite reutilizar código extendiendo su funcionalidad
Desventajas
− Se introduce una fuerte dependencia en la clase hija respecto a la clase padre
− Puede dificultar la reutilización
− Un cambio en la clase padre puede tener efectos imprevistos en las clases hijas
− Un objeto de una clase hija puede tener un comportamiento inconsistente con lo
esperado de un objeto de la clase padre
− Se establece una jerarquía o clasificación. Si cambia el criterio de clasificación puede
acarrear muchas modificaciones. (Herencia)
EJEMPLO
4.1 SOBRECARGA
EJEMPLO
4.2 SOBREESCRITURA
class Figura {
protected double area;
protected double perimetro;
public Figura() {
this.area=0;
class Mamifero {
public void mover() {
System.out.println("Ahora es un mamifero el que se mueve");
}
}
for(int i=0;i<10;i++){
orquesta[i]=generarInstrumento(new
java.util.Random().nextInt(3));
}
for(int i=0;i<10;i++){
afinarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i],notas[i%7]);
}
}
EJEMPLO
Por ejemplo, una clase base Animal podría tener una función
virtual come. La subclase Pez implementaría come() de forma
diferente que la subclase Lobo, pero se podría invocar a come()
en cualquier instancia de una clase referida como Animal, y
obtener el comportamiento de come() de la subclase específica.
# include <iostream>
int main()
{
Animal *unAnimal[4];
unAnimal[0] = new Animal();
unAnimal[1] = new Lobo();
unAnimal[2] = new Pez();
unAnimal[3] = new OtroAnimal();
Una clase que incluya una funcion virtual es llamada una 'clase
polimórfica'. Este término también aplica a una clase que
hereda una clase base conteniendo una funcion virtual.
Examine este corto programa, el cual demuestra el uso de
funciones virtuales:
class base {
public:
virtual void quien() {cout << "Base" << endl;} // especificar una
clase virtual
};
int main()
primera_d obj_primera;
segunda_d obj_segundo;
p = &obj_base;
p->quien(); // acceder a quien() en base
p = &obj_primera;
p->quien(); // acceder a quien() en primera_d
p = &obj_segunda;
p->quien(); // acceder a quien() en segunda_d
return 0;
}
Base
Primera derivacion
Segunda derivación
class figura {
double x, y;
public:
void set_dim(double i, double j=0) {
x = i;
y = j;
}
/*
Este programa no compilara porque la clase
circulo no redefinio mostrar_area()
*/
#include <iostream>
using namespace std;
class figura {
protected:
double x, y;
public:
void set_dim(double i, double j=0) {
x = i;
y = j;
}
virtual void mostrar_area() = 0; // pura
};
public:
void mostrar_area() {
cout << "Triangulo con alto ";
cout << x << " y base " << y;
cout << " tiene un area de ";
cout << x * 0.5 * y << ".\n";
}
};
class rectangulo : public figura {
public:
void mostrar_area() {
cout << "Rectangulo con dimensiones ";
cout << x << " x " << y;
cout << " tiene un area de ";
int main()
{
figura *p; // crear un puntero al tipo base
p = &t;
p->set_dim(10.0, 5.0);
p->mostrar_area();
p = &r;
p->set_dim(10.0, 5.0);
p->mostrar_area();
return 0;
}
Se tiene:
#include<iostream>
using namespace std;
class Figura {
72 Universidad de la Amazonia - Tecnología en Informática y Sistemas
private:
float base;
float altura;
public:
void captura();
virtual unsigned float perimetro()=0;
virtual unsigned float area()=0;
};
void Figura::captura()
{
cout << "CALCULO DEL AREA Y PERIMETRO DE UN
TRIANGULO ISÓSCELES Y UN RECTANGULO:" << endl;
cout << "escribe la altura: ";
cin >> altura;
cout << "escribe la base: ";
cin >> base;
cout << "EL PERIMETRO ES: " << perimetro();
cout << "EL AREA ES: " << area();
getch();
return 0;
}
5.1 ASOCIACIÓN
Ejemplo:
5.2 AGREGACIÓN
Un Ejemplo es el siguiente:
En donde se destaca que:
5.3 COMPOSICIÓN
Desde el punto de
vista de la
persistencia no es
una complicación ya
que la tabla
intermedia que
vincula a Personas y
Sucursales tendrá
más campos de
información.