Clases y Objetos en C++

Documentos relacionados
Programación Orientada a Objetos en C++

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Principios de Computadoras II

Programación orientada a objetos II

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

12. Tipos de atributos

Programación orientada a objetos I

Tema 6: Clases. Índice

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Funciones Definición de función

Memoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++

Implementación de las Clases Pila, Cola, Lista y Arbol

Tema: Clases y Objetos en C#. Parte II.

PROGRAMACION ORIENTADA A OBJETOS EN C++

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

Guía práctica de estudio 04: Clases y objetos

Tipos Recursivos de Datos

3. LA HERENCIA. Necesidad de la herencia

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

Estructura de datos y Programación

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Herencia y polimorfismo

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

PNFSI. Asignatura: Desarrollo de Software. Tema 1: Programación Orientada a Objetos

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C.

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Tema 2: Programación basada en Objetos

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación.

Herencia y Polimorfismo en C++

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

Tema 2: Clase y objetos en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

POO. Por tanto, una clase nos permite crear varios objetos que pueden realizar la misma función o funciones diferentes.

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Tema 6. Gestión dinámica de memoria

Unidad Didáctica 1. Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

TEMA 3:Programación con Clases y Objetos.

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

INTRODUCCIÓN A LA POO EN C++

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez

Los constructores son funciones miembro especiales que sirven para inicializar un objeto de una determinada clase al mismo tiempo que se declara.

APUNTES PROII 2º PARCIAL.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Programación Orientada a Objetos. Orientación a Objetos en Java

LA PALABRA CLAVE THIS EN JAVA. CONTENIDO NULL POR DEFECTO DE UN OBJETO. SOBRECARGA DE NOMBRES. EJEMPLOS (CU00654B)

OOP y C++ Indice. 0.1 Análisis orientado a objetos(1/4) Análisis orientado a objetos(2/4) 0.- OOP 1.- INTRODUCCIÓN.

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Programación Orientada a Objetos (POO)

Tema: Sobrecarga de Operadores.

Categorías de métodos. Métodos constructores y destructores

PHP5 Orientado a Objetos

PUNTEROS (Apuntadores)

Modulo 11. Clases y Objetos en Java

Declaración. Introducción. Definición o implementación. Llamada. Un programa en C consta de una o más funciones.

Introducción a la Programación orientada a objetos con C++

Programación Orientada o Objetos

Forma Básica Clase Java

Tema 2: Clases y Objetos. Programación Orientada a Objetos Curso 2015/2016

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

CAPITULO 2. COMPRENDER LAS DEFINICIONES DE CLASE

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Transcripción:

Informática II Clases y Objetos en C++

Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar las dimensiones de un vagón, se las puede juntar en una estructura de datos llamada Vagon. Es posible definir variables de este nuevo tipo de la misma manera que con variables de tipos básicos.

Introducción Las variables que se definen como parte de la clase se llaman datos miembro de la clase. class Vagon { double alto; double ancho; double longitud; }; Las variables que son instancias de una clase son llamadas objetos. Vagon vagongrande;

Clases La definición de una clase es la especificación de un nuevo tipo de dato. Puede contener elementos que pueden ser variables tanto de los tipos básicos como de otros tipos definidos por el usuario. Pueden ser elementos simples o arreglos, punteros, arreglos de punteros, etc.

Clases Además una clase puede contener funciones que operan sobre los objetos de esa clase accediendo a sus elementos. Una clase combina la definición de los datos que componen un objeto y los medios para manipularlos.

Clases Los datos y funciones de una clase son llamados miembros de la clase. Las funciones miembro, a veces, también son llamadas métodos. A los datos miembro se los suele llamar campos. La definición de la clase completa debe terminar con punto y coma.

Control de acceso Se puede especificar que los miembros de una clase sean public, private o protected. Por defecto los miembros de una clase son private. Cuando se define una clase, que es un tipo de datos, no se declara ningún objeto del tipo de la clase.

Declaración de objetos Los objetos de una clase se declaran de exactamente la misma manera que los tipos básicos. Se pueden declarar objetos de la clase Vagón con las siguientes sentencias: Vagon vagon1; Vagon vagon2; Cada objeto de la clase Vagon (vagon1 y vagon2), tiene sus propios datos miembro.

Declaración de objetos Los campos miembro no están inicializados, contienen basura, por lo que se necesita alguna forma de acceder a ellos.

Funciones miembro Tienen su definición o su prototipo dentro de la definición de la clase. Las funciones miembro siempre tienen acceso a todos los campos de la clase. class Vagon { double alto; double ancho; double longitud; public: double Volumen() { return alto * ancho * longitud; } };

Funciones miembro En la definición de la clase, contamos con la sección de los miembros privados (private), que es el acceso por defecto y la sección de los miembros públicos (public), que son los que aparecen después de la etiqueta indicadora.

Funciones miembro Si se desea realizar la definición de una clase miembro fuera de la definición de la clase, se debe poner el prototipo de la función dentro de la clase. Para indicar al compilador que esa función pertenece a la clase se debe anteponer al nombre de la función el nombre de la clase, y separar ambos por el operador de resolución de alcance: '::'.

Funciones miembro class Vagon { double alto; double ancho; double longitud; public: double Volumen(void); }; Vagon::Volumen() { return alto * ancho * longitud; }

Funciones inline Si la definición de la función está dentro de la definición de la clase, el compilador considera implícitamente a la misma como una función inline. Con una función inline el compilador expande el código del cuerpo de la función en el lugar del llamado a la misma. Esto hace que el código sea más rápido.

Constructores En algunos casos, inicializar todos los campos de una clase, demanda grandes porciones de código. Como los campos son privados, no se tiene acceso a ellos desde fuera de la clase. Un constructor de clase es una función especial que crea nuevos objetos. Provee la oportunidad de inicializar los objetos al momento de ser creados.

Constructores Una clase puede contener varios constructores permitiendo crear objetos de varias maneras. Los constructores siempre tienen el mismo nombre que la clase en la cual están definidos No tienen valor de retorno.

Constructores public: Vagon (double al, double an, double logt) { alto = al; ancho = an; longitud = logt; }... Vagon unvagon(2.8, 2.7, 7.9);

Constructores Al invocar la función Volumen para la instancia de Vagon unvagon se utiliza el operador punto ('.') llamado operador de selección directa de miembros. Un constructor que requiere un único argumento no necesita ser llamado explícitamente. Por ejemplo: Vagon v = 2.8; es lo mismo que Vagon v(2.8);

El constructor sin argumentos Si no se desea inicializar los campos en un constructor, se puede definir un constructor sin argumentos, también llamado constructor noarg: Vagon () {}; El mismo puede ser definido por el programador. En el caso de que no se provea ningún constructor en una clase, el compilador generará un constructor por defecto. En cualquiera de los dos casos, es el constructor que se invoca en una sentencia como la que vimos anteriormente: Vagon vagon1;

Asignación de parámetros por defecto De la misma manera que con las funciones ordinarias, se pueden establecer valores por defecto en funciones miembro y constructores. Vagon (double al, double an, double logt = 8.0) { alto = al; ancho = an; longitud = logt; }

Listas de inicialización Vagon (double al, double an, double logt = 8.0): alto(al), ancho(an), longitud(logt) {} Es muy común, que utilizando este estilo, el cuerpo del constructor quede vacío.

El constructor de copia por defecto El constructor de copia por defecto es invocado cuando se quiere inicializar un objeto a partir de otro. Vagon unvagon(2.8, 2.7, 7.9); Vagon otrovagon = unvagon; Cuando se implementa un constructor de copia, el parámetro debe ser una referencia constante: Vagon(const Vagon& unvagon);

Acceso a campos miembro privados El encapsulamiento es una característica esencial. Debemos proteger los campos en la medida de lo posible. En la sección pública de la clase, se pueden definir funciones para controlar el acceso a los datos privados. Estas funciones tienen como tipo de retorno el mismo tipo del campo miembro en cuestión.

Acceso a campos miembro privados Se las llama con el prefijo get y no reciben ningún argumento. El cuerpo consiste simplemente en retornar el valor actual del atributo. double getalto() { return alto; } En general, se definen funciones similares para cada campo que se quiera hacer disponible desde fuera de la clase sin perjudicar la seguridad de la misma.

Modificación de campos miembro privados Si se permite setear o modificar valores de campos privados, se procede de manera similar, mediante la definición de funciones. Estas últimas no retornan ningún valor. Se las llama con el prefijo set. Reciben como argumento el valor que será asignado al campo miembro o una referencia del mismo tipo. El cuerpo consiste simplemente en asignar al campo en cuestión, el valor recibido como argumento. void setalto(double al) { alto = al; }

Funciones amigas No son miembros de una clase, pero tienen acceso a todos los miembros privados de la misma. Tales funciones son llamadas amigas de la clase. Se las declara anteponiendo la palabra clave friend.

El puntero this Cuando se ejecuta una función miembro, ésta contiene un puntero oculto llamado this, que apunta al objeto mediante el cual se hizo la llamada a la función. Cuando durante la ejecución se accede a un campo de una clase, por ejemplo alto, en realidad la referencia es this->alto. El nombre del puntero this es agregado por el compilador a los miembros en las funciones. Se puede hacer mención explícita a este puntero.

Miembros estáticos Los datos y las funciones miembro de una clase pueden ser declarados static. Cuando se declara como estático un campo miembro, éste se crea una única vez y es compartido por todos los objetos de la clase. Cada objeto posee su propia copia de cada uno de los campos miembro ordinarios, pero existe sólo una instancia de los campos miembro estáticos. static int cantvagones; No se puede inicializar un dato miembro estático en la definición de la clase. int Vagon::cantVagones = 0;

Campos miembro estáticos Se puede hacer referencia a un campo miembro estático desde una instancia de la clase o desde la clase misma: cout << unvagon.cantvagones; cout << Vagon::cantVagones; Los campos estáticos de una clase se crean automáticamente cuando el programa comienza y se inicializan con el valor 0. Existen a pesar de que no se instancie ningún objeto de la clase.

Funciones miembro estáticas Cuando se declara como estática una función, se la hace independiente de cualquier objeto de la clase. La ventaja es que existe y puede ser invocada antes de que se instancie cualquier objeto. Estas funciones, al igual que los campos miembro estáticos, pueden llamarse desde un objeto instanciado o a partir del nombre de la clase.

Destructores Un destructor es una función miembro que destruye un objeto cuando ya no se lo necesita o cuando queda fuera de alcance. Tiene el mismo nombre que la clase pero precedido con tilde (~). No retorna ningún valor y tampoco toma ningún parámetro. Si no se define un destructor para una clase, el compilador siempre genera un destructor por defecto.

Destructores No eliminan objetos que han alocado memoria con el operador new. ClaseA(const char * texto = "Un mensaje") { mensaje = new char[strlen(texto) + 1]; strcpy(mensaje, texto); } ~ClaseA() { delete[] mensaje; }

Sobrecarga de operadores Permite que los operadores estándares de C++ puedan programarse para operar con los tipos de datos o clases definidas por el usuario. Se espera que el comportamiento de un operador sobrecargado sea consistente con el uso normal que se le da al mismo. Sólo algunos operadores no pueden sobrecargarse: (::,?:,., sizeof y.*)

Sobrecarga de operadores: Ejemplo Sobrecargamos el operador < (menor) para la clase Vagon, considerando que un vagón es menor que otro si tiene menor volúmen. bool Vagon::operator< (const Vagon& unvagon) const { return this->volumen() < unvagon.volumen(); } Aquí operator es una palabra clave, que junto con el operador (separado por espacio o no) definen el nombre de la función.

Sobrecarga de operadores La función se define const porque no modifica los datos miembro de la clase. El argumento debe ser una referencia constante. El operador < es binario infijo, es decir, toma un operando a la izquierda y un operando a la derecha. if (vagon1 < vagon2) cout << "El vagon1 es menor que el vagon2 "; la expresión entre paréntesis es equivalente a: vagon1.operator<(vagon2)