Вы находитесь на странице: 1из 17

UNIVERSIDAD NACIONAL DE INGENIERA

FACULTAD DE INGENIERA MECNICA

CURSO MB545

CLASE 01

2008
PROGRAMACIN ORIENTADA A OBJETOS
1

1 La programacin orientada a objetos existe desde la creacin de los primeros


lenguajes de programacin. Los conceptos que se manejan de abstraccin de datos, herencia y Polimorfismo se manejaban en estos lenguajes, pero con el desarrollo del lenguaje C y la programacin visual se utiliza este tipo de programacin con mayor profusin. Programacin estructurada, la programacin estructurada se basa en la creacin de una funcin principal y una serie de rutinas (funciones) llamadas desde la funcin principal, que hacen que el desarrollo sea horizontal contrastando con la programacin lineal cuyo desarrollo es vertical. Tambin podemos indicar que la informtica en su parte de programacin era: Programa = Algoritmo + Estructura de datos. La ventaja de este modelo era importante pero todava se segua manejando por separado el estado del sistema que descansa en la estructura de datos y los procedimientos que actan sobre el sistema, tampoco hay una consistencia de datos, esto queda librado al criterio del programador, estas desventajas y otras ms se van a superar con la programacin orientada a objetos. 1.1Programacin orientada a objetos.- La programacin orientada a objetos es la ultima modificacin, donde ya se incorporan algunos aspectos tomando como modelo la vida real. Tipos de Datos Abstractos Algunos autores describen la programacin orientada a objetos como programacin de tipos de datos abstractos y sus relaciones. Vamos a tratar de estudiar este aspecto de modelo de la vida real con mas detalles en el concepto de Tipos de Datos Abstractos Creando modelos.- La informtica y la automatizacin en general trata de resolver o facilitar la vida real creando programas y aplicaciones para esto. Sin embargo, los problemas de la vida real no estn claramente definidos por qu primeramente hay que crear un modelo de las entidades que actan en la vida real, entonces lo primero que se tiene que hacer es tratar de obtener tu propia perspectiva abstracta, o modelo, del problema. Este proceso de modelado se llama abstraccin y se ilustra en la Figura 1.1.

PROBLEMA ABSTRACCION

MODELO Figura 1.1 El modelo define una perspectiva abstracta del problema. Esto implica que el modelo se enfoca solamente en aspectos relacionados con el problema y que t tratas de definir propiedades del problema. Estas propiedades incluyen

Los datos que son afectados Las operaciones que son identificadas por el problema.

Vamos a plantear un caso, deseamos manejar los alumnos de un instituto. Que informacin es necesaria, que funciones necesitamos que trabajen: Algunas propiedades serian

DNI, Nombre Fecha de nacimiento, Talla Domicilio, Color de ojos Color de pelo, Telfono

Nosotros nos abstraeremos y tomaremos solo las propiedades necesarias para resolver el problema. Este modelo solo implica propiedades que son necesarias para cumplir con los requerimientos de la aplicacin, por ejemplo el nombre, fecha de nacimiento y el DNI. A estas propiedades se les llama los datos del modelo (de alumno). Ahora ya se tienen descritas a los alumnos reales por medio de un alumno abstracto. Definiremos algunas operaciones para manejar los alumnos: Matricula de un alumno nuevo. Evaluacin del alumno en un curso. 3

Para resumir, la abstraccin es la estructuracin de un problema en entidades bien definidas por medio de la definicin de sus datos y operaciones. Consecuentemente, estas entidades combinan datos y operaciones. No estn desacoplados unos de otras. Propiedades de los Tipos de Datos Abstractos El ejemplo de la seccin anterior muestra que por medio de la abstraccin t creas una entidad bien definida que puede ser adecuadamente manejada. Estas entidades definen la estructura de datos de un conjunto de elementos. Por ejemplo para cada alumno del Instituto un nombre, fecha de nacimiento y DNI. La estructura de los datos puede ser accedida solamente por medio de operaciones definidas. Este conjunto de operaciones se llama interfase y es exportada por la entidad. Una entidad con las propiedades recin descritas se conoce como un tipo de datos abstracto (TDA).
TIPO DE DATOS ABSTRACTO ESTRUCTURA DE DATOS OPERACIONES CON EL TDA

Figura 1.2

Un tipo de datos abstracto (TDA)

La Figura 1.2 muestra un TDA que consiste en una estructura de datos abstracta y operaciones. Solamente las operaciones son visibles desde afuera y definen la interfase. Definicin (Tipo de Datos Abstracto) Un tipo de datos abstracto (TDA) se caracteriza por que tiene dos elementos diferenciados: La interfaz de utilizacin. La representacin

La representacin debe permanecer oculta y solo utilizaremos sus operaciones para trabajar con los elementos. Para construir un tipo abstracto debemos: 1. Exponer una definicin de tipo. 2. Definir las operaciones (funciones) que permitan operar con instancias de ese tipo. 3. Ocultar la representacin de los elementos del tipo de modo que solo se pueda actuar sobre ellos con las operaciones proporcionadas. 4

4. Poder hacer instancias mltiples del tipo. Tipos bsicos de operaciones en un TDA. Las operaciones bsicas que deberamos tener pueden ser: Constructores: Crean una nueva instancia del tipo. Transformacin: Cambian el valor de uno o ms elementos de una instancia del tipo. Observacin: Accedemos sin modificarlos. Iteradores: Procesa componentes en forma secuencial.

Tipos Genricos de Datos Abstractos Los TDAs se usan para definir un nuevo tipo a partir del cual se pueden crear instancias. Como se mostr en el ejemplo de la lista, algunas veces estas instancias deberan operar del mismo modo sobre otros tipos de datos. Por ejemplo, uno puede pensar en listas de manzanas, carros o an listas. La definicin semntica de una lista siempre es la misma. Solamente el tipo de los elementos de datos cambia de acuerdo al tipo sobre el cul deba operar la lista. Esta informacin adicional podra ser especificada por un parmetro genrico que es especificado al momento de la creacin de la instancia. As, una instancia de un TDA genrico es en la prctica una instancia de una variante particular del TDA. Una lista de manzanas puede ser por lo tanto declarada como sigue: List<Apple> listOfApples; Los corchetes angulares encierran ahora el tipo de datos para el cul una variante del TDA genrico List sera creada. listOfApples ofrece la misma interfase que cualquiera otra lista, pero opera en instancias del tipo Apple. Conceptos de Orientacin a Objetos Las secciones anteriores introducen ya algunos conceptos "de orientacin a objetos". Sin embargo, stos fueron aplicados de una manera terica, ahora pasemos ya a visualizar las caractersticas del C++ y les damos nombres tal y como se usan en los lenguajes de programacin orientada a objetos existentes. Las caractersticas de C++ como lenguaje orientado a objetos son: o Abstraccin Variables de instancia 5

Mtodos de instancia Variables de clase Mtodos de clase

o Encapsulacin De variables: privada, pblica y protegida. De mtodos: privada, pblica y protegida

o Herencia Sencilla y mltiple Unidades genricas Polimorfismo

Teniendo en cuenta los conceptos de herencia y Polimorfismo tenemos todo el panorama de la programacin orientada a objetos. La comunicacin entre objetos es por medios de mensajes que viene a ser la forma de invocar a un objeto. Hemos dicho que un objeto tiene caractersticas llamadas atributos y procedimientos llamados mtodos. Los mensajes tienen un mtodo (procedimiento) que se ejecutara cuando es invocado.

Mensaje (Se Invoca Mtodo) Objeto Emisor Objeto Receptor

Resultado De La Ejecucin Del Mtodo Figura 1.3

1.2

Clases.- Un programa utiliza un grupo de objetos y estos objetos se crean utilizando un tipo de dato denominado clase. Podemos decir que la clase es un registro (struct) evolucionado que ha encapsulado los datos y las funciones incorporndoles adems niveles de visibilidad. En la clase los datos son las propiedades de la entidad que este representa y las funciones son las tareas representativas de la entidad. De esta manera las clases representan las entidades del mundo real de una manera ms 6

precisas que los registros. Adems las clases tienen dos caractersticas que la hacen elementos muy eficientes en la programacin, estas son: Herencia Polimorfismo 1.3 Objeto.- Son las instancias de una clase, pues esta es la plantilla que nos permite crear los objetos de acuerdo a la declaracin de clase. Ejemplo: Dada la siguiente declaracin de clase: class rectangulo { private: {int largo; int ancho; public: void asignar( int l, int a) { largo = l; ancho = a; } int calcular_ rea( ) { int A; A = largo * ancho; return ( A); } }; Rectangulo r1,r2; R1.asignar(4,2); Cout<<R2.calcular_area() Representacin Grfica Clase Rectngulo Largo Ancho

Datos

asignar Calcular _area Mtodos

Figura 1.4

Posteriormente nosotros podemos declarar un objeto de la clase rectngulo de la siguiente manera: rectngulo R1; Esto significa que R1 tendr 4 componentes R1.largo R1.ancho R1.asignar(int l, int a) R1.calcular_area( ) el valor. PROGRAMA /*PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA OBJETIVO: Desarrollar un ejemplo bsico de POO */ #include<iostream.h> #include<conio.h> class rectangulo { private: int largo; int ancho; public: void asignar( int l, int a) { largo = l; ancho = a; {int A; A = largo * ancho; return ( A); } }; void main() { int L,A; rectangulo r1; clrscr(); cout<<"Ingrese largo";cin>>L; cout<<"Ingrese ancho";cin>>A; r1.asignar(L,A); cout<<"El rea es : "<<r1.calcular_area(); 8 } int calcular_area( ) dato miembro de tipo entero. dato miembro de tipo entero funcin miembro que nos permite asignar funcin miembro que calcula el rea y devuelve

valores a los dos datos miembro.

getch(); } 1.4 Herencia: Caracterstica mediante la cual podemos reutilizar una declaracin de una clase y crear otra clase. Por ejemplo: Creamos la clase estudiante, la clase estudiante_universitario hereda de la clase estudiante y adiciona. La clase estudiante_universitario_uni hereda de la anterior y tambin adiciona. Ver ejemplo 4. 1.5 Polimorfismo: Caracterstica que nos permite crear funciones que utilizando un mismo nombre respondern de forma diferente de acuerdo a la clase a la cual pertenecen. Por ejemplo: Dada la siguiente declaracin de clase: EJEMPLO 2: class rectangulo { private: int largo; int ancho; public: void asignar( int l, int a) { largo = l; ancho = a; } int rea( ) { int A; A = largo * ancho; return ( A); } }; class cuadrado { private: int largo; public: void asignar( int l ) { largo = l; } int rea( ) 9

{ int A; A = largo * largo; return ( A); } }; void main( ) { rectangulo R1; cuadrado C1; R1.asignar( 5,4); C1.asignar(4); clrscr() cout << R1.area( )<< endl; cout << C1.area( )<< endl; } El primer cout imprimir 20 y el segundo cout imprimir 16. PROGRAMA /* PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA OBJETIVO: Desarrollar un ejemplo bsico de POO */ #include<iostream.h> #include<conio.h> class rectangulo { private: int largo; int ancho; public: void asignar( int l, int a) { largo = l; ancho = a; } int area( ) { int A; A = largo * ancho; return ( A); } }; class cuadrado { private: 10

int largo; public: void asignar( int l ) { largo = l; } int area( ) { int A; A = largo * largo; return ( A); } }; void main( ) { rectangulo R1; cuadrado C1; R1.asignar( 5,4); C1.asignar(4); clrscr(); cout << R1.area( )<<endl; cout << C1.area( )<<endl; getch(); } EJEMPLO 3: Escriba un ejemplo de una clase con datos pblicos. Indicando el acceso directo a los datos miembro. PROGRAMA /*PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA OBJETIVO: Desarrollar un ejemplo bsico con datos pblicos*/ #include<iostream.h> #include<conio.h> class grupo {public: int v1; int v2; int v3; public: float promedio( ) { return(v1+v2+v3)/3.0; } int menor( ) { int m,men; if (v1<v2) m=v1; else m=v2; 11

if(m<v3) men=m; else men = v3; return(men);} int mayor( ) { int m,may; if (v1>v2) m=v1; else m=v2; if(m>v3) may=m; else may = v3; return(may);} }; void main( ) { grupo g1; clrscr(); cout<<"Ingrese valor 1==> ";cin>>g1.v1; cout<<"Ingrese valor 2==> ";cin>>g1.v2; cout<<"Ingrese valor 3==> ";cin>>g1.v3; cout <<" El promedio es = "<<g1.promedio()<<endl; cout <<" El menor es = "<<g1.menor()<<endl; cout <<" El mayor es = "<<g1.mayor(); getch(); } EJEMPLO 4: Escriba un ejemplo simple de utilizacin de herencia, defina la clase alumno y derive de esta clase, una nueva clase llamada nota, que almacenar la nota final de un alumno en un curso determinado. PROGRAMA /* PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA OBJETIVO: Programa que define la clase alumno y despus deriva de esta la clase nota*/ #include <iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> class alumno { protected: char codigo[9]; char nombre[40]; public: 12

void asignar(char c[9],char n[40]) { strcpy(codigo,c); strcpy(nombre,n);} void mostrar() { cout<<"Codigo= "<<codigo<<endl; cout<<"Nombre= "<<nombre<<endl; getch(); } }; class nota : public alumno { private: char curso [7]; float pf; public: void asignar(char c[9],char n[40], char cur[7],float prom) { strcpy(codigo,c); strcpy(nombre,n); strcpy(curso,cur); pf= prom; } void mostrar() { cout<<"Codigo= "<<codigo<<endl; cout<<"Nombre= "<<nombre<<endl; cout<<"Curso= "<<curso<<endl; cout<<"Promedio Final= "<<nombre<<endl; getch(); } }; void main( ) { alumno a1; nota n1; char code[9],name[40],curse[7]; float promedio_fin; clrscr(); //Procesando datos de clase base cout<<"Ingrese codigo del alumno: ";cin>>code; cout<<"Ingrese nombre del alumno: ";gets(name); a1.asignar(code,name); 13

a1.mostrar(); //Procesando datos de clase derivada (Herencia) cout<<"Ingrese codigo del alumno: ";cin>>code; cout<<"Ingrese nombre del alumno: ";gets(name); cout<<"Ingrese codigo del curso : ";cin>>curse; cout<<"Ingrese promedio final : ";cin>>promedio_fin; n1.asignar(code, name, curse, promedio_fin); n1.mostrar(); } Ventajas de la programacin orientada a objetos.- Son las siguientes: Facilidad de Mantenimiento: Los programas son ms fciles de Facilidad de modificacin: Se pueden modificar los objetos al Reusabilidad: Se pueden utilizar varias veces. Fiabilidad: Se utilizan modelos ya comprobados. leer y de entender. modificar rpidamente la herencia.

PROBLEMAS
1.- Escriba

un programa que nos permita leer un conjunto de notas (dos notas

por alumno) de n alumnos y muestre el promedio de cada alumno y el promedio total. PROGRAMA /* PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA OBJETIVO: Programa que trabaja con un vector de objetos*/ #include <iostream.h> #include<conio.h> class notas { private: float nota1; float nota2; public: void asignar (float n1, float n2) { nota1 = n1; nota2 = n2;} float calcula_prom ( ) { return( (nota1 + nota2) / 2.0);} 14

}; void main ( ) { int i,m; float prac1, prac2,promedio_total; notas alu[50]; clrscr( ); cout<<"Ingrese nmero de alumnos--> "; cin>>m; promedio_total=0; for(i=1; i<=m; i++) {cout<<" Alumno "<<i<<": "<<endl; cout << "ingrese 1ra. Nota => "; cin >> prac1; cout << "ingrese 2da. Nota => "; cin >> prac2; alu[i].asignar( prac1, prac2); promedio_total = promedio_total + alu[i].calcula_prom(); } // salida de resultados clrscr( ); gotoxy(25,2);cout<< " PROMEDIOS DE N ALUMNOS Y PROMEDIO GENERAL"; gotoxy(25,3);cout<< " =========================================="; for(i=1; i<=m; i++) { gotoxy(32,3+i);cout<<" Promedio ["<<i<<"]: "<<alu[i].calcula_prom();} promedio_total= promedio_total/m; gotoxy(32,3+i); cout<<" PROMEDIO GENERAL: "<<promedio_total; getch( ); }
2.- Escriba

un programa que defina la clase cuadrado y cubo adems debe calcular

el rea del cuadrado, el rea del cubo y el volumen. SOLUCIN PROGRAMA /* PROGRAMA CREADO POR RICARDO CASTAEDA DE LA ROSA OBJETIVO: Programa que define la clase cuadrado y cubo, calculando tambin el rea del cuadrado, el rea del cubo y el volumen. */ 15

#include <iostream.h> #include<conio.h> class cuadrado { private: int lado; public: void asignar( int l ) { lado = l; } int area( ) { int A; A = lado * lado; return ( A); } }; class cubo { private: int lado; public: void asignar( int l ) { lado = l; } int area( ) { int A; A = 6*lado * lado; return ( A); } int volumen( ) { int A; A = lado*lado * lado; return ( A); } }; void main( ) { cuadrado C1; cubo clrscr(); cout<< "Ingrese Lado del cuadrado: "; cin>> LADO; 16 C2; int LADO;

C1.asignar(LADO); cout<< "Ingrese Lado del Cubo: "; cin>> LADO; C2.asignar(LADO); cout<<"Resultados del Cuadrado: "<<endl; cout<<" Area = "<<C1.area()<<endl; cout<<"Resultados del Cubo: "<<endl; cout<<" Area = "<<C2.area()<<endl; cout<<" Volumen = "<<C2.volumen()<<endl; getch(); } EJERCICIOS PROPUESTOS 1) Escribir un programa que me permita crear la clase persona, considerando, dni, nombre, fecha de nacimiento, distrito donde vive y telfono. El programa debe crear la clase y declarando objetos de esta clase ingresar datos y despus mostrarlos. 2) Escribir un programa que considere la clase anterior y declare un vector de objetos de esa clase, adems debe poder consultar este vector de objetos y listar los dni y nombres que viven en un determinado distrito. 3) Se tiene la clase empleado con cdigo, sueldo, nombre y categora, escribir las declaraciones de datos miembros y crear las funciones miembro, de lectura, mostrar_datos y asignacin de sueldos, esta ultima debe realizarse de la siguiente manera: Categora A sueldo de 4500 mensual Categora B sueldo de 4000 mensual Categora C sueldo de 3000 mensual Categora D sueldo de 2000 mensual 4) Escriba un programa que trabaje con la clase anterior pero con vectores de objetos y que visualice todos los empleados por categora. 17

Вам также может понравиться