Diferencias entre las revisiones 1 y 21 (abarca 20 versiones)
Versión 1 con fecha 2019-10-03 18:13:53
Tamaño: 30
Comentario:
Versión 21 con fecha 2019-10-03 21:02:02
Tamaño: 9020
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 1: Línea 1:
Escribe acerca de POO aquí. {{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 '''

{{{#!highlight c++

#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'''

{{{#!highlight c++

/*
 */

#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'''

{{{#!highlight c++

#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'''

{{{#!highlight c++

/*
 */

#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'''

{{{#!highlight c++

#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'''

{{{#!highlight c++
/*
 */

#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'''

{{{#!highlight c++

#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'''

{{{#!highlight c++
/*
 */

#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'''

{{{#!highlight c++
#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'''

{{{#!highlight c++
/*
 */

#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'''

{{{#!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)
}}}

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

   1 #ifndef PROTEINA_H
   2 #define PROTEINA_H
   3 
   4 #include <list>
   5 #include <iostream>
   6 using namespace std;
   7 #include "Cadena.h"
   8 
   9 class Proteina {
  10     private:
  11         string id;
  12         string nombre;
  13         list<Cadena> cadenas;
  14 
  15     public:
  16         /* constructores */
  17         Proteina (string id, string nombre);
  18 
  19         /* métodos get and set */
  20         string get_nombre();
  21         string get_id();
  22 
  23         void set_nombre(string nombre);
  24         void set_id(string id);
  25         void add_cadena(Cadena cadena);
  26         list<Cadena> get_cadenas();
  27 };
  28 #endif
  29 

Proteina.cpp

   1 /*
   2  */
   3 
   4 #include <iostream>
   5 using namespace std;
   6 #include "Proteina.h"
   7 
   8 /* constructores */
   9 Proteina::Proteina (string id, string nombre) {
  10     this->nombre = nombre;
  11     this->id = id;
  12 }
  13 /* métodos get and set */
  14 string Proteina::get_nombre() {
  15     return this->nombre;
  16 }
  17 string Proteina::get_id() {
  18     return this->id;
  19 }
  20 void Proteina::set_nombre(string nombre) {
  21     this->nombre = nombre;
  22 }
  23 
  24 void Proteina::set_id(string id) {
  25     this->id = id;
  26 }
  27 void Proteina::add_cadena(Cadena cadena) {
  28     this->cadenas.push_back(cadena);
  29 }
  30 list<Cadena> Proteina::get_cadenas() {
  31     return this->cadenas;
  32 }

Cadena.h

   1 #ifndef CADENA_H
   2 #define CADENA_H
   3 #include <list>
   4 #include <iostream>
   5 using namespace std;
   6 #include "Aminoacido.h"
   7 
   8 class Cadena {
   9     private:
  10         string letra;
  11         list<Aminoacido> aminoacidos;
  12     public:
  13         /* constructores */
  14         Cadena (string letra);
  15 
  16         /* métodos get and set */
  17         string get_letra();
  18         list<Aminoacido> get_aminoacidos();
  19 
  20         void set_letra(string letra);
  21         void add_aminoacido(Aminoacido aminoacido);
  22 };
  23 #endif
  24 

Cadena.cpp

   1 /*
   2  */
   3 
   4 #include <iostream>
   5 using namespace std;
   6 #include "Cadena.h"
   7 
   8 /* constructores */
   9 Cadena::Cadena (string letra) {
  10     this->letra = letra;
  11 }
  12 /* métodos get and set */
  13 string Cadena::get_letra() {
  14     return this->letra;
  15 }
  16 void Cadena::set_letra(string letra) {
  17     this->letra = letra;
  18 }
  19 void Cadena::add_aminoacido(Aminoacido aminoacido) {
  20     this->aminoacidos.push_back(aminoacido);
  21 }
  22 list<Aminoacido> Cadena::get_aminoacidos() {
  23     return this->aminoacidos;
  24 }

Aminoacido.h

   1 #ifndef AMINOACIDO_H
   2 #define AMINOACIDO_H
   3 #include <list>
   4 #include <iostream>
   5 using namespace std;
   6 #include "Atomo.h"
   7 
   8 class Aminoacido {
   9     private:
  10         int numero;
  11         string nombre;
  12         list<Atomo> atomos;
  13 
  14     public:
  15         /* constructores */
  16         Aminoacido (string nombre, int numero);
  17 
  18         /* métodos get and set */
  19         string get_nombre();
  20         int get_numero();
  21 
  22         void set_nombre(string nombre);
  23         void set_numero(int numero);
  24         void add_atomo(Atomo atomo);
  25         list<Atomo> get_atomos();
  26 };
  27 #endif
  28 

Aminoacido.cpp

   1 /*
   2  */
   3 
   4 #include <iostream>
   5 using namespace std;
   6 #include "Aminoacido.h"
   7 
   8 /* constructores */
   9 Aminoacido::Aminoacido (string nombre, int numero) {
  10     this->nombre = nombre;
  11     this->numero = numero;
  12 }
  13 /* métodos get and set */
  14 string Aminoacido::get_nombre() {
  15     return this->nombre;
  16 }
  17 int Aminoacido::get_numero() {
  18     return this->numero;
  19 }
  20 void Aminoacido::set_nombre(string nombre) {
  21     this->nombre = nombre;
  22 }
  23 void Aminoacido::set_numero(int numero) {
  24     this->numero = numero;
  25 }
  26 void Aminoacido::add_atomo(Atomo atomo) {
  27     this->atomos.push_back(atomo);
  28 }
  29 list<Atomo> Aminoacido::get_atomos() {
  30     return this->atomos;
  31 }

Atomo.h

   1 #ifndef ATOMO_H
   2 #define ATOMO_H
   3 #include <iostream>
   4 using namespace std;
   5 #include "Coordenada.h"
   6 
   7 class Atomo {
   8     private:
   9         string nombre;
  10         int numero;
  11         Coordenada coordenada;
  12 
  13     public:
  14         /* constructores */
  15         Atomo (string nombre, int numero, float x, float y, float z);
  16 
  17         /* métodos get and set */
  18         string get_nombre();
  19         int get_numero();
  20 
  21         void set_nombre(string nombre);
  22         void set_numero(int numero);
  23         Coordenada get_coordenada();
  24 };
  25 #endif
  26 

Atomo.cpp

   1 /*
   2  */
   3 
   4 #include <iostream>
   5 using namespace std;
   6 #include "Atomo.h"
   7 
   8 /* constructores */
   9 Atomo::Atomo (string nombre, int numero, float x, float y, float z) {
  10     this->nombre = nombre;
  11     this->numero = numero;
  12     this->coordenada = Coordenada(x, y, z);
  13 }
  14 /* métodos get and set */
  15 string Atomo::get_nombre() {
  16     return this->nombre;
  17 }
  18 int Atomo::get_numero() {
  19     return this->numero;
  20 }
  21 void Atomo::set_nombre(string nombre) {
  22     this->nombre = nombre;
  23 }
  24 void Atomo::set_numero(int numero) {
  25     this->numero = numero;
  26 }
  27 Coordenada Atomo::get_coordenada() {
  28     return this->coordenada;
  29 }

Coordenada.h

   1 #ifndef COORDENADA_H
   2 #define COORDENADA_H
   3 #include <iostream>
   4 using namespace std;
   5 
   6 class Coordenada {
   7     private:
   8         float x;
   9         float y;
  10         float z;
  11 
  12     public:
  13         /* constructores */
  14         Coordenada ();
  15         Coordenada (float x, float y, float z);
  16 
  17         /* métodos get and set */
  18         void set_x(float x);
  19         void set_y(float y);
  20         void set_z(float z);
  21         float get_x();
  22         float get_y();
  23         float get_z();
  24 };
  25 #endif
  26 

Coordenada.cpp

   1 /*
   2  */
   3 
   4 #include <iostream>
   5 using namespace std;
   6 #include "Coordenada.h"
   7 
   8 /* constructores */
   9 Coordenada::Coordenada () {}
  10 Coordenada::Coordenada (float x, float y, float z) {
  11     this->x = x;
  12     this->y = y;
  13     this->z = z;
  14 }
  15 /* métodos get and set */
  16 void Coordenada::set_x(float x) {
  17     this->x = x;
  18 }
  19 void Coordenada::set_y(float y) {
  20     this->y = y;
  21 }
  22 void Coordenada::set_z(float z) {
  23     this->z = z;
  24 }
  25 float Coordenada::get_x() {
  26     return this->x;
  27 }
  28 float Coordenada::get_y() {
  29     return this->y;
  30 }
  31 float Coordenada::get_z() {
  32     return this->z;
  33 }

Makefile

   1 prefix=/usr/local
   2 CC = g++
   3 CFLAGS = -g -Wall
   4 SRC = programa.cpp Proteina.cpp Cadena.cpp Aminoacido.cpp Atomo.cpp Coordenada.cpp
   5 OBJ = programa.o Proteina.o Cadena.o Aminoacido.o Atomo.o Coordenada.o
   6 APP = programa
   7 all: $(OBJ)
   8     $(CC) $(CFLAGS)-o $(APP) $(OBJ)
   9 clean:
  10     $(RM) $(OBJ) $(APP)
  11 install: $(APP)
  12     install -m 0755 $(APP) $(prefix)/bin
  13 uninstall: $(APP)
  14     $(RM) $(prefix)/bin/$(APP)

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