Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Programación Gráfica 8. Clases y objetos.
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Clases en C++.
Definición de Clases y Variables de referencia.
Herencia en C#.
Fundamentos de la programación orientada a objetos
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Arquitectura CLARO-TECNOTREE
El proceso de desarrollo de software
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
Informática II Prof. Dr. Gustavo Patiño MJ
Aplicación del paradigma orientado a objetos
Programación Orientada a Objetos en Java
Algoritmos y Estructuras de Datos Introducción al C++ Herencia.
HERENCIA.
Lenguaje de Programación Java Profesor: Mauricio Martínez P. Análisis y Diseño Orientado a Objetos UML: Lenguaje de Modelamiento Unificado Toma de Requerimientos.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Programación Orientada a Objetos usando C++
Modificadores.
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica Licenciatura en Ciencias.
Tema 6: Clases Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
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:
SCJP Sun Certified Programmer for Java 6
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Patrones Creacionales
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
Clases en C++ Agustín J. González ELO329.
1 Introducción a Clases Agustín J. González ELO329.
Herramientas de polimorfismo y herencia en C++
Manejo de Punteros y objetos en memoria dinámica en C++
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
1 Herencia Agustín J. González ELO Motor ElectricMotor Motor y ElectricMotor Consideremos dos clases que tienen algo en común.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González ELO329.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
1 Definición y Conversión de datos Agustín J. González ELO-329.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO326: Seminario II 2do. Sem
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend) Agustín J. González Versión Original de Kip Irvine ELO329.
Programación Orientada a Objetos
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Programación orientada a objetos
1 Miembros Estáticos (Static) de Clases y Funciones Amigas (Friend)‏ Agustín J. González ELO329.
1 Herencia Agustín J. González ELO padre hijo Como en biología, los niños heredan características de su padre Clasificación de Objetos En un intento.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
Herencia en C++ Agustín J. González ELO329. Diseño y Programación Orientados a Objetos 2 Motor ElectricMotor Motor y ElectricMotor Consideremos dos clases.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Transcripción de la presentación:

Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static) Agustín J. González ELO329

Funciones y Clases Friend El calificador friend se aplica a funciones globales y clases para otorgar acceso a miembros privados y protegidos de una clase. La función función global friend tendrá acceso a los miembros como si fuera un método de la clase. Una clase Friend B es aquella cuyos métodos tiene acceso a los miembros privados y protegidos de otra clase A que la ha declarado friend. Función global No exclusiva de la clase!! Solo prototipo, su definición no pertenece a la clase class Course { public: friend bool ValidateCourseData(const Course &C); private: int nCredits; //... }; Diseño y Programación Orientados a Objetos

ValidateCourseData()‏ El calificador friend no aparece en la implementación de la función global. Notar el acceso a miembros privados (nCredits) de la clase bool ValidateCourseData(const Course & C)‏ { if( C.nCredits < 1 || C.nCredits > 5 )‏ return false; } return true; Diseño y Programación Orientados a Objetos

Funciones Friend, otro ejemplo class Complex { public: Complex( float re, float im ); friend Complex operator+( Complex first, Complex second ); private: float real, imag; }; Complex operator+( Complex first, Complex second ) // implementación { return Complex( first.real + second.real, first.imag + second.imag ); } En este Ejemplo, la función operator+ tiene acceso a los miembros privados de Complex. En este caso pudo definirse como un método. Sólo prototipo Diseño y Programación Orientados a Objetos

Diseño y Programación Orientados a Objetos Clases Friend ‏ // Example of a friend class class YourClass { friend class YourOtherClass; // Declare a friend class private: int topSecret; }; class YourOtherClass public: void change( YourClass & yc ); void YourOtherClass::change( YourClass & yc )‏ yc.topSecret++; // Puede acceder datos privados } Una clase amiga (friend) es una clase cuyas funciones miembros son como funciones miembros de la clase que la hace amiga. Sus funciones miembros tienen acceso a los miembros privados y protegidos de la otra clase. Diseño y Programación Orientados a Objetos

Diseño y Programación Orientados a Objetos Clases Friend (cont.)‏ La “Amistad” no es mutua a menos que explícitamente sea especificada. En el ejemplo previo, los miembros función de YourClass no pueden acceder a miembros privados de YourOtherClass. La “Amistad” no se hereda; esto es, clases derivadas de YourOtherClass no pueden acceder a miembros privados de YourClass. Tampoco es transitiva; esto es clases que son “friends” de YourOtherClass no pueden acceder a miembros privados de YourClass. Es importante en sobre carga del operador << y >>, pues en este caso no podemos agregar sobrecargas a clases estándares. Ver ejemplo CVectorFriend Diseño y Programación Orientados a Objetos

Static: Miembros Estáticos No hay gran diferencia con Java Estas variables tienen existencia desde que el programa se inicia hasta que termina. Datos Miembros estáticos Una instancia de la variable es compartida por todas las instancias de la clase. Todos los objetos de esa clase comparten el mismo valor del miembro estático Funciones miembro Estáticas Estas funciones pueden ser invocadas sobre la clase, no solo sobre una instancia en particular. La función sólo puede acceder miembros estáticos de la clase Es posible pensar en miembros estáticos como atributos de la clase y no de objetos. Diseño y Programación Orientados a Objetos

Declaración de Datos Estáticos La palabra clave static debe ser usada. class Student { //... private: static int m_snCount; //instance m_snCount }; Diseño y Programación Orientados a Objetos

Creación de un contador de instancias La inicialización del dato estático no se efectúa en el constructor pues existe previo a la creación de cualquier objeto. Un miembro estático puede contar el número de instancias de una clase. // student.cpp int Student::m_snCount = 0; Asigna memoria e inicia el valor de partida. Se ejecuta antes de ingresar al main. Diseño y Programación Orientados a Objetos

Creación de un Contador de Instancias Usamos el constructor y destructor para incrementar y decrementar el contador: Student::Student()‏ { m_snCount++; } Student::~Student()‏ m_snCount--; Diseño y Programación Orientados a Objetos

Miembros de Función Estáticos Usamos miembros de función estáticos para permitir el acceso público a miembros de datos estáticos. class Student { public: static int get_InstanceCount(); private: static int m_snCount; // instance count }; Diseño y Programación Orientados a Objetos

Llamando a Funciones Estáticas Usamos ya sea el nombre de la case o una instancia de la clase para acceder al método: cout << Student::get_InstanceCount(); // 0 Student S1; Student S2; cout << Student::get_InstanceCount(); // 2 cout << S1.get_InstanceCount(); // 2 Diseño y Programación Orientados a Objetos