Diferencias entre las revisiones 2 y 19 (abarca 17 versiones)
Versión 2 con fecha 2019-10-03 18:19:16
Tamaño: 32
Comentario:
Versión 19 con fecha 2019-10-03 20:58:53
Tamaño: 8823
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 1: Línea 1:
[[attachment:resumen-poo.png]] {{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 <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();
};
#endif
}}}
'''Proteina.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);
};
#endif
}}}
'''Cadena.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();
};
#endif
}}}
'''Aminoacido.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();
};
#endif
}}}
'''Atomo.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();
};
#endif
}}}
'''Coordenada.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)
}}}

attachment:resumen-poo.png


Diagrama de ejemplo.

attachment:diagrama_clases2.png

Códigos fuente C++.

programa.cpp

   1 /*
   2  * Compilación: $ make
   3  * Ejecución:   $ ./programa
   4  */
   5 #include <list>
   6 #include <iostream>
   7 #include "Proteina.h"
   8 #include "Cadena.h"
   9 #include "Aminoacido.h"
  10 #include "Atomo.h"
  11 #include "Coordenada.h"
  12 
  13 void print_proteina (Proteina p) {
  14     cout << endl;
  15 
  16     cout << "ID: " << p.get_id() << " Nombre: " << p.get_nombre() << endl;
  17 
  18     for (Cadena c: p.get_cadenas()) {
  19         cout << "Cadena: " << c.get_letra() << endl;
  20 
  21         for (Aminoacido a: c.get_aminoacidos()) {
  22             cout << "\tAminoacido: " << a.get_nombre() << ":" << a.get_numero() << endl;
  23 
  24             for (Atomo at: a.get_atomos()) {
  25                 cout << "\t\tAtomo: " << at.get_nombre() << ":" << at.get_numero() << " [" <<
  26                 at.get_coordenada().get_x() << ", " << at.get_coordenada().get_y() << ", " <<
  27                 at.get_coordenada().get_z() << "]" << endl;
  28             }
  29         }
  30     }
  31 }
  32 
  33 /*
  34  */
  35 int main (int argc, char **argv) {
  36     list<Proteina> proteinas;
  37 
  38     // instancia una proteina.
  39     Proteina p1 = Proteina("1rmd", "RAG1 DIMERIZATION DOMAIN");
  40 
  41     // la agrega a la lista.
  42     proteinas.push_back(p1);
  43 
  44     // instancia una cadena.
  45     Cadena a = Cadena("A");
  46     // instancia y agrega aminoacidos a la cadena.
  47     Aminoacido r = Aminoacido("CIS", 1);
  48     // instancia atomo.
  49     Atomo at = Atomo("CA", 1, 2.3, 3.3, 2.2);
  50     // agrega el átomo al aminoacido.
  51     r.add_atomo(at);
  52     // agrega otro átomo.
  53     r.add_atomo(Atomo("N", 2, 1.1, 2.1, 2.5));
  54 
  55     a.add_aminoacido(r);
  56     a.add_aminoacido(Aminoacido("ALA", 2));
  57     a.add_aminoacido(Aminoacido("HIS", 3));
  58 
  59     // agrega la cadena a la proteína.
  60     p1.add_cadena(a);
  61 
  62     // crea otra cadena.
  63     Cadena b = Cadena("B");
  64     // agrega aminoacidos a la cadena.
  65     b.add_aminoacido(Aminoacido("CYS", 5));
  66     b.add_aminoacido(Aminoacido("CYS", 15));
  67     b.add_aminoacido(Aminoacido("TYR", 3));
  68 
  69     // agrega otra cadena a la proteína.
  70     p1.add_cadena(b);
  71 
  72     print_proteina(p1);
  73 
  74     return 0;
  75 }

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();
};
#endif

Proteina.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);
};
#endif

Cadena.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();
};
#endif

Aminoacido.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();
};
#endif

Atomo.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();
};
#endif

Coordenada.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)

POO (última edición 2019-10-03 21:05:33 efectuada por AlejandroValdes)