{{attachment:resumen-poo.png|attachment:resumen-poo.png}} ---- '''Diagrama de ejemplo.''' {{attachment:diagrama_clases2.png|attachment:diagrama_clases2.png}} [[attachment:solucion2.zip|Códigos fuente C++.]] '''programa.cpp''' {{{#!highlight c++ /* * Compilación: $ make * Ejecución: $ ./programa */ #include #include #include "Proteina.h" #include "Cadena.h" #include "Aminoacido.h" #include "Atomo.h" #include "Coordenada.h" void print_proteina (Proteina p) { cout << endl; cout << "ID: " << p.get_id() << " Nombre: " << p.get_nombre() << endl; for (Cadena c: p.get_cadenas()) { cout << "Cadena: " << c.get_letra() << endl; for (Aminoacido a: c.get_aminoacidos()) { cout << "\tAminoacido: " << a.get_nombre() << ":" << a.get_numero() << endl; for (Atomo at: a.get_atomos()) { cout << "\t\tAtomo: " << at.get_nombre() << ":" << at.get_numero() << " [" << at.get_coordenada().get_x() << ", " << at.get_coordenada().get_y() << ", " << at.get_coordenada().get_z() << "]" << endl; } } } } /* */ int main (int argc, char **argv) { list proteinas; // instancia una proteina. Proteina p1 = Proteina("1rmd", "RAG1 DIMERIZATION DOMAIN"); // la agrega a la lista. proteinas.push_back(p1); // instancia una cadena. Cadena a = Cadena("A"); // instancia y agrega aminoacidos a la cadena. Aminoacido r = Aminoacido("CIS", 1); // instancia atomo. Atomo at = Atomo("CA", 1, 2.3, 3.3, 2.2); // agrega el átomo al aminoacido. r.add_atomo(at); // agrega otro átomo. r.add_atomo(Atomo("N", 2, 1.1, 2.1, 2.5)); a.add_aminoacido(r); a.add_aminoacido(Aminoacido("ALA", 2)); a.add_aminoacido(Aminoacido("HIS", 3)); // agrega la cadena a la proteína. p1.add_cadena(a); // crea otra cadena. Cadena b = Cadena("B"); // agrega aminoacidos a la cadena. b.add_aminoacido(Aminoacido("CYS", 5)); b.add_aminoacido(Aminoacido("CYS", 15)); b.add_aminoacido(Aminoacido("TYR", 3)); // agrega otra cadena a la proteína. p1.add_cadena(b); print_proteina(p1); return 0; } }}} '''Proteina.h ''' {{{#!highlight c++ #ifndef PROTEINA_H #define PROTEINA_H #include #include using namespace std; #include "Cadena.h" class Proteina { private: string id; string nombre; list cadenas; public: /* constructores */ Proteina (string id, string nombre); /* métodos get and set */ string get_nombre(); string get_id(); void set_nombre(string nombre); void set_id(string id); void add_cadena(Cadena cadena); list get_cadenas(); }; #endif }}} '''Proteina.cpp''' {{{#!highlight c++ /* */ #include using namespace std; #include "Proteina.h" /* constructores */ Proteina::Proteina (string id, string nombre) { this->nombre = nombre; this->id = id; } /* métodos get and set */ string Proteina::get_nombre() { return this->nombre; } string Proteina::get_id() { return this->id; } void Proteina::set_nombre(string nombre) { this->nombre = nombre; } void Proteina::set_id(string id) { this->id = id; } void Proteina::add_cadena(Cadena cadena) { this->cadenas.push_back(cadena); } list Proteina::get_cadenas() { return this->cadenas; } }}} '''Cadena.h''' {{{#!highlight c++ #ifndef CADENA_H #define CADENA_H #include #include using namespace std; #include "Aminoacido.h" class Cadena { private: string letra; list aminoacidos; public: /* constructores */ Cadena (string letra); /* métodos get and set */ string get_letra(); list get_aminoacidos(); void set_letra(string letra); void add_aminoacido(Aminoacido aminoacido); }; #endif }}} '''Cadena.cpp''' {{{#!highlight c++ /* */ #include using namespace std; #include "Cadena.h" /* constructores */ Cadena::Cadena (string letra) { this->letra = letra; } /* métodos get and set */ string Cadena::get_letra() { return this->letra; } void Cadena::set_letra(string letra) { this->letra = letra; } void Cadena::add_aminoacido(Aminoacido aminoacido) { this->aminoacidos.push_back(aminoacido); } list Cadena::get_aminoacidos() { return this->aminoacidos; } }}} '''Aminoacido.h''' {{{#!highlight c++ #ifndef AMINOACIDO_H #define AMINOACIDO_H #include #include using namespace std; #include "Atomo.h" class Aminoacido { private: int numero; string nombre; list atomos; public: /* constructores */ Aminoacido (string nombre, int numero); /* métodos get and set */ string get_nombre(); int get_numero(); void set_nombre(string nombre); void set_numero(int numero); void add_atomo(Atomo atomo); list get_atomos(); }; #endif }}} '''Aminoacido.cpp''' {{{#!highlight c++ /* */ #include using namespace std; #include "Aminoacido.h" /* constructores */ Aminoacido::Aminoacido (string nombre, int numero) { this->nombre = nombre; this->numero = numero; } /* métodos get and set */ string Aminoacido::get_nombre() { return this->nombre; } int Aminoacido::get_numero() { return this->numero; } void Aminoacido::set_nombre(string nombre) { this->nombre = nombre; } void Aminoacido::set_numero(int numero) { this->numero = numero; } void Aminoacido::add_atomo(Atomo atomo) { this->atomos.push_back(atomo); } list Aminoacido::get_atomos() { return this->atomos; } }}} '''Atomo.h''' {{{#!highlight c++ #ifndef ATOMO_H #define ATOMO_H #include using namespace std; #include "Coordenada.h" class Atomo { private: string nombre; int numero; Coordenada coordenada; public: /* constructores */ Atomo (string nombre, int numero, float x, float y, float z); /* métodos get and set */ string get_nombre(); int get_numero(); void set_nombre(string nombre); void set_numero(int numero); Coordenada get_coordenada(); }; #endif }}} '''Atomo.cpp''' {{{#!highlight c++ /* */ #include using namespace std; #include "Atomo.h" /* constructores */ Atomo::Atomo (string nombre, int numero, float x, float y, float z) { this->nombre = nombre; this->numero = numero; this->coordenada = Coordenada(x, y, z); } /* métodos get and set */ string Atomo::get_nombre() { return this->nombre; } int Atomo::get_numero() { return this->numero; } void Atomo::set_nombre(string nombre) { this->nombre = nombre; } void Atomo::set_numero(int numero) { this->numero = numero; } Coordenada Atomo::get_coordenada() { return this->coordenada; } }}} '''Coordenada.h''' {{{#!highlight c++ #ifndef COORDENADA_H #define COORDENADA_H #include using namespace std; class Coordenada { private: float x; float y; float z; public: /* constructores */ Coordenada (); Coordenada (float x, float y, float z); /* métodos get and set */ void set_x(float x); void set_y(float y); void set_z(float z); float get_x(); float get_y(); float get_z(); }; #endif }}} '''Coordenada.cpp''' {{{#!highlight c++ /* */ #include using namespace std; #include "Coordenada.h" /* constructores */ Coordenada::Coordenada () {} Coordenada::Coordenada (float x, float y, float z) { this->x = x; this->y = y; this->z = z; } /* métodos get and set */ void Coordenada::set_x(float x) { this->x = x; } void Coordenada::set_y(float y) { this->y = y; } void Coordenada::set_z(float z) { this->z = z; } float Coordenada::get_x() { return this->x; } float Coordenada::get_y() { return this->y; } float Coordenada::get_z() { return this->z; } }}} '''Makefile''' {{{#!highlight c++ prefix=/usr/local CC = g++ CFLAGS = -g -Wall SRC = programa.cpp Proteina.cpp Cadena.cpp Aminoacido.cpp Atomo.cpp Coordenada.cpp OBJ = programa.o Proteina.o Cadena.o Aminoacido.o Atomo.o Coordenada.o APP = programa all: $(OBJ) $(CC) $(CFLAGS)-o $(APP) $(OBJ) clean: $(RM) $(OBJ) $(APP) install: $(APP) install -m 0755 $(APP) $(prefix)/bin uninstall: $(APP) $(RM) $(prefix)/bin/$(APP) }}} '''Compilación.''' {{{ $ make g++ -c -o programa.o programa.cpp g++ -c -o Proteina.o Proteina.cpp g++ -c -o Cadena.o Cadena.cpp g++ -c -o Aminoacido.o Aminoacido.cpp g++ -c -o Atomo.o Atomo.cpp g++ -c -o Coordenada.o Coordenada.cpp g++ -g -Wall -o programa programa.o Proteina.o Cadena.o Aminoacido.o Atomo.o Coordenada.o }}} '''Ejecución.''' {{{ $ ./programa ID: 1rmd Nombre: RAG1 DIMERIZATION DOMAIN Cadena: A Aminoacido: CIS:1 Atomo: CA:1 [2.3, 3.3, 2.2] Atomo: N:2 [1.1, 2.1, 2.5] Aminoacido: ALA:2 Aminoacido: HIS:3 Cadena: B Aminoacido: CYS:5 Aminoacido: CYS:15 Aminoacido: TYR:3 }}}