Sei sulla pagina 1di 43

Universidad Nacional de Ingeniera

Programa de Iniciacin Tecnolgica (PIT)


CTIC
Curso: Lenguaje C++

Prof.: Lic. Csar Martn Cruz Salazar


Programacin de Procedimiento
En los programas que Ud. ha escrito hasta ahora, las nociones
de variables/tipos de datos
y de tratamiento de estos datos
estaban separados.

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 1


Ejemplo de Programacin de
Procedimiento
#include <iostream>
using namespace std;
double area(double ancho, double alto);
int main()
{
double ancho(3.0);
double alto(4.0);
cout << " El area del rectangulo es : "<< area(ancho, alto) << endl;
return 0;
}
double area(double ancho, double alto)
{
return ancho * alto;
} Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 2
Importancia de la programacin
orientado a objetos

Robustes
Cambios
Error de manipulacin
Modularidad
Lisibilidad
Mantenabilidad

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 3


Objetos: Cuatro conceptos de base
Uno de los objetivos principales de la nocin de objeto :
Organizar programas complejos gracias a las nociones.

De encapsulacin
De abstraccin
De herencia
y de polimorfismo

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 4


Nociones de encapsulacin
Principio de encapsulacin :
Agrupar en el mismo objeto informtico (concepto), los datos y
los mtodos que le son especificados :
Atributos : los datos incluidos en un objeto

Mtodos : las funciones definidos en un objeto

Los objetos son definidos por sus atributos y sus mtodos.

Por ejemplo, en un rectngulo se agrupa el ancho, el


largo(atributos) y el rea(mtodo).

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 5


Nociones de Abstraccin
Para ser verdaderamente interesante, un objeto debe permitir un
cierto grado de abstraccin.
El proceso de abstraccin consiste en identificar para un conjunto
de elementos:
Caractersticas comunes a todos los elementos
Mecanismos comunes a todos los elementos

Descripcin genrica del conjunto considerado :


Focalizarse sobre lo esencial y ocultar los detalles.
Nocin de abstraccin :
Ejemplo : Rectngulos

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 6


Nociones de Abstraccin
La nocin del objeto rectngulo no sera interesante si no le
podramos asociar propiedades y/o mecanismos generales (que
valgan para el conjunto de los rectngulos)
Las nociones de ancho y largo son propiedades generales de los
rectngulos (atributos),
El mecanismo que permite calcular el rea de un rectngulo (area
= ancho x largo) es comn a todos los rectngulos (mtodos).

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 7


Abstraccin y Encapsulacin
Adems de la unificacin de los datos y procesos relacionados con
una entidad, la encapsulacin hace que sea posible definir dos
niveles de percepcin de los objetos :
Nivel externo : parte visible (por los programadores-
usuarios):
La interfaz: prototipos de algunos mtodos bien escogidos
resultado de proceso de abstraccin.
Nivel interno : detalles de implementacin
cuerpos :
Mtodos y atributos accesibles nicamente desde el interior del
objeto (o de objetos similares).
Definicin de todos los mtodos del objeto.

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 8


Clases y Instancias. Tipos y
Variables
En la programacin orientado a Objetos :
El resultado de los procesos de encapsulacin y de abstraccin
se llama una clase
clase = categora de objetos
Una clase define un tipo
Una realizacin particular de una clase se llama una instancia.
instancia = objeto
Un objeto es una variable

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 9


Clases y Instancias. Tipos y
Variables

clase
tipo (abstraccin)
existencia conceptual
(escritura del programa)

objetos/instancias
variables en memoria
existencia concreta
(ejecucin del programa)

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 10


Las clases en C++
En C++ una clase se declara por la palabra class.
Ejemplo: class Rectangle { ... };
Este define un nuevo tipo del lenguaje.
La declaracin de una instancia de una clase se hace de manera
similar a la declaracin de una variable:
nombre_clase nombre_instancia;
Ejemplo:
Rectangle rect1;
declara una instancia rect1 de la clase Rectangle.

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 11


Un programa en C++

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 12


La Declaracin de atributos
La sintaxis de la declaracin de los atributos es la misma que de los
campos de una estructura:
tipo nombre_atributo;

Ejemplo:
Los atributos ancho y largo, de tipo double, de la clase Rectangle
podran ser declarados por:
class Rectangle{
double ancho;
double largo;
};

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 13


El acceso a los atributos
El acceso a los valores de los atributos de una instancia de nombre
nombre_instancia se hace como al acceder a los campos de una
estructura:
nombre_instancia.nombre_atributo

Ejemplo :
El valor del atributo largo de una instancia rect1 de la clase Rectangle
ser referenciado por la expresin:
rect1.largo

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 14


Nuestro programa en C++
#include <iostream>
using namespace std;
class Rectangle {
public:
double ancho;
double largo;
};
int main()
{
Rectangle rect1; //instanciacin
rect1.ancho = 3.0;
rect1.largo = 4.0;
cout << ancho : << rect1.ancho << endl;
return 0;
} Lic. Martn Cruz Salazar Lenguaje C++ - CTIC.UNI 15
Declaracin de los mtodos
La sintaxis de la definicin de los mtodos de una clase es la
sintaxis normal de definicin de funciones :
tipo_retorno nombre_metodo (tipo_param1, tipo _param2, ...)
{
// cuerpo del mtodo
...
}

Este mtodo se puede colocar directamente dentro de la clase.


Ejemplo : el mtodo area() de la clase Rectangle :

class Rectangle {
//...
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC.UNI 16
Declaracin de los mtodos
double area()
{
return largo * ancho;
}
};

Pero por donde se pasan los parmetros?.

double area(double largo, double ancho)


{
return largo * ancho;
}

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 17


mbito de los atributos
Los atributos de una clase se constituyen en variables
directamente accesibles a todos los mtodos de la clase.
(i.e. son variables globales de la clase ).
Hablamos de mbito de la clase .
No es por tanto, necesario de pasarlos como argumentos
en los mtodos.

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC.UNI 18


Declaracin de los mtodos
Los mtodos son por tanto :
- Funciones especficas de la clase
- Quienes tienen por tanto acceso a los atributos de la clase.
Por tanto no se necesita pasar los atributos como argumentos
en los mtodos de la clase!
Ejemplo :

class Rectangle {
//...
double area()
{
return largo * ancho;
}
}; Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 19
Parmetros de los mtodos
Pero no es porque no tenemos necesidad de pasar los atributos
de la clase como argumentos en los mtodos de esta clase, que
los mtodos nunca tienen parmetros.
Los mtodos pueden tener parmetros : aquellos que son
necesarios (y por tanto exteriores a la instancia) para ejecutar el
mtodo en cuestin !
Ejemplo : class FigureColoree {
// ...
void colorie(Color c) { /* ... */ }
// ...
};
FigureColoree una_figura;
Color rojo;
// ...
una_figura.colorie(rojo);
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 20
Definicin externa de los mtodos
Es posible de escribir las definiciones de los mtodos al exterior de la
declaracin de la clase
Legibilidad del cdigo, modularizacin.
Para conectar la definicin de un mtodo a la clase para la que se
define, slo tiene que utilizar el operador :: de resolucin de
mbito.
La declaracin de la clase contiene los prototipos de los mtodos.
Definiciones correspondientes especificados fuera de la
declaracin de la clase son de la forma:

tipoRetorno NombreClase::nombreFuncion(tipo1 param1, tipo2 param2,


...)
{ ... }
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 21
Definicin externa de los mtodos
Ejemplo
class Rectangle {
// ...
double area(); // prototipo
};
// definicin
double Rectangle::area()
{
return largo * ancho;
}

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 22


Acciones y Predicados
En C++, podemos distinguir los mtodos que modifican el
estado del objeto ( acciones ) de aquellos que no cambian
en nada al objeto ( predicados ).
Podemos por eso aadir la palabra const despus de la lista de
parmetros del mtodo :
tipo_retorno nombre_metodo (tipo_param1, nom_param1, ...) const
Ejemplo :
class Rectangle {
// ...
double area() const;
};
double Rectangle::area() const
{
return largo* ancho;
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 23
}
Llamadas a los mtodos
La llamada a los mtodos definidos por una instancia de nombre
nombre_instancia se hace a la ayuda de expresiones de la forma :
nombre_instancia.nombre_metodo(val_arg1, ...)
Ejemplo : el mtodo
double area() const;
definido por la clase Rectangle puede ser llamado por una instancia
rect1 de esta clase por :
rect1.area()
Otros ejemplos :
une_figure.colorie(rojo);
i < tableau.size()

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 24


Ejemplo de programa
#include <iostream>
using namespace std;
class Rectangle {
public:
double ancho;
double largo;
double area()
{
return ancho*largo;
}
};
int main()
{
Rectangle rect1;
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 25
Ejemplo de programa
rect1.ancho = 3.0;
rect1.largo = 4.0;
cout << "ancho : " << rect1.ancho << endl;
cout << "largo : " << rect1.largo << endl;
cout << "area : " << rect1.area() << endl;
return 0;
}

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 26


Encapsulacin y la Interfaz
Todo lo que no es necesario que se conozca al exterior de un objeto
debe estar en el cuerpo del objeto e identificado por la palabra clave
private:

class Rectangle {
double area() const;
private:
double largo;
double ancho;
};
Atributo de instancia privada = inaccesible desde fuera de la clase.
Esto tambin se aplica a los mtodos.
Nota: Si no se especifica el acceso, es privada de forma
predeterminada.

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 27


Encapsulacin y la Interfaz
Por el contrario, la interfaz, que es accesible desde el exterior, se
declara con la palabra clave public.
class Rectangle {
public:
double area() const;
private:
// ...
};
En la mayor parte de los casos se suele considerar como :
Privado :
Todos los atributos
La mayor parte de los mtodos
Publico :
Unos mtodos bien elegidos (interfaz)
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 28
Descriptores de acceso y
manipuladores
Todos los atributos son privadas?
Y si necesitamos utilizarlos desde fuera de la clase!
Por ejemplo, la forma de "manipular el ancho y el largo de
un rectngulo?

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 29


Descriptores de acceso y
manipuladores
Si el programador considera til, debe incluir mtodos pblicos
necesarios ...
1. Descriptores de acceso ( mtodos get o getters ) :
Consulta (i.e. predicado )
Retornar el valor de una variable de instancia especfica.
double getLargo() const { return largo; }
double getAncho() const { return ancho; }
2. Manipuladores ( mtodos set o setters ) :
Modificacin (i.e. accin )
Asignar el valor de una variable de instancia especfica.
void setLargo(double l) { largo = l; }
void setAncho(double a) { ancho = a; }
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 30
Cambio en el Programa Anterior
#include <iostream>
using namespace std;
|
class Rectangle | { ancho = a; }
{ | private:
| double largo;
public:
| double ancho;
double area() const |
};
{ return largo * ancho; } |
|
int main()
double getLargo() const {
|
{ return largo; } | Rectangle rect1;
double getAncho() const | rect1.setLargo(3.0);
{ return ancho; }
| rect1.setAncho(4.0);
| cout << "Largo : "
void setLargo(double l) | << rect1.getLargo()
{ largo = l; } | << endl;
|
void setAncho(double a) cout << "Ancho : "
|
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 31
Cambio en el Programa Anterior
<< rect1.getAncho()
<< endl;
cout << "Area del Rectangulo : "
<< rect1.area()
<< endl;
return 0;
}
Resultado:
Largo : 3
Ancho : 4
Area del Rectangulo : 12
Presione una tecla para continuar . . .

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 32


Ejercicios en C++ con clases
Ejercicio 1:
Hacer el mismo programa anterior pero considerando definiciones
externas de los mtodos. | //Declaraciones de atributos
| private:
#include <iostream>
| double largo;
using namespace std; | double ancho;
class Rectangle | };
| double Rectangle::area() const
{
| {
public: | return largo * ancho;
double area() const; | }
| double Rectangle::getLargo() const
//Accesadores
| {
double getLargo() const; | return largo;
double getAncho() const; | }
| double Rectangle::getAncho() const
//Manipuladores
| {
void setLargo(double); | return ancho;
void setAncho(double); | }
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 33
Ejercicios en C++ con clases
void Rectangle::setLargo(double l) | cout << "Largo : "
{ | << rect1.getLargo()
| << endl;
largo = l;
|
} cout << "Ancho : "
|
| << rect1.getAncho()
void Rectangle::setAncho(double a)
| << endl;
{ cout << "Area del
|
ancho = a; | Rectangulo : "
} | << rect1.area()
| << endl;
| return 0;
int main() | }
{ |
|
Rectangle rect1;
|
rect1.setLargo(3.0); |
rect1.setAncho(4.0);

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 34


Ejercicios en C++ con clases
Ejercicio 2:
Hacer un programa que usando 2 mtodos: sumaDos() y sumaTres(),
muestre en pantalla el resultado de la suma de 2 unidades y de tres
unidades a un entero ingresado desde el teclado.
#include <iostream>
using namespace std;
class adiciona_unidades
{
public:
int sumaDOS(int arg);
int sumaTRES(int arg);
private:
int resultado;
};
int adiciona_unidades::sumaDOS(int arg)
{ Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 35
Ejercicios en C++ con clases
resultado=arg + 2;
return resultado;
}
int adiciona_unidades::sumaTRES(int arg)
{
resultado=arg + 3;
return resultado;
}
int main()
{
adiciona_unidades suma;
int i;
cout<<"Ingrese entero a sumar: ";
cin>>i;

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 36


Ejercicios en C++ con clases
cout<<"+2 = "<<suma.sumaDOS(i)<<endl;
cout<<"+3 = "<<suma.sumaTRES(i)<<endl;
cin.get();
return 0;
}
Resultado:
Ingrese entero a sumar: 50
+2 = 52
+3 = 53
Presione una tecla para continuar . . .

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 37


Ejercicios en C++ con clases
Ejercicio 3:
Realice un programa que calcule la suma de nmeros complejos.
#include <iostream>
using namespace std;
class complex
{
public :
int real, img;
};

int main()
{
complex a, b, c;
cout << "Ingrese a y b donde a + ib es el primer numero complejo.";

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 38


Ejercicios en C++ con clases
cout << "\na = ";
cin >> a.real;
cout << "b = ";
cin >> a.img;
cout << "Ingrese c y d donde c + id es el segundo numero complejo.";
cout << "\nc = ";
cin >> b.real;
cout << "d = ";
cin >> b.img;
c.real = a.real + b.real;
c.img = a.img + b.img;
cout << "Suma de dos numeros complejos = " << c.real << " + " << c.img <<
"i"<<endl;
return 0;
}
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 39
Ejercicios en C++ con clases
Resultado:
Ingrese a y b donde a + ib es el primer numero complejo.
a=6
b=9
Ingrese c y d donde c + id es el segundo numero complejo
c = 10
d = 20
Suma de dos numeros complejos = 16 + 29i
Presione una tecla para continuar . . .

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 40


Ejercicios en C++ con clases
Serie de Fibonacci.
Usar algoritmo:
long fibo(int n)
{
si(n <= 2) retornar 1;
a = 1, b = 1, c, i;
para( i = 3; i <= n ; i++ )
{
c = a + b;
a = b; b = c;
}
retornar c;
}
Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 41
Ejercicios en C++ con clases
Ejercicio 4:
Realice un programa que calcule la serie de Fibonacci ingresando
el rango desde el teclado. Se sale del programa cuando ingresa
cero o un nmero menor a cero.

Lic. Martn Cruz Salazar Lenguaje C++ - CTIC 42

Potrebbero piacerti anche