Las clases como tipos de datos definidos por el usuario

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

Objetos y memoria dinámica

Sobrecarga de Operadores II

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

Lenguaje C, tercer bloque: Funciones

Clases y Objetos en C++

Prof. Dr. Paul Bustamante

Taller #1 (versión del 18 de septiembre de 2009) Programación básica y aproximación al paradigma orientado a objetos

Programación orientada a objetos I

Estructuración del programa en partes más pequeñas y sencillas

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

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

Laboratorio 4 Tema 6. Procedimientos: Acciones, Funciones y Pase de Parámetros

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

El lenguaje C++ A partir del lenguaje C Entorno de programación Visual C++

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

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Tema 6. Gestión dinámica de memoria

CAPITULO 6: FUNCIONES

Ejercicios De Programación De C++ Algoritmos. Lenguaje De Programación C++:

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

INSTITUCION EDUCATIVA LA PRESENTACION NOMBRE ALUMNA: ASIGNATURA: MATEMATICAS NOTA

Sobre Carga de Operadores

Tema 6: Clases. Índice

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

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

Sentencias de salto: break, continue, goto Sentencia de Salto: break

INTRODUCCIÓN A LA POO EN C++

Cómo implementar tus propias funciones en Lenguaje C?

primarios = 3; 5 4 = 1; 2(3) = 6; 3. Observa todos los valores usados en

Clases y funciones amigas: friend

Punteros y Memoria Dinámica II

DII. 1. (5 Puntos) Dada la clase Punto con la siguiente interfaz ya implementada

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

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Programación 1 Tema 7. Desarrollo modular y descendente de programas

TEMA 8: Gestión dinámica de memoria

UNIDAD Deberás recordar. Veamos algunos ejemplos de cómo operar con estos números:

Programación Orientada o Objetos

Programación Orientada a Objetos en C++

Una lista de operadores que pueden o no sobrecargarse es la siguiente: Operadores que pueden sobrecargarse

Conceptos básicos sobre C++

Introducción a Funciones

Funciones Definición de función

Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones.

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Recuperado de FRACCIONES

Variables Globales: Estas se crean durante toda la ejecución del programa, y son globales, ya que pueden ser llamadas, leídas, modificadas, etc;

Una función es un miniprograma dentro de un programa. Las funciones contienen varias

Operaciones de números racionales

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

APUNTES PROII 2º PARCIAL.

Informática PRÀCTICA 2 Curs

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

Ejercicios Tema 6. Funciones

Clases en C++ Agustín J. González ELO329

Funciones en lenguaje C

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

Programación Tema 4: Métodos. Programación DIT-UPM

Matemáticas números reales

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Conversión entre Tipos

SUBPROGRAMAS. Los subprogramas pueden ser invocados varias veces desde diferentes partes del programa.

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

Creación de clases en C++ (I)

PROGRAMACIÓN ORIENTADA A OBJETOS

Clases en C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Algoritmos y Programación II. Enero de 2005

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

Sesión 3. TEMA 5. DEFINICIONES DE CLASES

PRÁCTICA 6 REPASO TEMAS 1 Y 2

Guía práctica de estudio 04: Tipos de clase

Cadenas de caracteres

lasmatemáticas.eu Pedro Castro Ortega materiales de matemáticas

Temas. Taller III 2007 Gentile,Vazquez

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

Tema 6: Herencia. (El lenguaje C++)

Fundamentos de Programación 2019-I FUNCIONES

PARTES DE UN PROGRAMA EN C/C++

Lenguaje de Programación: C++ Funciones

CONTENIDO DE LA LECCIÓN 16

Programación 1 Tema III Clase de problemas

Informática Industrial I

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

Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase

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

Tema: Plantillas en C++.

Capítulo 5. Los números reales y sus representaciones Pearson Education, Inc. Diapositiva 5-4-1

PUBLICACIÓN DEL ENUNCIADO: Semana del 10 de noviembre de ENTREGA: Clase de laboratorio de la semana del 8 de diciembre de 2003.

Técnicas Informáticas PRÁCTICA 7 Curso PRÁCTICA 7: Cadenas y Estructuras.

Equivalencias entre fracción y decimal

Tema 2 Funciones y procedimientos. Tema 2 Funciones y procedimientos. Introducción. Abstracción y modularidad

2. Tratamiento de objetos con JAVA

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

Transcripción:

. La clase Fraccional. Representación en UML de los niveles de acceso 3. Categorías de los objetos que aparecen en los métodos 4. El puntero this. Métodos operadores La clase Fraccional Vamos a diseñar la clase Fraccional, la cual va a permitir modelar un nuevo tipo de datos: los números racionales expresados como fracciones. Las fracciones se caracterizan por dos valores de tipo entero que representan el y el ; éstos serán los datos miembro de la clase. Fraccional Numerador Denominador int ; int ; ;

Operaciones que se pueden realizar Suma, Resta, Producto, División. Las fracciones deben estar simplificadas, por lo tanto necesitamos un método para la operación de simplificación. Este método se ejecuta solo cuando cambia el estado de un objeto. Será un método privado. Además, para cada atributo, habrá un método accedente y un método mutador. Incluiremos un método para mostrar en pantalla el estado del objeto fracción. 3 Suma, Resta, Producto y División Fraccional Fraccional(int n, int d) mas(fraccional): Fraccional menos(fraccional ): Fraccional por(fraccional ): Fraccional entre(fraccional ): Fraccional Método constructor int ; int ; Fraccional(int n=0, int d=); Fraccional mas (Fraccional f ); Fraccional menos(fraccional f); Fraccional por(fraccional f); Fraccional entre(fraccional f); ; 4

Un método auxiliar Privado Necesitamos, a parte de funciones miembro que permitan operar con fracciones ( suma, resta, multiplicación, ), un método privado que simplifique fracciones. Este método privado solo lo usarán los métodos públicos que modifiquen el estado de un objeto. Fraccional simplificar( ) El estado de cada objeto de tipo fraccional representa un número racional simplificado. int ; int ; ; Representación en UML de los niveles de acceso Nombre Atributos Métodos Nombre de la clase Atributos definidos en la clase Métodos definidos en la clase Privado: - Público: + - - Fraccional - simplificar( ) + Fraccional(int n, int d) + mas(fraccional): Fraccional + menos(fraccional ): Fraccional + por(fraccional ): Fraccional + entre(fraccional ): Fraccional 6

La clase Fraccional int ; int ; Fraccional(int n=0, int d=); Fraccional mas (Fraccional f ); Fraccional menos(fraccional f); Fraccional por(fraccional f); Fraccional entre(fraccional f); ; Constructor con argumentos implícitos void Fraccional::simplificar( ) int d; d= mcd(,); = / d; = /d; void Fraccional::Fraccional(int n=0, int d= ) = n; = d; simplificar( ); 7 El método suma de fracciones int ; int ; ; Fraccional(int n=0, int d=); Fraccional mas (Fraccional f ); Fraccional menos(fraccional f); Fraccional por(fraccional f); Fraccional entre(fraccional f); aux. = * f. + * f.; aux. = * f.; n+ n' = n d' + d n' d d' d d' 8

La clase Fraccional La operación suma de fracciones, se realiza de forma extraña, ya que su sintaxis es la normal para paso de mensajes. aux. = * f. + * f.; aux. = * f.; + = void main() Fraccional f(,), f(,), ; = f. mas( f ); f f Se envía el mensaje mas al objeto f pasando como argumento el objeto f 9 Fraccional f(,), f(,), ; = f. mas( f ); aux. = * f. + * f.; aux. = * f.; f f 0 0

aux. = * f. + * f.; aux. = * f.; f f f Fraccional f(,), f(,), ; = f. mas( f ); El parámetro f es un parámetro por valor, entonces, el compilador crea una copia. 0 aux. = * f. + * f.; aux. = * f.; f f f Fraccional f(,), f(,), ; = f. mas( f ); Se crea el objeto local aux. aux 0 0

aux. = * f. + * f.; aux. = * f.; f f f Fraccional f(,), f(,), ; = f. mas( f ); Se calcula el valor del atributo del objeto aux. aux 0 3 aux. = * f. + * f.; aux. = * f.; f f f Fraccional f(,), f(,), ; = f. mas( f ); Se refiere al atributo del objeto receptor del mensaje suma. aux 0 4

aux. = * f. + * f.; aux. = * f.; f f f Fraccional f(,), f(,), ; = f. mas( f ); Se calcula el valor del atributo del objeto aux. aux 0 aux. = * f. + * f.; aux. = * f.; f f f Fraccional f(,), f(,), ; = f. mas( f ); Se envía el mensaje simplifica( ) al objeto aux. aux 0 6

aux. = * f. + * f.; aux. = * f.; f f f Fraccional f(,), f(,), ; = f. mas( f ); Devolución por valor Se devuelve una copia de aux. aux Resultado de la función 0 7 aux. = * f. + * f.; aux. = * f.; f f Fraccional f(,), f(,), ; = f. mas( f ); Resultado de la función Se destruyen los objetos temporales aux y f Se copia el objeto devuelto por la función mas en el objeto. 8

aux. = * f. + * f.; aux. = * f.; f f Fraccional f(,), f(,), ; = f. mas( f ); Resultado de la función Ya no se necesita el objeto devuelto, por lo que se destruye. 9 El método resta de fracciones int ; int ; ; Fraccional(int n=0, int d=); Fraccional mas (Fraccional f ); Fraccional menos(fraccional f); Fraccional por(fraccional f); Fraccional entre(fraccional f); Fraccional Fraccional::menos (Fraccional f ) aux. = * f. - * f.; aux. = * f.; n n' n d' d n' d = d' d d' 0

El método producto de fracciones int ; int ; ; Fraccional(int n=0, int d=); Fraccional mas (Fraccional f ); Fraccional menos(fraccional f); Fraccional por(fraccional f); Fraccional entre(fraccional f); Fraccional Fraccional::por (Fraccional f ) aux. = * f.; aux. = * f.; n n' n n' = d d' d d' El método división de fracciones int ; int ; ; Fraccional(int n=0, int d=); Fraccional mas (Fraccional f ); Fraccional menos(fraccional f); Fraccional por(fraccional f); Fraccional entre(fraccional f); Fraccional Fraccional::entre (Fraccional f ) aux. = * f.; aux. = * f.; n n' n d' = d d' d n'

Método accedente y mutador para cada atributo - - Fraccional + Fraccional(int n, int d) - simplificar( ) + mas(fraccional): Fraccional + menos(fraccional ): Fraccional + por(fraccional ): Fraccional + entre(fraccional ): Fraccional //accedentes ---- + ac_ () : int + ac_ (): int // mutadores ---- + mu_ (int n) + mu_ (int d) int ; int ; Fraccional(int n=0, int d=); Fraccional mas (Fraccional f ); Fraccional menos(fraccional f); Fraccional por(fraccional f); Fraccional entre(fraccional f); int ac_( ); int ac_( ); void mu_ (int n); void mu_ ( int d); ; 3 Método accedente y mutador para cada atributo int ; int ; int ac_( ); int ac_( ); void mu_ (int n); void mu_ ( int d); ; int Fraccional:: ac_ ( ) return ; int Fraccional:: ac_ ( ) return ; void Fraccional::mu_ ( int d ) = d; simplificar( ); 4

Método para mostrar el estado de un objeto int ; int ; int ac_( ); int ac_( ); void mu_ (int n); void mu_ ( int d); void mostrar () ; ; void Fraccional::mostrar( ) cout << << / << ; Detalle de ejecución de la clase Fraccional void main() Fraccional f, f, ; f.mu_ (); f.mu_(3); f.mostrar(); cout << endl; f.mu_ (); f.mu_(7); f.mostrar(); cout << endl; /3 // f /7 // f 6

Detalle de ejecución de la clase Fraccional cout << Numerador: << f.acc_ (); cout << Denominador: << f.acc_(); = f.mas(f);.mostrar(); cout << endl;.= f.menos (f);.mostrar(); cout << endl;.= f.por (f);.mostrar(); cout << endl; return; /3 /7 Numerador: Denominador: 7 9/ // f+f -/0 0/ 4/ f 3 f 4 7 Al ejecutarse la instrucción return, se destruyen todos los objetos del programa 7 Categorías de objetos que aparecen en los métodos Objeto receptor del mensaje - Es el que provoca la ejecución del método. - El método se ejecuta sobre él. - Acceso total a sus atributos y métodos sin el operador punto ( ). Objetos parámetros - Hacen referencia a los objetos argumentos. Se pasan por copia o por referencia. - Si son de la misma clase, se tiene acceso a lo privado. Se crean cuando comienza la ejecución del método y se destruyen cuando termina. Objetos locales - Declarados en el cuerpo de los métodos. - Si son de la misma clase, se tiene acceso a lo privado. 8

this: puntero al objeto receptor del mensaje * Los métodos tienen definido un parámetro secreto o fantasma que no aparece en la lista de parámetros. * Este parámetro fantasma es un puntero a un objeto de la clase, su nombre es this. * El parámetro fantasma es un puntero al objeto receptor del mensaje. * Dentro de los métodos de la clase, en el código, se puede utilizar ese parámetro para acceder a los atributos del objeto receptor o hacer que el objeto receptor se pase mensajes a sí mismo. 9 this: puntero al objeto receptor del mensaje Variables locales Variables de la lista de parámetros El parámetro fantasma: this void main( ). objeto.metodo ();. this = Objeto = Método o función miembro Programa principal 30

this: puntero al objeto receptor del mensaje Como this es un puntero al objeto receptor del mensaje, podemos acceder a sus miembros con el operador flecha ( ). this = Método o función miembro void metodo (). this -> atributo;. Objeto = Programa principal 3 this: puntero al objeto receptor del mensaje void Fraccional::mu_ ( int d ) = d; simplificar( ); void Fraccional::mu_ ( int d ) this-> = d; this->simplificar( ); En éste caso, se puede omitir this-> Aunque para acceder a los atributos o para pasarse mensajes no sea necesario el uso de this, hay ocasiones en las que resulta imprescindible: cuando el método tiene que devolver una copia del objeto receptor: return *this; 3

Métodos operadores Las operaciones que realizamos con los objetos de la clase fraccional, se realizan de forma extraña, ya que su sintaxis es la normal para paso de mensajes. = f.mas(f); Sería mucho más natural expresar la suma como: = f + f ; Es decir, sería más cómodo usar el operador + predefinido en el lenguaje para usarlo con otro tipo de datos. A esto se le llama sobrecarga de operadores. 33 Métodos operadores Para poder usar el operador + para sumar fracciones, podemos definir un método al que llamaremos método operador o función miembro operadora. operator es Prototipo palabra reservada Fraccional operator + ( Fraccional f ); La implementación de éstos métodos es exactamente la misma. Fraccional Fraccional :: operator + (Fraccional f ) aux. = * f. + * f.; aux. = * f.; 34

Métodos operadores La clase Fraccional con métodos operadores : Cuando los métodos se implementan como funciones operadoras, podemos enviar los mensajes +, -, * y / a los objetos de la clase Fraccional de forma más natural (Notación infija) = f + f ; int ; int ; Fraccional(int n=0, int d=); Fraccional operator + ( Fraccional f ); Fraccional operator - (Fraccional f); Fraccional operator * (Fraccional f); Fraccional operator / (Fraccional f); int ac_( ); int ac_( ); void mu_ (int n); void mu_ ( int d); ; Al objeto f se le envía el mensaje + pasándole como argumento el objeto f. 3 Métodos operadores Esto no es más que una forma abreviada del envío de mensajes habitual: = f. operator + ( f ) ; = f + f ; int ; int ; Fraccional(int n=0, int d=); Fraccional operator + ( Fraccional f ); Fraccional operator - (Fraccional f); Fraccional operator * (Fraccional f); Fraccional operator / (Fraccional f); int ac_( ); int ac_( ); void mu_ (int n); void mu_ ( int d); ; 36