Diagrama de ejemplo.
programa.cpp
/*
* Compilación: $ make
* Ejecución: $ ./programa
*/
#include <list>
#include <iostream>
#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<Proteina> 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
#ifndef PROTEINA_H
#define PROTEINA_H
#include <list>
#include <iostream>
using namespace std;
#include "Cadena.h"
class Proteina {
private:
string id;
string nombre;
list<Cadena> 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<Cadena> get_cadenas();
};
#endifProteina.cpp
/*
*/
#include <iostream>
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<Cadena> Proteina::get_cadenas() {
return this->cadenas;
}Cadena.h
#ifndef CADENA_H
#define CADENA_H
#include <list>
#include <iostream>
using namespace std;
#include "Aminoacido.h"
class Cadena {
private:
string letra;
list<Aminoacido> aminoacidos;
public:
/* constructores */
Cadena (string letra);
/* métodos get and set */
string get_letra();
list<Aminoacido> get_aminoacidos();
void set_letra(string letra);
void add_aminoacido(Aminoacido aminoacido);
};
#endifCadena.cpp
/*
*/
#include <iostream>
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<Aminoacido> Cadena::get_aminoacidos() {
return this->aminoacidos;
}Aminoacido.h
#ifndef AMINOACIDO_H
#define AMINOACIDO_H
#include <list>
#include <iostream>
using namespace std;
#include "Atomo.h"
class Aminoacido {
private:
int numero;
string nombre;
list<Atomo> 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<Atomo> get_atomos();
};
#endifAminoacido.cpp
/*
*/
#include <iostream>
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<Atomo> Aminoacido::get_atomos() {
return this->atomos;
}Atomo.h
#ifndef ATOMO_H
#define ATOMO_H
#include <iostream>
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();
};
#endifAtomo.cpp
/*
*/
#include <iostream>
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
#ifndef COORDENADA_H
#define COORDENADA_H
#include <iostream>
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();
};
#endifCoordenada.cpp
/*
*/
#include <iostream>
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
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)