FUNDAMENTOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS - Ua

1y ago
16 Views
2 Downloads
1.03 MB
99 Pages
Last View : 11d ago
Last Download : 3m ago
Upload by : Asher Boatman
Transcription

Programación orientada a objetosTEMA 2FUNDAMENTOS DE LA PROGRAMACIÓNORIENTADA A OBJETOSCristina Cachero, Pedro J. Ponce de León(3 sesiones)Versión 0.5Depto. Lenguajes y Sistemas Informáticos

Del tema anterior. ABSTRACCIÓNOCULTACIÓN DE INFORMACIÓN.ENCAPSULACIÓNConcepto de P.O.O: objetos, clases y herenciaCarácterísticas básicas de un L.O.O Objetos (instancias)ClasesPaso de mensajesHerencia Carácterísticas opcionales de un L.O.O. PolimorfismoGenericidadGestión de erroresAsercionesTipado estáticoRecogida de basuraConcurrenciaPersistenciaReflexión2

Indice ClasesObjetosAtributosOperacionesUML y el diagrama de clasesConstructores y destructoresPropiedades constantes y de clase en C Relaciones entre objetosDiseño O.O.3

ClaseDefinición “Esencia” de un objeto: abstracción de los atributos(características), operaciones, relaciones y semántica comunes a unconjunto de objetosAsí, una clase representa al conjunto de objetos que comparten unaestructura y un comportamiento comunesTanto metodologías como lenguajes OO tienen el concepto de clasecomo elemento central. No hay noción de programa principal, y los subprogramas no existencomo unidades modulares independientes, sino que forman siempreparte de alguna clase. El programa principal se convierte en un simple punto de entrada alprograma, y no debería contener lógica de control.Todos los tipos de datos deben ser clases4

ClasePartes de la Definición Identificador de Clase: nombrePropiedades Atributos o variables: datos necesarios para describir los objetos(instancias) creados a partir de la clase La combinación de sus valores determina el ESTADO de un objetoRoles: relaciones que una clase establece con otras clasesServicios, operaciones, métodos (funciones miembro en C ): accionesque un objeto conoce cómo ha de ejecutarNombreatributosnombre1.operaciones5

Clase vs TAD Definición: TAD: Especificación algebraica (abstracta) de una estructura de datos junto con elconjunto de operaciones que se pueden hacer sobre ese tipo de datos. Un TAD seasocia a una o más implementaciones distintas. Al ser una especificación formal, nosoporta el concepto de herenciaCLASE: Concepto que describe un TAD y una de sus implementaciones (total oparcial). Así, una clase es un tipo abstracto de dato equipado con una implementaciónposiblemente parcial. Soporta herencia.La POO se encuentra a un nivel de abstracción superior que la PBO(Programación Basada en Objetos o Programación con TAD’s): Un TAD representa una vista del mundo centrada en datos (su estructura,representación y manipulación), mientras que POO representa una vista del mundoorientada al servicio (qué pueden ofrecer esos TADs al resto del programa).La POO innova en aspectos como compartición de código y reuso. Estas innovacionesse basan en tres conceptos: Paso de Mensajes: la actividad se inicia por una petición a un objeto específico. En estehecho está implícita la idea de que la interpretación de un mensaje puede variar con distintosobjetos, y consecuentemente los nombres de operaciones no necesitan ser únicos - códigomás legible.Herencia: permite a TADs diferentes compartir el mismo código, lo que conlleva unareducción de su tamaño y un incremento de funcionalidad.Polimorfismo: permite que este código compartido se adapte a circunstancias específicas detipos de datos individuales.6

Indice ClasesObjetosAtributosOperacionesUML y el diagrama de clasesConstructores y destructoresPropiedades constantes y de clase en C Relaciones entre objetosDiseño O.O.7

ObjetoDefinición Un objeto es un elemento tangible (ocupa memoria) generado a partirde una definición de clase.Se puede definir como una entidad (real o abstracta) con un papelbien definido en el dominio del problema.Según Grady Booch: Un objeto tiene un estado, un comportamiento yuna identidad Estado: conjunto de propiedades y valores actuales de esas propiedades.Comportamiento: modo en que el objeto actúa y reacciona (cambios desu estado y paso de mensajes). Viene determinado por la clase a la quepertenece el objetoIdentidad: propiedad que distingue a unos objetos de otros (nombreúnico de variable)3o:Naipenum 3palo OROS8

ObjetoEstado y Comportamiento El estado de un objeto puede influir en sucomportamientoEjemplo: una cuenta puede variar sucomportamiento en función de su saldo Cuenta con saldo negativo: no se puede retirar dineropero sí ingresar. Se le cobra comisión. Se le envíanotificación de reclamo de puesta al día.Cuenta con saldo positivo pero saldo medio 600euros: puede retirar e ingresar dinero, se le cobracomisión de mantenimiento.Cuenta con saldo medio 600 euros: puede retirar eingresar dinero. No se le cobra comisión demantenimiento.10

ObjetoCreación e Inicialización Antes de comenzar a trabajar con un objeto, éste debeestar: Creado: reserva de memoria y enlazado de ese espacio dememoria a un nombreInicializado: proceso no limitado a dar valores a los datosmiembro, sino más bien al establecimiento de las condicionesiniciales necesarias para la manipulación de un objeto. La encapsulación permite que este proceso se realice de maneratransparente al usuario.En algunos lenguajes, el proceso de creación va unido al procesode nombrar una variable. Por ej., C : Naipe AsDeBastos;En otros sin embargo, es obligatorio separar ambas operaciones Smalltalk primero declara una referencia y luego crea el objetocon el método new (también usado en Java, Object Pascal,C#.)11

ObjetoCreación e Inicialización Cuando lo que pretendemos crear es un array de objetoshay que guardar memoria para dos conceptos El array en sí mismoCada uno de los objetos que componen el array C en algunos casos permite hacer ambas cosas en una sola líneaNaipe arrayCartas[52];Java no:Naipe arrayCartas[] new Naipe[13];for (int i 0;i 13;i )arrayCartas[i] new Naipe(i 1;Palo::ESPADAS);12

ObjetoPunteros y ubicación en memoria Todos los lenguajes utilizan punteros para la representacióninterna de objetos.Java: Cuando decimos ‘Java no tiene punteros’ simplementeindicamos que Java no tiene punteros que el programador puedaver, ya que todas las referencias a objeto son de hecho punterosen la representación interna.Memoria C : Distinguimos entre:variables automáticas: memoria stack.Desaparece cuando la variable sale deámbito de manera automática. punteros : memoria heap. Los objetosse crean con el operador new. Debeeliminarse explícitamente con el operadordelete. EstáticaDinámica StackHeap13

ObjetoLiberación de memoria En C es responsabilidad del programador liberar lamemoria heap cuando ya no hay más referencias aella.Otros lenguajes OO utilizan unrecolector automático de basura (garbagecollector): Java, C#, SmallTalk, Clos, Este recolector automático es más costoso (usa tiempode ejecución) (menor eficiencia) pero da lugar a códigomás flexible al evitar: Quedarse sin memoria al olvidar liberarla.Que el programador intente usar memoria después de quehaya sido liberada.Que el programador intente liberar la misma memoria másde una vez.14

Indice ClasesObjetosAtributosOperacionesUML y el diagrama de clasesConstructores y destructoresPropiedades constantes y de clase en C Relaciones entre objetosDiseño O.O.15

AtributosDefinición Atributos (datos miembro o variables deinstancia) Porción de información que un objeto posee oconoce de sí mismo. Nombre tipo de dato (primitivos o abstractos)Tienen asociada una visibilidad Pública# Protegida (herencia)- Privada (encapsulación) De paquete (en Java)16

AtributosDefinición Algunos lenguajes de programación (e.g. Delphi, C#) definen un conceptoespecial, al que denominan de manera genérica propiedad ya que es unacombinación de atributo operaciones de lectura/escritura sobre eseatributo. ¡Ojo! No confundir con el concepto genérico de propiedad en UML,que hace referencia al conjunto de atributos operaciones rolesde la claseEste concepto se manipula sintácticamente como un dato, pero operainternamente como un método: permite generación automática desetters/getters.P. ej. DelphitypeTPlayingCard class (TObject)public.property palo: Palo read valorPalo write valorPalo;property numero: int read valorNum;privatevalorPalo: Palo;valorNum: Integer;end;¿Cómo consigo que unapropiedad sea de sólolectura en C ?17

AtributosTipos de Atributo Constantes/Variables Constante: Una casa se crea con un número determinado dehabitaciones (característica estable): Variable: Una persona puede variar su sueldo a lo largo de su vida: const int numHab;int sueldo;De instancia/De clase De instancia: atributos o características de los objetos representadospor la clase Se guarda espacio para una copia de él por cada objeto creadoint nombre;De clase: características de una clase comunes a todos los objetos dedicha clase: static int numEmpleados; // de la clase Empleado18

AtributosAtributos de clase Atributos de clase (estáticos): Implican una sola zona de memoriareservada para todos los objetos de la clase, y no una copia por objeto,como sucede con las variables de instancia. Las variables de clase se diferencian de las variables globales en quepermiten preservar la encapsulación.Sirven para: Almacenar características comunes (constantes) a todos los objetos Número de ejes de un coche Número de patas de una arañaAlmacenar características que dependen de todos los objetos Número de estudiantes en la universidad Se puede utilizar como identificador automático para el almacenamiento decada objeto en una base de datosSe tiene que almacenar espacio para ellas en algún lugar (memoria estática)Un atributo estático puede ser accedido desde cualquier objeto de la clase,ya que es miembro de la propia clase.19

AtributosAtributos de clase Inicialización de atributos de clase Si los inicializamos desde el constructor de objetos se inicializarían una y otra vezSi no se hace, el área de datos queda sin inicializarAlguien distinto de un objeto debe encargarse de inicializar ese datoSolución Java: se inicializan mediante bloque staticclass Contador{.private static int count; //compartidostatic{count 0;}} C#: un campo de datos estático puede ser inicializado por un constructor declaradocomo estático y sin argumentos.C : inicialización global separada de la clase y con operador de ámbito#include iostream int contador::count 0;int main(){.}/*Ojo! Intentar inicializarlo dentro de la decl. de la clase sindeclararlo como constantes nos da el siguiente error:ANSI C forbids in-class initialization of non-conststatic member n‘*/20

Indice ClasesObjetosAtributosOperacionesUML y el diagrama de clasesConstructores y destructoresPropiedades constantes y de clase en C Relaciones entre objetosInterfacesDiseño O.O.21

OperacionesDefinición Operaciones (funciones miembro, métodos o servicios de la clase) Definen el comportamiento de un objeto: acciones que puede realizar un objetoen función de los eventos que ocurran en su entorno y su estado actual.Son interfaces a métodos (código)Al igual que los atributos, tienen asociada una visibilidadAl igual que los atributos, pueden ser constantes o variables y estáticos o noestáticosAdemás, las operaciones pueden modificar el estado del sistema (órdenes) o nomodificarlo (consultas)Signatura de una operación en C :TipoRetornoNombreClase::NombreFMiembro (params) Operador deResolución deÁmbitoSi una clase no sabe exactamente cómo implementar el comportamiento dealguna de sus operaciones, nos encontramos ante un método abstracto (consignatura pero sin cuerpo) Si una clase es abstracta, no puede ser instanciada, aunque sí se pueden definir punteros aellaEn C una clase abstracta se caracteriza porque posee al menos una función virtual pura(virtual valor retorno selector(params) 0)22

OperacionesTipos de Operaciones Tipos de operaciones: De instancia/De clase Constantes/Variables Operaciones de instancia: operaciones que pueden realizar los objetos de la clase. Puedenacceder a atributos tanto de instancia como de claseOperaciones de clase: operaciones que acceden EXCLUSIVAMENTE a atributos de clase amenos que se pase explícitamente el puntero this. Permiten acceder a los atributos desde lapropia clase (sin necesidad de conocer ninguna instancia, mediante el ORA)Operaciones no constantes: no pueden ser invocadas por objetos constantesOperaciones Constantes: Pueden ser invocadas por objetos constantes o no constantes Dentro de ellas no se puede modificar el objeto invocador (*this). Intentarlo dará unerror de compilación Los constructores y los destructores nunca se definen como miembros constantes, yaque se considera que siempre lo son, puesto que deben tener permiso para operarsobre objetos constantesConsultas/Órdenes (etiqueta UML const ). Consultas: operaciones que proporcionan información sobre el estado (valores de losatributos) del sistema ( const ).ördenes: operaciones que modifican el estado del sistema. Sólo las consultas pueden ser definidas como operaciones constantes23

Indice ClasesObjetosAtributosOperacionesUML y el diagrama de clasesConstructores y destructoresPropiedades constantes y de clase en C Relaciones entre objetosDiseño O.O.24

Notación UML de Clases, Atrib. y Oper.Equivalencia C Distintos LOO poseen distinta sintaxis para referirse a los mismosconceptos. Las líneas de código no son un buen mecanismo de comunicaciónUML resuelve este problema y homogeneiza elmodo en que se comunican conceptos OONaipe- num: int- palo: Palo enum getPalo ():Palo getNum():intclass Naipe{public:enum Palo{OROS,COPAS,ESPADAS,BASTOS};Palo getPalo(){return (palo);}int getNum(){return (num);}private:Palo palo;int num;};25

Notación UML de Clases, Atrib. y Oper.Otras equivalencias Java:Class Naipe{public int getPalo() {return palo;}Naipepublic int getNum() {return num;}- num: intprivate int palo;- palo: Palo enum private int num;publicpublicpublicpublic getPalo ():Palo lfinalintintintintOROS 1;COPAS 2;ESPADAS 3;BASTOS 4;}26

Notación UML de Clases, Atrib. y Oper.Otras equivalenciasNaipe- num: int- palo: Palo enum C#:Class Naipe{enum Palo{OROS,COPAS,ESPADAS,BASTOS};public Palo getPalo(){return (palo);}public int getNum(){return (número);} getPalo ():Palo getNum():intprivate Palo palo;privante int num;}27

EjerciciosVisibilidad y Encapsulación Dadas las siguientes definiciones de la clase Asignatura, ¿con cuál sería más rápido implementar un método de matriculación?¿cuál de ellas podemos decir que preserva el principio deencapsulación?¿Cómo podríamos hacer que el atributo nAlum fuera solo-lectura con laversión 1? ¿Y con la versión 2?(propuesta) Proporcionad un ejemplo en el que se vean las ventajas depreservar el principio de encapsulación.Asignatura-string profesor- int nAlumAsignatura- string alumnos[500] string profesor void matricular(string); int nAlum int getAlumnos(); string alumnos[500] void setProf(string)28

EjerciciosVisibilidad y EncapsulaciónAsignaturaAsignatura- string profesor string profesor- int nAlum int nAlum- string alumnos[500] string alumnos[500]int main(){ Asignatura a;a.matricular(“Juan”); If (a.getAlumnos() 200)a.setProf(“Ana”); }int main(){ Asignatura a;a.alumnos[a.nalum ] “Juan”; If a.nAlum 200a.profesor “Ana”;.}¿Qué pasaría si intentásemos compilar estos programasen un entorno que no tuviese la librería string ?29

Indice ClasesObjetosAtributosOperacionesUML y el diagrama de clasesConstructores y destructoresPropiedades constantes y de clase en C Relaciones entre objetosDiseño O.O.30

Operaciones predefinidas de una claseConstructor Función miembro de la clase cuyo objetivo es crear e inicializar objetos. Se invoca siempre que se crea un objeto, bien directamente o bien mediante eloperador newEl enlazado de creación e inicialización asegura que un objeto nunca puede serutilizado antes de que haya sido correctamente inicializadoEn Java y C tienen el mismo nombre que la clase y no devuelven ningún tipo dedatos (ni siquiera void).class Naipe {public:Naipe (int n, int p){palo p;num n;bocaArriba false;}.}; En C , C# y Java puede haber más de una función definida con el mismo nombre(selector) siempre que el número/tipo de argumentos y/o el tipo de retorno seansuficientes para distinguir qué función pretende ser invocada cada vez.31

Operaciones predefinidas de una claseConstructor: Ejercicio#include iostream.h #include stdlib.h class CDummy {public:CDummy () {n ;}; CDummy () {n--;};static int getN() const {return n;};private:¿Es correcto estestatic int n;};programa?int CDummy::n 0;int main () {CDummy a;CDummy b();CDummy j new CDummy();CDummy *cplus new CDummy; //tb puede ir con paréntesiscout a.getN() endl;cout b.getN() endl;}32

Operaciones predefinidas de una claseConstructor: Solución#include iostream.h #include stdlib.h class CDummy {public:CDummy () {n ;}; CDummy () {n--;};static int getN() {return n;};//por qué no tiene sentido const?private:¿qué salida produce?static int n;};int CDummy::n 0;int main () {CDummy a;CDummy b;CDummy *j new CDummy();CDummy *cplus new CDummy; //tb puede ir con paréntesiscout a.getN() endl;cout b.getN() endl;delete j; j NULL;delete cplus; cplus NULL;}33

Operaciones predefinidas de una claseConstructores Los constructores en C tienen asociada una visibilidad El manejo de la visibilidad nos da un gran poder en cuanto a la permisión/nopermisión de determinadas operaciones.La inicialización de datos miembro en C se puede realizar medianteinicializadores en lugar de hacerlo en el cuerpo del constructorNaipe(Palo p, int n) : palo(p),num(n){.}; Es conveniente definir siempre uno que permita la inicialización sinparámetros (constructor por defecto), donde los datos miembro seinicialicen con valores por defecto. Si no se define ninguno de manera explícita, el compilador genera uno convisibilidad pública y que no reserva memoria. Además, no podemos estar segurosde los valores con los que inicializa los datos miembro.Si no hay un constructor sin parámetros, no se puede hacer reserva de arrays deobjetos de esa clase.Los parámetros de un constructor, igual que los de cualquier otra operación,pueden tener asociados valores por defecto.34

Operaciones predefinidas de una claseConstructor: ejemploCubo::Cubo(void)Cubo::Cubo(float ancho inicial,: ancho(2), fondo(2), altura(2) float fondo inicial, floataltura inicial){ cout "Constructor sin: ancho(ancho inicial),parametros." endl; }fondo(fondo inicial),altura(altura inicial){cout "Constructorsobrecargado " endl;} Qué haría falta para que funcionasen las siguientes declaraciones?Cubo c; Cubo c2(10); Cubo c3(10,10); Cubo c4 (10,10,10) ¿Cómo crearía un cubo con 10 cm de ancho, 10 de altura y fondo indefinido?¿Pueden convivir las siguientes definiciones?Cubo::Cubo ();Cubo::Cubo (float ai 10, float fi 10, float li 10) ¿Es posible definir el constructor Cubo::Cubo (float ai 10, float fi, float ai 10)?35

Ejercicios: TCocheEnunciado Diseñad e implementad la definición en C de una clase TCoche, sabiendoque nos interesa mover el coche, ponerle gasolina y pintarlo, y que para elfuncionamiento correcto del programa tenemos que guardar informaciónsobre su marca, su color, su número de serie, los kilómetros que llevarecorridos, los litros de gasolina que admite y su consumo medio.36

Ejercicios: TCocheSolución: TCoche.hTCoche-marca: stringcolor: stringn serie: stringcuenta km: intl gaso: floatconsumo med: float TCoche() TCoche()reponerGaso(float l): voiddesplazar (int d, int v): boolpintar (string c): voidmostrarDatos (void): voidclass t,float); TCoche();void reponerGaso(float);bool desplazar(int,int);void pintar(string);void mostrarDatos();private:string marca,color,n serie;int cuenta km;float l gaso,consumo med;}; Implementad el constructor por defecto y un constructorsobrecargado que permita asignar valores por defecto a todos losatributos del objeto menos a la marca.37

Ejercicios: TCocheSolución: TCoche.cpp (Constructor)TCoche::TCoche(){marca NULL;color NULL;nSerie -1; cuenta km 0;l gaso 0;consumo med -1;}ConstructorTCoche::TCoche(string m, string c NULL, string ns -1, intck 0, float lg 0, float cm -1){marca m;color c;n serie ns;cuenta km ck;Constructorl gaso lg;Sobrecargadoconsumo med cm;} ¿Pueden convivir ambos constructores? ¿Qué ocurre si defino también un valorpor defecto para la marca? ¿Podría definir un valor por defecto sólo para dichamarca y exigir que el usuario introdujese el resto de parámetros?38

Ejercicios: TCocheSolución: main.cpp con manejo de memoria estática ¿Cuándo invoco al constructor?intmain(){Coche mio("Volvo","gris","A-000000",1600,24.0,6.0);int i,j,reponer;j 30;Operador defor (i 1;i 10;i ){envío demensajes aj j*i;objetoreponer mio.desplazar(j,120);if (reponer TRUE)mio.reponerGaso(30.0);if (i 5)mio.pintar("blanco");}mio.mostrarDatos();}39

Ejercicios: TCocheSolución: main.cpp con manejo de memoria dinámica ¿Cuándo invoco ahora al constructor?intmain(){Coche *mio new Coche("Volvo","gris","A-000000",1600,24.0,6.0);int i,j,reponer;j 30;Operador de envíofor (i 1;i 10;i ){de mensajes a ref.j j*i;objetoreponer mio- desplazar(j,120);if (reponer TRUE)mio- reponerGaso(30.0);if (i 5)mio- pintar("blanco");}mio- mostrarDatos();delete (mio); mio NULL;}40

Operaciones predefinidas de una claseConstructor de copia Se invoca de manera automática: Inicialización una variable a partir de otraTCoche a(b); TCoche a b;Paso de un objeto por valorDevolución de un objeto por valorPor defecto se realiza una copia bit a bit del objeto origen.Por definición, el constructor de copia tiene un único argumentoque es una referencia constante a un objeto de la clase.class Vector{public:Vector();Vector(const Vector&); Vector();void Incrementa(pos,int);private:int longi;int *elementos;}42

Operaciones predefinidas de una claseConstructor de Copia por defecto (de oficio)Vector::Vector(const Vector &v): longi(v.longi), elementos(v.elementos){}v1:Vectorlongi 4Vector v2 v1;elementos1 2 3 4elementosv2:Vectorlongi 443

Operaciones predefinidas de una claseConstructor de Copia explícito (definido por el programador)Vector::Vector(const Vector &v): longi(v.longi) {int i;elementos new int[longi];for (i 0;i longi;i )elementos[i] v.elementos[i];}v1:Vectorlongi 4¿por qué?elementos1 2 3 4Vector v2 v1;v2:Vectorlongi 4elementos1 2 3 444

Constructor vs. Método (I)ConceptoConstructorMétodoPropósitoCrear una instanciade una claseAgrupar sentenciasdel lenguajeModificadoresSólo de ámbito( ,-,#).Cualquiera (virtual,static, )Tipo de retornoNinguno: NISIQUIERA VOIDvoid o cualquier otrotipo válido45

Constructor vs. Método (II)ConceptoConstructorMétodoNombreMismo que la claseCualquieraGeneración pordefectoSí (sin argumentos)NoInvocación pordefecto para losdatos miembro(atributos)SíN/A46

Ejercicios: AlumnoEnunciado Suponed que tenemos definida una clase Alumno de la siguiente manera:class Alumno{public:.private:char * nombre;long DNI; //sin letra}; Implementad los métodos necesarios para que el siguiente código funcionecorrectamente.int main(){Alumno a(“Luis Pérez”,33243234);Alumno b a;b.setNombre(“Pepito Grillo”);b.setDNI(58372829):cout a.getNombre() a.getDNI() endl; // sacar datos de Luis;cout b.getNombre() b.getDNI() endl; // sacar datos de Pepito;}47

DestructorC Función miembro de la clase cuyoobjetivo es liberar memoria obtenida demanera dinámica. En C tiene el mismo nombre que laclase, pero precedido por el símbolo (AltGr 4).En Java y Eiffel (con garbage collectors)son métodos finalize()TCoche:: TCoche(){// los string autoinvocan// a su destructorcuenta km 0;l gaso 0.0;consumo med 0;}Es único, no recibe ningún argumento ni devuelve ningún tipo de dato(ni siquiera void). Se suele definir como público.Se invoca automáticamente cuando se libera la memoria de un objeto Variables automáticas: al salir de ámbitoint Suma() {TVector a; .}Llamándolo explicitamentea. TVector();Variables dinámicas: se deben liberar siempre explícitamenteTVector *a new TVector;delete a; a NULL;48

Ejemplo Uso de Constructores y DestructoresTrazas#include iostream.h #include stdlib.h #include string class Traza {public:Traza(string s):texto(s){cout "Entrando en " texto endl;}; Traza(){cout "Saliendo de " texto endl;};private:string texto;};class Dummy {public:Dummy(){Traza t("Constructor Dummy");} Dummy(){Traza t ("Destructor Dummy");}int getX() const{Traza t("Método getX Dummy");if (.){Traza t(“cond x en método getX dummy”);.}}private:int x;¿Cuál será la salida del programa? ¿Cómo};eliminaríais la traza?int main () {Dummy d;d.getX();}49

Forma canónica ortodoxa de una Clase Todas las clases deberían definir al menos cuatro funcionesimportantes Constructor por defectoConstructor de copiaOperador de asignaciónDestructorOperaciones definidas por defecto en C 50

Indice ClasesObjetosAtributosOperacionesUML y el diagrama de clasesConstructores y destructoresPropiedades constantes y de clase en C Relaciones entre objetosDiseño O.O.51

Atributos, métodos y objetosconstantes Atributos constantes: Se inicializan en el constructor//Declaraciónclass Image {public:Image (const int w, const int h);private:const int width; const int height;//.};//Definición Image::Image (const int w, const int h) : width(w), height(h) {.}: Métodos constantes: Consultas o servicios selectores.Los objetos constantes sólo pueden invocar servicios constantes.Pueden coexistir una versión constante y otra no constante del mismo método. Los objetos no constantes invocan a la versión no constante y los objetos constantesinvocan a la versión constante.52

EjerciciosUso de const ¿Compilan los siguientes ejemplos? ¿Funcionan bien?class SinDMConstantes{ //Clase sin datos miembro constantesprivate:int x;int y;public:SinDMConstantes (int x 0, int y 0){x x;y y;}// 1?SinDMConstantes (const int x, const int y){x x;y y;} //2?SinDMConstantes(const int x 0, const int y 0){this- x x; this- y y;}; //3?};int main(){//VARIABLES CONSTANTESconst int i; i 0; //4?const int i 0; //5?}53

EjerciciosUso de constclass ConDMConstantes{private:const int x 0; // 6?const int y; //7?public:ConDMConstantes(const int x 0, const int y 0){this- x x; this- y y;};//8?ConDMConstantes (const int x, const int y):x(x),y(y){};//9?int getx(){return x;};//10a: Hay algún conflicto?int getx() const {return x;}; //10b: Se puede eliminar un getx? Cuál?void setx(const int v) {x v;}; //11void setx (const int v) const {x v;}; //12}int main(){ConDMConstantes c;const ConDMConstantes c2;cout c.getx() endl;//13a: A quién llama?cout c2.getx() endl;//13b: A quién llama?c.setx(4);}54

EjerciciosUso de atributos estáticos Suponed que, sobre la claseEmpleado, cuya especificación enUML es la presentada en la Fig. 1,queremos realizar un programa que,además de lo especificado en laclase, cuente el número total deempleados que tiene la empresa.¿Cómo lo haríais?1.2.3.4.Variable globalAtributo normalAtributo de clase (estático) públicoAtributo de clase privado¿Cuál es la mejor opción?¿Qué problema hay con las otras ing ):StringcalcularLNif(String):Char55

EjerciciosUso de atributos estáticos Escribid la declaración en C de la nueva Clase Empleadosiguiendo tres alternativas: Variable global Variable estática pública Variable estática privadaEn todos los casos,implementad Constructor,Destructor y , en caso de sernecesario, la operacióngetNumEmpleados(): intEmpleado-NIF:String-nombre:String-dir:String ):StringcalcularLNif(String):Char56

Ejercicios: uso de atributos estáticosAlternativa I: variables globalesclass Empleado{publicvoid Empleado();int SetNombre(string n);.privatestring nombre; };int numEmpleados 0; //Variable globalint main(){Empleado juanito;numEmpleados ;//Incremento variableEmpleado erQueManda;numEmpleados ; }57

Ejercicios: uso de atributos estáticosModelado UML Alternativa IIEmpleado-NIF:String-nombre:String-dir:String numEmpleados: int ):StringcalcularLNif(String):Char//Empleado.hclass Empleado{public:bool setNIF( string n);string getNIF();bool setNombre( string n);string getNombre();bool setDir( string n);string getDir();char calcularLNif (String num);static int numEmpleados;private:string NIF;string nombre;string dir;};58

Ejercicios: uso de atributos estáticosAlternativa II: Variable estática pública//Empleado.h con funciones inlineclass Empleado {public:Empleado(string n "No Name",string id "000-00-0000"): nombre(n), ident(id){numEmpleados ;} Empleado() {numEmpleados--;}string getNombre() const {return nombre;}void setNombre(string name) {nombre name;}string getNIF() const {return ident;}void setNIF(string id) {ident id;}static int numEmpleados;private:string nombre;string NIF;}; ¿Garantizaría esta declaración de clase que la variable numEmpleados estásiempre en un estado consistente (es decir, refleja exactamente el número deobjetos de la clase Empleado que coexisten en la aplicación?)59

Ejercicios: uso de atributos estáticosAlternativa II en acciónint Empleado::numEmpleados 0;int main(){Empleado jefe(“AAA","123");Empleado *aliasJefe &jefe;cout “Cuenta: " Empleado::numEmpleados endl;cout "Cuenta: " jefe.numEmpleados endl;cout "Cuenta: " aliasJefe- numEmpleados endl;Empleado programador(“BBB","123");Empleado *aliasProg &programador;cout "Cuenta: " Empleado::numEmpleados endl;cout "Cuenta: "

5 Clase Partes de la Definición Identificador de Clase: nombre Propiedades Atributos o variables: datos necesarios para describir los objetos (instancias) creados a partir de la clase La combinación de sus valores determina el ESTADO de un objeto Roles: relaciones que una clase establece con otras clases Servicios, operaciones, métodos (funciones miembro en C ): acciones

Related Documents:

El nombre verdadero de la programaci on Una concepci on de ensenanza de la programaci on para la sociedad de la informaci on Pablo E. Mart nez L opez*, Eduardo A. Bonelli**, and Federico A. Sawady O’Connor*** Universidad Nacional de Quilmes Cuando sepas re

ca principal es que forma un entorno de an alisis estad stico para la manipulacion de datos, su c alculo y la creaci on de gr a cos. En su aspecto Rpuede considerarse como otra implementaci on del lenguaje de programaci on S, con la particularidad de que es un software GNU, General

2º 615000224 Fundamentos de seguridad 3 OB Mª. Ángeles Mahillo García 4º 615000301 Fundamentos de economía y empresa 6 B Paula Fernández Arias 4º 615000302 Probabilidad y Estadística 6 B Félix Rincón de Rojas 4º 615000303 Fundamentos de

PROGRAMACIÓN DE FUNDAMENTOS DE ARTE II. DEPARTAMENTO DE GEOGRAFÍA E HISTORIA: CURSO ACADÉMICO 2019-2020 3 2. Marco legal del currículo LOMCE La programación de Fundamentos del Arte II de 2º de Bachillerato se adapta a la Ley Orgánica 8/2013, de 9 de diciembre,

PROGRAMACIÓN DE FUNDAMENTOS DE ARTE I. DEPARTAMENTO DE GEOGRAFÍA E HISTORIA: CURSO ACADÉMICO 2019-2020 5 2. Marco legal del currículo LOMCE La programación de Fundamentos del Arte I de 1º de Bachillerato se adapta a la Ley Orgánica 8/2013, de 9 de diciembre,

ARTÍCULO DE REVISIÓN/REVIEW ARTICLE Fundamentos de la tecnología biofloc (BFT). Una alternativa para la piscicultura en Colombia. Una revisión Fundamentals of bioflocs technology (BFT). An alternative for fish farming in Colombia. A review. Fundamentos da bioflocos tecnologia (BFT). Uma alternativa para a piscicultura na Colômbia. Uma .

Diego Monferrer Tirado - ISBN: 978-84-695-7093-7 Fundamentos de marketing - UJI - DOI: http://dx.doi.org/10.6035/Sapientia74 Fundamentos de marketing

¶Indice Presentaci¶on xix Tema I Algoritmos e introducci¶on a Pascal 1 Cap¶‡tulo 1 Problemas, algoritmos y programas 3 1.1 Soluci¶on de problemas mediante .