POO en C Programacin Orientada a Objetos Declaracin
POO en C++ Programación Orientada a Objetos
Declaración de clases con struct Las clases en C++ pueden definirse utilizando la construcción struct Ejemplo: enum Boolean {false, true}; //false = 0, true = 1 struct Point{ int X; int Y; Boolean Visible; } Por omisión todos los miembros datos son públicos. Objetos de la clase Point Origen; Point Row[80]; Point *point_ptr; point_ptr = &Origen; point_ptr = Row;
Definición de métodos Los métodos pueden definirse dentro o fuera de la clase Ejemplo dentro de la clase struct Point{ int X; int Y; Boolean Visible; int Get. X(){return X; } //función en línea (in line) } Ejemplo fuera de la clase struct Point{ int X; int Y; Boolean Visible; int Get. X(); } Point: : Get. X(){return X; }
Invocación de métodos (mensajes) Para invocar a los métodos es necesario crear un objeto de la clase (instanciar) y enviarle mensajes. El formato es nombre-objeto. función-miembro(argumentos) Ejemplo Point Este. Punto; Este. Punto. X = 17; Este. Punto. Y = 42; Este. Punto. Visible = true; xx = Este. Punto. Get. X();
Constructores Es conveniente iniciar los objetos con valores de los miembros dato bien definidos. Un constructor tiene por objeto iniciar los valores de los miembros datos adecuadamente. Los constructores en C++ son métodos que tienen el mismo nombre que la clase a que pertenecen. struct Point{ int X; int Y; Boolean Visible; int Get. X(){return X; } Point(int New. X, int New. Y); //constructor } Point: : Point(int New. X, int New. Y){ X = New. X; Y = New. Y; }
Valores por defecto En C pueden declararse métodos con parámetros con valores por defecto. De esta manera no es necesario especificar todos los argumentos al invocar un método. struct Point{ int X; int Y; Boolean Visible; int Get. X(){return X; } Point(int New. X, int New. Y); //constructor } Point: : Point(int New. X = 0, int New. Y = 0){ X = New. X; Y = New. Y; } Point Origen(1, 1); //X = 1, Y = 1 Point Este. Punto(3); //X = 3, Y = 0 Point Aquel. Punto(); //X = 0, Y = 0
Control de acceso a miembros C++ provee tres modificadores de acceso a miembros, como se resume en la siguiente tabla: private Los miembros pueden ser accedidos solo dentro de la misma clase protected Los miembros pueden ser accedidos solo dentro de la misma clase y por funciones miembro de clases derivadas de esta clase public Los miembros pueden ser accedidos sin restricciones
Ejemplo de control de acceso struct Point{ private: int X; int Y; Boolean Visible; public: int Get. X(){return X; } Point(int New. X, int New. Y); //constructor } Point Este. Punto(); Este. Punto. X = 5; //ERROR xx = Este. Punto. Get. X(); //ACEPTABLE
Declaración mediante class Las clases en C++ pueden definirse utilizando la construcción class Ejemplo: enum Boolean {false, true}; //false = 0, true = 1 class Point{ int X; int Y; Boolean Visible; public: int Get. X(); Point(int New. X, int New. Y); } Por omisión todos los miembros datos son privados.
La clase Point #include <iostream. h> // necesaria para I/O #include <conio. h> class Point { int X; // define clase Point // X y Y son privados por omisión int Y; public: Point(int Init. X, int Init. Y) {X = Init. X; Y = Init. Y; } int Get. X() {return X; } // funciones miembro públicas int Get. Y() {return Y; } }; int main() { int Your. X, Your. Y; cout << "Set X coordinate: "; // solicitud cin >> Your. X; // entrada de Your. X cout << "Set Y coordinate: "; // otra solicitud cin >> Your. Y; // entrada de Your. Y // llamada al constructor Point Your. Point(Your. X, Your. Y); // llamada a función miembro cout << "X is " << Your. Point. Get. X(); cout << 'n'; // salto de línea // llamada a función miembro cout << "Y is " << Your. Point. Get. Y(); cout << 'n'; getch(); //espera carácter return 0; }
Herencia Redefinición de la clase Point (archivo Point. h de encabezado) class Location { protected: // permite a clases derivadas acceder datos privados int X; int Y; public: //estas funciones pueden accederse desde fuera Location(int Init. X, int Init. Y); int Get. X(); int Get. Y(); }; class Point : public Location{//derivada de Location // derivación pública indica que X y Y son protegidos // dentro de Point protected: Boolean Visible; // las clases derivadas de Point // necesitarán acceso public: Point(int Init. X, int Init. Y); // constructor void Show(); void Hide(); Boolean Is. Visible(); void Move. To(int New. X, int New. Y); };
Acceso en clases Acceso en clase base Modificador de acceso Acceso heredado en base public private public no accesible protected public private no accesible protected private
Archivo de implementación de las clases Location y Point (archivo Point 2. cpp) #include "point. h" #include <graphics. h> // funciones miembro de la clase // Location: : Location(int Init. X, int Init. Y) { X = Init. X; Y = Init. Y; }; int Location: : Get. X(void) { return X; }; int Location: : Get. Y(void) { return Y; }; // funciones miembro de la clase Point: Estas suponen // que el programa principal inicia las gráficas Point: : Point(int Init. X, int Init. Y) : Location(Init. X, Init. Y) { Visible = false; // la hace invisible por default }; invoca constructor de void Point: : Show(void) { Location Visible = true; putpixel(X, Y, getcolor()); // usa el color default }; void Point: : Hide(void) { Visible = false; // uses color de fondo para borrar putpixel(X, Y, getbkcolor()); }; Boolean Point: : Is. Visible(void) { return Visible; }; void Point: : Move. To(int New. X, int New. Y) { Hide(); // hace el punto invisible X = New. X; // cambia X y Y a una nueva posición Y = New. Y; Show(); // muestra el punto en la nueva posición };
Programa de ejemplo #include <graphics. h> // Biblioteca gráfica #include <conio. h> // para getch() #include "point. h" // declaraciones de Point y Location int main() { // inicia el sistema gráfico int graphdriver = DETECT, graphmode; initgraph(&graphdriver, &graphmode, ". . \bgi"); // Mueve un punto a través de la pantalla Point APoint(100, 50); // Inicia X, Y a 100, 50 APoint. Show(); // APoint semuestra getch(); // espera una tecla APoint. Move. To(300, 150); // APoint se mueve a 300, 150 getch(); // espera una tecla APoint. Hide(); // APoint se oculta getch(); // espera una tecla closegraph(); // Restaura pantalla original return 0; }
- Slides: 14