Você está na página 1de 46

Programacin Avanzada

Primavera 2006
Programacin Orientada a
Objetos C++
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 2
La Tecnologa Orientada a Objetos
Se ha dicho que la Tecnologa Orientada a Objetos
es una metodologa, un paradigma, una tecnologa
de empaquetamiento, un mtodo de anlisis y
diseo, y hasta un nuevo lenguaje para datos
abstractos.
Planteada como una herramienta para construir
modelos funcionales de Sistemas Fsicos complejos
que pudieran contener varios miles de
componentes.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 3
Meta y objetivo
Conocer el ambiente de trabajo utilizando los
conceptos de la Programacin Orientada a
Objetos
Familiarizarse con los conceptos de Clase y
Objetos
Aplicar la POO en el desarrollo de
aplicaciones
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 4
Los Objetos
El concepto de Objetos surgi de la necesidad de
modelar los objetos del mundo real en simulaciones por
computadora. Un objeto se define, entonces, como:
una unidad de software que contiene una coleccin
de datos y procedimientos interrelacionados y que es
capaz de recibir mensajes del exterior.
Los datos definen el estado del Objeto en cualquier
momento y los procedimientos, que se denominan
mtodos, definen el comportamiento de un Objeto.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 5
Clases
Una clase es un tipo definido por el usuario.
Generaliza el concepto de Estructura y lo
reemplaza con ventaja.
Una Clase es un prototipo que define los
mtodos y datos que sern incluidos en un tipo
de Objeto particular, as que los objetos son
instancias de las clases.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 6
Los Lenguajes de la P.O.O.
Simula-67 (intento acadmico prehistrico).
Los lenguajes Orientados a Objetos ms conocidos
comercialmente:
Smalltalk-80 Ada
C++ Objetive-C
Eiffel
Los menos conocidos:
Flavors Loops
Actor ABCL
Object Pascal Neon
Modula-2 Mesa
Cedar, etc.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 7
Objeto
Un objeto es, en trminos computacionales,
la representacin en memoria de una
abstraccin del mundo real, un ente
encapsulado que contiene Datos y Mtodos,
y que es capaz de recibir mensajes del
exterior.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 8
Clases
Una clase es un tipo definido por el usuario.
Generaliza el concepto de Estructura y lo
reemplaza con ventaja.
En otras palabras, una clase es un prototipo
que define los mtodos y datos que sern
incluidos en un tipo de Objeto particular.
As que los objetos son instancias de las
Clases.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 9
Herencia
Es un mecanismo por el cual, una Clase de
Objetos puede expresarse como un caso
especial de un Clase mas general, es decir
incluye automticamente toda la definicin de
Datos y Mtodos de la Clase General.
Subclases y Superclases
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 10
Mensajes
La forma en que los Objetos interactan
entre si, es enviando mensajes pidiendo que
se active (ejecute) un mtodo especfico.
Un mensaje consiste simplemente del
nombre del Objeto a quien va dirigido,
seguido del nombre del Mtodo que el
receptor sabe como ejecutar (usar
parametros en caso de ser necesario).
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 11
Encapsulamiento
Mecanismo por medio del cual, un Objeto
esconde sus Datos y Mtodos al mundo
exterior.
El encapsulamiento permite proteger los
datos de transformaciones no deseadas, y
slo bajo autorizacin del propio Objeto.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 12
Polimorfismo
Es la posibilidad de que un nombre (identificador),
pueda ser usado con diferentes propsitos, aunque
relacionados semnticamente (interfase y mltiples
mtodos).
Sobrecarga de Operadores
Sobrecarga de Funciones
Sobrecarga de Constructores
Polimorfismo de Herencia
Funciones Virtuales
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 13
Preliminares
Todo programa en lenguaje C++ debe tener la
siguiente extensin:
file.c, file.cc ; en UNIX
file.cpp ; en Windows/ MS-DOS
Comentarios en C++
/* Este es un comentario */
/* Este tambin es un
comentario
multilneas */
// comentario unilineal
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 14
Programa principal
Todos los programas deben tener un main
main() es la funcin llamada por el Sistema
Operativo
main regresa 0 y significa que termin con xito
Las llaves { } denotan el cuerpo del programa
Toda declaracin termina con un punto y coma
(;)
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 15
Un primer programa
#include <iostream.h> // biblioteca de encabezado
int main() // funcin principal
{ // inicio del cuerpo del programa
float a, b, c; // declaracin de variables reales
cin >> a >> b; // entrada de datos
c = a + b; // suma
cout << La suma es : << c; // salida de datos
return 0; // trmino del programa
} // fin del cuerpo de la funcin main
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 16
Tipos de datos en c++
int x, y; // variables enteras
float s; // variable real
char a[10]; // a = arreglo de 10 caracteres
Real*8 double
Real*4 float
Entero*4 int , int long
Entero*2 short
Carcter*1 char
Lgicos bool
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 17
Operadores
#include <iostream.h>
int main() {
int i = 1;
cout << i << , ;
cout << (++i ) << , ;
cout << i << , ;
cout << (i++) << , ;
cout << i;
return 0;
}
Salida : 1, 2, 2, 2, 3
predecremento --x
postdecremento x--
preincremento ++x
postincremento x++
negativo -y
positivo +x
modulo x % y
divisin x/y
multiplicacin x* y
resta x y
suma x + y
Descripcion Operacin
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 18
....Mas operadores
&& y || se evalan de izquierda a derecha
Diferente x != y
Igual x == y
Mayor o igual que x >= y
Mayor que x > y
Menor o igual que x <= y
Menor que x < y
Op. De Relacin Operacin
or x y
and x && y
Negacin !x
Valor verdadero No-cero
Valor falso 0
Op. Lgicos Operacin
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 19
Operadores para manejo de bits
char x; Binario Operacin
X=7; 0 0 0 0 0 1 1 1
Asgnacn
X << 1; 0 0 0 0 1 1 1 0 J4{x2)
X << 3; 0 1 1 1 0 0 0 0
JJ2{x)
X << 2; 1 1 0 0 0 0 0 0
J92{x4)
X >> 1; 0 1 1 0 0 0 0 0 9{x2)
X >> 2; 0 0 0 1 1 0 0 0 24{x4)
Corrimiento a la
derecha
i >> j
Corrimiento a la
izquierda
i << j
Or inclusivo i j
Or exclusivo i j
And i & j
Complemento -i
Descripcin Operacin
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 20
Estructura de un Lenguaje de Programacin
Un programa en Lenguaje C/C++ est formado por
las siguientes estructuras:
ENTRADA Y SALIDA : cin y cout
DECISIN: if-else y switch
REPETICIN : for, while, do-while
Importante dentro del Lenguaje:
Funciones: por valor y por referencia
Arreglos : unidimensionales y multidimensionales
Estructuras: struct
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 21
Estructuras de Decisin
if [else]
El if se utiliza para verificar
si una expresion es
verdadera (se ejecuta las
sentencias1) o si la
expresion es falsa (se
ejecutan las sentencias2).
if (expresion) {
sentencias1;
}
else {
sentencias2;
}
#include <iostream.h>
int main() {
int a;
cout << Da un numero: ;
cin >>a ;
if ((a>=0) && (a %2==0))
cout << a << Es par positivo \n;
else if (a>=0 && (a%2==1))
cout << a << Es impar positivo \n;
else if (a<0 && (a%2==0))
cout <<a<< Es Negativo Par \n;
else
cout <<a<< Es Negativo impar \n;
return 0;
}
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 22
Estructuras de Decisin
switch
se utiliza para verificar una
de varias opciones.
switch (expresion)
{
case constante1: sentencia;
case constante2: sentencia;
case constante3: sentencia;
...
default : sentencia
}
Para terminar un case case case case se
utiliza break break break break; ;; ;
char ch;
cin >> ch;
switch (ch)
{
case 0: case 1: case 2:
case 3: case 4: case 5:
case 6: case 7: case 8:
case 9: cout << \n Es un digito \n;
break;
case : case\n:
case \t: cout << \n Es un separador \n);
break;
default: cout << \n Otro \n;
break;
}
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 23
Estructuras de Repeticin
for
Repite un conjunto de
sentencias un nmero de
veces determinado.
for(inicializacin;termino;incre
mento)
{
sentencia1;
sentencia2;
...
sentencian;
} }} }
#include <iostream.h>
int main() {
int n;
cout << Da el limite de la sumatoria: ;
cin >>n ;
suma=0;
for(i=1; i<=n; i++)
{
suma=suma+i;
}
cout << La sumatoria es : << suma;
return 0;
}
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 24
Estructuras de Repeticin
while
Repite un conjunto de
sentencias 0 o ms veces. Si
la condicion se cumple.
while (condicion)
{
sentencia1;
sentencia2;
...
sentencian;
}
#include <iostream.h>
int main()
{
short x=1;
while (x <= 50)
{
if (x &2==1) cout << << x;
x++;
}
return 0;
}
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 25
Estructuras de Repeticin
do - while
Repite un conjunto de
sentencias 1 o ms veces.
Mientras la condicion es
verdadera.
do {
sentencia1;
sentencia2;
...
sentencian;
} while (condicion);
#include <iostream.h>
#include <math.h>
int main() {
double n,aprox, antaprox, epsilon;
cout << Da n, aproximacin, error \n;
cin >> n >> aprox >>epsilon;
do{
antaprox = aprox;
aprox = (n / antaprox + antaprox) / 2;
} while( fabs (aprox antaprox)>=epsilon);
cout << La raiz cuadrada es : << aprox ;
return 0;
}
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 26
Arreglos Unidimensionales
Un arreglo es una estructura
homognea, compuesta por
varias componentes, todas del
mismo tipo y almacenadas
consecutivamente en memoria.
Cada componente puede ser
accedido directamente por el
nombre de la variable del
arreglo seguido de un
subndice encerrado entre
corchetes [ ].
#include <iostream.h>
int main() {
int n, a[100], b[100], c[100], i;
cout << Numero de elementos a sumar: ;
cin >> n;
for (i=0; i<n; i++) cin >> a[i];
for (i=0; i<n; i++) cin >> b[i];
for (i=0; i<n; i++) c[i] = a[i] + b[i];
cout << La suma de los vectores es \n
for (i=0; i<n; i++)
cout << c[i]<< ;
return 0;
}
78 12 8 -20 14 100
0 1 2 3 4 5
X
Posicin
Contenido del arreglo X en la posicin 3
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 27
Arreglos Bidimensionales
A los arreglos bidimensionales
generalmente se les llaman tablas o
matrices. Para acceder a los
elementos de una matriz se utilizan
dos ndices, uno para indicar el
rengln y el segundo para indicar
la columna.
int n,m,r,c, ma[10][10];
cout << Da # renglones y columnas: ;
cin >> n >> m;
cout << Lectura de la matriz \n;
for (r=0 ; r<n;r++)
for(c=0; c<m;c++)
cin >> ma[r][c];
cout << Escritura de la Matriz \n;
for (r=0 ; r<n;r++)
{
for(c=0; c<m;c++)
cout <<mc[r][c] << ;
cout << \n;
}

int m[3][4];








3 45 -1 -1
5 45 -8 4
-4 0 4 -7
1 2 3 0
0
1
2
Es el elemento m[1][2]=-8
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 28
Funciones
Las funciones son bloques con los
que se construyen programas C, y
en ellos se lleva a cabo toda
actividad del programa. Una vez
que una funcin ha sido escrita y
depurada, puede utilizarse una y
otra vez.
La definicin de una funcin consiste en
un encabezado y un cuerpo. De manera
explicita, se puede decir que es un bloque
o una proposicin compuesta. La
estructura bsica de la definicin de una
funcin es:
tipo nombre([,argumentos])
{
[declaraciones]
proposiciones
[return (expresin);]
}
main()
{
func1();
.....
func1()
}
func1()
{
func2();
.....
return;
}
func2()
{
.....
return;
}
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 29
Funciones
Ejemplo:
definicin de una funcin
int suma (int a, int b)
{
int valor;
valor = a+b;
return valor;
}
Llamado de la funcin
#include <iostream.h>
int main(void)
{
int res, n1=23, n2=55;
res = suma (5,10);
cout <<La suma es : << res;
res = suma(n1,n2);
cout <<La suma es: << res <<\n;
}
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 30
Definicin de una Clase
class nombre_de_la_Clase
{
funciones y datos privados
public:
mtodos (funciones) y
datos pblicos
} lista_de_objetos;
La lista_de_objetos, puede no aparecer si lo
nico que se desea es declarar una determinada
Clase.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 31
Control de acceso
Cada nivel de privilegio de acceso est asociado con
una palabra clave:
private
public
protected
Cada declaracin contenida en el cuerpo de una
clase define de manera implcita un privilegio de
acceso apareciendo en una seccin precedida de
una de estas tres palabras clave. Si no se utiliza
ninguna de esas palabras, todo es private por
omisin.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 32
Operador this
Nunca se puede llamar a una funcin
miembro de una clase a menos que se
asocie con un objeto (una instancia de la
clase).
El mtodo utilizado por C++ es aadir un
argumento extra oculto a las funciones
miembro. Este argumento es un puntero al
objeto de la clase que lo enlaza con la
funcin asociada y recibe un nombre especial
denominado this.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 33
Funciones Miembros
Los mtodos de la clase tambin se
denominan funciones miembro si son la
nica forma de accesar a los datos
privados de la clase.
(::) Operador de resolucin de alcance quien
le indica al compilador que la versin de la
funcin cuyo identificador precede al
mencionado operador, es la de la Clase en
s: nombre_de_la_clase::nomb_funcion
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 34
Funciones Amigas
Una clase puede ofrecer su amistad a una
funcin externa, y con ello permitirle el acceso a
su parte privada.
Una Clase puede declarar a una funcin como su
amiga, haciendo uso de la palabra clave friend, y
anexando su prototipo.
Es importante notar que una funcin externa, no
puede declararse a si misma, amiga de una
Clase; debe por lo tanto, esperar a que alguna o
algunas Clases lo hagan su amiga.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 35
Funciones en Lnea
Una funcin en lnea (inline), es una funcin que
es expandida en lnea cuando es llamada, en lugar
de realizar el proceso de construir un llamado a la
funcin.
La razn para usar funciones en lnea es la
eficiencia.
Existen dos formas de declarar una funcin en
lnea: La forma explicita y la forma implcita.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 36
Ejemplo: funciones inline
/* Cdigo en lnea para la
funcin inicia de la clase
vector, forma explicita */
Inline void Vector::inicia (void)
{
e=0;
}
#include <iostream.h>
class Vector
{
int c[10];
int e;
public:
// definimos la funcin inicia en lnea
// en forma implcita
void inicia(void) {e=0;}
void pon_dato(int i);
void suma(Vector x, Vector y);
void Visualizar(void);
};
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 37
Constructores y Destructores
C++ permite a los Objetos inicializarse por s
mismos en el momento de su creacin. Esta
inicializacin automtica se lleva a cabo a travs
del uso de las funciones Constructores.
Un Constructor, es una funcin especial que es
miembro de la Clase y que lleva el mismo nombre
que ella.
Un Constructor no debe regresar ningn tipo.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 38
Constructores y Destructores
La funcin que completa al Constructor de un Objeto,
es un Destructor.
El Destructor es una funcin miembro de una Clase
que se llama implcitamente al momento de hacer
desaparecer un objeto.
El Destructor se denomina igual que la Clase, solo
que su nombre va precedido del signo de negacin
lgica (~).
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 39
Ejemplo: Constructor y Destructor
#include <iostream.h>
// Clase pila_car para modelar una Pila de caracteres
class pila_car
{
int size;
char *tope, *s;
public:
pila_car(int sz) {tope = s = new char[size = sz];}
~pila_car() {delete s;}
void push(char c) { *tope++ = c;}
char pop() { return *--tope;}
};
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 40
Herencia
Es el proceso por medio del cual, un
Objeto puede adquirir las propiedades de
otro objeto.
La importancia de la herencia se basa en
que constituye un mecanismo que soporta
la clasificacin.
La herencia puede ser simple o multiple
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 41
Ejemplo de Herencia
class A { // Clase abuela A
protected:
int value_a; // Variable protegida
};
class B: public A { // Clase que hereda de la clase abuela A
public:
void FB();
};
class C: public B { // Clase que hereda de clase derivada B
public:
void FC();
};
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 42
Polimorfismo (Sobrecarga de Constructores)
En C++, dos o ms funciones pueden
tener el mismo nombre, variando
solamente en los parmetros de su
declaracin.
Tambin los constructores pueden ser
sobrecargados, simplemente debemos
declarar las diferentes formas que deber
tomar, y definir su accin relativa a cada
una de ellas.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 43
Sobrecarga de funciones
Un mecanismo de Polimorfismo en un
lenguaje de programacin, lo constituye la
sobrecarga de funciones. En C++, dos o ms
funciones pueden tener el mismo nombre,
difiriendo solamente en los parmetros de su
declaracin.
Las funciones que comparten nombre, pero
que declaran parmetros diferentes, se dicen
que estn Sobrecargadas.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 44
Sobrecarga de Constructores
Siendo los constructores por naturaleza
funciones, independientemente del servicio
nico que presentan a los Objetos, tambin
pueden ser sobrecargados.
Para sobrecargar el constructor de una
Clase, simplemente debemos declarar las
diferentes formas que debern tomar, y
definir su accin relativa a cada una de ellas.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 45
Sobrecarga de Operadores
La Sobrecarga de Operadores, es otro modo de
implementar sobrecarga (Polimorfismo), aunque por
la sintaxis de los operadores, se deben hacer
algunas consideraciones adicionales.
Para sobrecargar un operador, debemos definir su
significado, relativo a la Clase sobre la cual se aplica.
La sobrecarga de operadores redefinen la semntica
de un operador relativo a una Clase, en la que se
encuentra definido.
MC Beatriz Beltrn Martnez FCC-BUAP Primavera 2006 46
La forma general de una funcin operador es:
tipo nombre_de_la_Clase :: operator# (lista de argumentos)
{
// operacin definida relativa a la Clase
}
Las funciones operadores, debern ser funciones
miembros o funciones amigas de la Clase en la que
sern usadas.
Sobrecarga de Operadores

Você também pode gostar