Publicado el 12 de Julio del 2018
777 visualizaciones desde el 12 de Julio del 2018
807,4 KB
7 paginas
Abstracción
Encapsulamiento
Separación de las propiedades de un
método / objeto / clase / módulo
de la implementación del mismo
Ocultamiento de información
No es necesario dar conocer los detalles de la
implementación para poder hacer uso de un
método/clase/módulo
Se protegen las partes del código que le hacen
uso contra cambios al realizar modificaciones a
la implementación específica de ello
Objeto
Polimorfismo
estado + comportamiento + identidad
atributos: los datos
métodos: eventos, mensajes, llamadas, funciones
cada objeto es único
Uso de la misma definición de una funcionalidad
con varios diferentes tipos de datos
Mecanismos
Sobrecarga de operadores
Polimorfismo paramétrico
atributos y métodos compartidos (de clase)
Polimorfismo de subtipos (herencia)
EJEMPLO DE POLIMORFISMO
Operación
3 + 7
0.1 + 11.001
2 + 0.0008
“ho” + “la”
Resultado
12
11.101
2.0008
”hola”
Herencia
Una clase se deriva de otra
Finalidad: extender la funcionalidad para una
necesidad específica
Reuso implícito del código existente
Redefinición selectiva y parcial de la
funcionalidad heredada
Padre único o padres múltiples
Si la asignación del tipo del objeto referenciado ocurre durante la
ejecución del programa, se habla de asignación tardía/dinámica.
Otra opción es resolverlo ya en tiempo de compilación.
Interfaces
Lenguajes orientados a objetos
Algunos lenguajes incluyen clases padre que no
pueden ser usadas para la creación de instancias
Clases abstractas (C++)
Atributos (crea conflictos potenciales)
Métodos con o sin implementación
Interfaces (Java)
Solamente métodos sin implementación
Lenguajes de programación
fundamentadas en la definición de clases,
creación de objetos e interacciones entre
los objetos a través de sus métodos
Altamente populares
Ada
lenguaje moderno que incorpora muchos elementos
sofisticados (objetos, visibilidad, excepciones, etc.)
propuesto al inicio de los años 80
no realmente para principiantes
no realmente importa si se usa minúsculas o mayúsculas
palabras reservadas típicamente en minúscula
nombres de constantes, por ejemplo, en mayúscula
paquete gnat en ubuntu
http://www.infres.enst.fr/~pautet/Ada95/a95list.htm
C++
Cabeceras .hpp contienen declaraciones de clases
Interfaces para el programador
Implementaciones están en los .cpp
Compilador g++ en el terminal
viene tal cual en ubuntu y con XCode en OS X
MonoDevelop IDE para .NET en ubuntu
Popular, potente, a veces algo complicado
Ojo con el alcance de variables, en particular
Al compilar, por defecto el ejecutable creado reside en el archivo a.out, pero con la opción
-o se puede dirigirlo directamente bajo otro nombre:
Ejemplo (fragmento)
> gcc cprog.c
> ./a.out
Hello, world!
procedure Pop(S: in out Stack; D: in out StackData'class) is
F(1-10): 0 1 2 3 5 8 13 21 34 55 89
Zombie: Node_Ptr;
Bye!
begin
> gcc -o fibo cprog.c
if S.head /= null then
Zombie := S.Head;
> ./fibo
S.Head := S.Head.Next;
Hello, world!
D := Zombie.Data.all;
F(1-10): 0 1 2 3 5 8 13 21 34 55 89
Free(Zombie.Data);
Bye!
Free(Zombie);
end if;
>
end Pop;
procedure Top(S: Stack; Data: in out StackData'class) is
begin
if S.Head /= null then
Data := S.Head.Data.all;
end if;
end Top;
http://sandbox.mc.edu/~bennet/ada/examples/genstack_adb.html
Los programas de C++ están compuestas por clases, mientras los de C están estructurados en sub-
rutinas. En ambos lenguajes, se suele separar definiciones de implementación. En C, las defini-
ciones de pone en archivos tipo .h y en C++ en archivos tipo .hpp. El código de C se pone en
archivos .c y lo de C++ en archivos tipo .cpp.
Como un ejemplo simple de un programa en C++, tenemos el archivo siguiente de definiciones
bajo el nombre cuenta.hpp:
Ejemplo .hpp
class CuentaBancaria {
CAPÍTULO7. PROGRAMACIÓN
private:
double balanceActual;
public:
CuentaBancaria();
double balance();
void depositar(double monto);
int retirar(double monto);
};
y el código siguiente en cppprog.cpp:
ciones de pone en archivos tipo .h y en C++ en archivos tipo .hpp. El código de C se pone en
archivos .c y lo de C++ en archivos tipo .cpp.
Como un ejemplo simple de un programa en C++, tenemos el archivo siguiente de definiciones
bajo el nombre cuenta.hpp:
Ejemplo .cpp: métodos
Ejemplo .hpp
CuentaBancaria();
double balance();
void depositar(double monto);
int retirar(double monto);
y el código siguiente en cppprog.cpp:
public:
};
CAPÍTULO7. PROGRAMACIÓN
public:
class CuentaBancaria {
CAPÍTULO7. PROGRAMACIÓN
CuentaBancaria();
double balance();
private:
void depositar(double monto);
int retirar(double monto);
double balanceActual;
};
public:
y el código siguiente en cppprog.cpp:
CuentaBancaria();
double balance();
void depositar(double monto);
int retirar(double monto);
#include <iostream>
#include "cuenta.hpp"
};
using namespace std;
CuentaBancaria::CuentaBancaria() {
balanceActual = 0.0;
double CuentaBancaria::balance() {
y el código siguiente en cppprog.cpp:
return balanceActual;
balanceActual += monto;
return;
void CuentaBancaria::depositar(double monto) {
#include <iostream>
#include "cuenta.hpp"
Ejemplo .cpp: main
int CuentaBancaria::retirar(double monto) {
if (balanceActual >= monto) {
}
balanceActual -= monto;
return 0;
using namespace std;
}
return -1;
CuentaBancaria::CuentaBancaria() {
balanceActual = 0.0;
int main(int argc, void* args) {
}
double CuentaBancaria::balance() {
CuentaBancaria* bc = new CuentaBancaria();
cout << "Cuenta nueva con balance de " << bc->balance() << " pesos." << endl;
cout << "Depositando 500 pesos..." << endl;
bc->depositar(500.0);
cout << "Balance actual: " << bc->balance() << endl;
bc->retirar(200.0);
cout << "Balance actual: " << bc->balance() << endl;
delete bc;
return 0;
return balanceActual;
}
void CuentaBancaria::depositar(double monto) {
balanceActual += monto;
return;
Al compilar y ejecutar, obtenemos lo siguiente en yalma.fime.uanl.mx:
Podría ir en su propio archivo .cpp o en el mismo
int CuentaBancaria::retirar(double monto) {
}
> g++ cppprog.cpp
> ./a.out
Cuenta nueva con balance de 0 pesos.
Depositando 500 pesos...
Balance actual: 500
Balance actual: 300
> g++ -o banco cppprog.cpp
}
> ./banco
if (balanceActual >= monto) {
balanceActual -= monto;
return 0;
}
}
}
}
136
#include <iostream>
#include "cuenta.hpp"
using namespace std;
CuentaBancaria::CuentaBancaria() {
balanceActual = 0.0;
double CuentaBancaria::balance() {
return balanceActual;
void CuentaBancaria::depositar(double monto) {
balanceActual += monto;
return;
int CuentaBancaria::retirar(double monto) {
if (balanceActual >= monto) {
balanceActual -= monto;
return 0;
}
return -1;
}
}
}
}
}
136
Noten el ::
int main(int argc, void* args) {
CuentaBancaria* bc = new CuentaBancaria();
cout << "Cuenta nueva con balance de " << bc->balance() << " pesos." << endl;
cout << "Depositando 500 pesos..." << endl;
bc->depositar(500.0);
cout << "Balance actual: " << bc->balance() << endl;
bc->retirar(200.0);
cout << "Balance actual: " << bc->balance() << endl;
delete bc;
return 0;
Smalltalk
Al compilar y ejecutar, obtenemos lo siguiente en yalma.fime.uanl.mx:
> g++ cppprog.cpp
> ./a.out
Cuenta nueva con balance de 0 pesos.
Depositando 500 pesos...
Balance actual: 500
Balance actual: 300
> g++ -o banco cppprog.cpp
> ./banco
Cuenta nueva con balance de 0 pesos.
Depositando 500 pesos...
Balance actual: 500
intérprete
Balance actual: 300
>
lenguaje fuertemente orientada en objetos
intercambio de mensajes entre objetos
en ubuntu, paquete gnu-smalltalk
versión de código abierto llamada Squeak
http://squeakbyexample.org/
http://www.smalltalk.org/main/
http://www.cs.oswego.edu/~odendahl/manuals/smalltalk/tutorial/
Ejemplo
^(self var sqrt)
^( self sum / self size )
^( self inject: 0 into: [ :s :x | s+x ])
^(( self sumsquares - ( self squaresum / self size ))/(self size - 1))
Methods Collection 'new'
sum
!
|
mean
!
|
var
!
CAPÍTULO7. PROGRAMACIÓN
|
sigma
7.1.2. Java
!
|
squares
!
Java es un lenguaje orientado a objectos que tiene mucho en común con C y C++. En Java, ya
|
muchas de las operaciones “básicas” de C/C++ se hace con objetos.
sumsquares
!
|
Se usa la instrucción/bin/javac es la compiladora misma y la instrucción /bin/java es
squaresum
para ejecutar programas ya compilados escritos en Java. En yalma.fime.uanl.mx, la versión
!
]
es 1.4.2, que ya es bastante vieja:
http://csci.csusb.edu/dick/cs320/smalltalk/
^( self collect: [ :x | x * x ] )
^( self squares sum )
^( self sum squared )
137
> java -version
java version "1.4.2_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
Java HotSpot(TM) Client VM (build 1.4.2_05-b04, mixed mode)
>
El siguiente ejemplo es prácticamente lo mismo que lo de C++ de la sección anterior; escribimos
todo en un sólo archivo CuentaBancaria.java:
Ejemplo
public class CuentaBancaria {
private double balanceActual;
public CuentaBancaria() {
this.balanceActual = 0.0;
}
public void depositar(double monto) {
this.balanceActual += monto;
return;
}
public boolean retirar(double monto) {
if (this.balanceActual >= monto) {
this.balanceActual -= monto;
return true;
} else {
return false;
}
}
}
public String toString() {
return ("Balance actual: " + this.balanceActual);
public static void main(String[] args) {
CuentaBancaria b = new CuentaBancaria();
System.out.println("Nueva cuenta creada.");
b.depositar(500.0);
System.out.println(b);
b.retirar(200.0);
System.out.println(b);
> java -version
java version "1.4.2_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04)
Java HotSpot(TM) Client VM (build 1.4.2_05-b04, mixed mode)
>
Java
El siguiente ejemplo es prácticamente lo mismo que lo de C++ de la sección anterior; escribimos
todo en un sólo archivo CuentaBancaria.java:
Implementación y definición van juntos en un
sólo archivo fuente por cla
Comentarios de: Lenguaje de programación (0)
No hay comentarios