elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programacion orientada a objetos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programacion orientada a objetos  (Leído 2,851 veces)
edwinabril1992

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Programacion orientada a objetos
« en: 9 Octubre 2013, 06:18 am »

Hola disculpen podrianme ayudar esque tengo q hacer un programa que ingrese las latitudes con las temperaturas pero en cualquier orden que el usuario desee de ahicalcular el promedio de cada latitud, calcular el promedio por hemisferio,y calcular cual de los hemisferios es el mas calido.......... si me prodrian ayudar.........
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#define N 100
class puntos
{
    public:
    float temp,latitud;
    int n;
    void leer();
    void mostrar();
    int cantidad();
};
void puntos::leer()
{

    cout<<"\nIngrese la latitud : ";
    cin>> latitud;
    cout<<"Ingrese la temperatura : ";
    cin>> temp;
    cout<<"\n";

};
void puntos::mostrar()
{
    cout<<"Temperatura : ";
   cout<< temp;
    cout<<"  Latitud : ";
    cout<< latitud;
    cout<<"\n";
};
int puntos::cantidad()
{
    cout<<"Ingrese el # de puntos : ";
    do
       cin>> n;
    while(n<1||n>N);
    return(n);
};


class centro
{
    public:
    void leer(puntos v[],int n);
    void mostrar(puntos v[],int n);
    void pormedio_latitud(puntos v[], int n);
    void pormedio_hemisferio(puntos v[], int n);
    void mas_calido(puntos v[], int n);
};
void centro::leer(puntos v[],int n)
{
    cout<<"Ingrese los datos del Centro de Investigacion\n";

    for(int c=0;c<n;c++)
    {
      v[c].leer();
    }
};
void centro::mostrar(puntos v[],int n)
{
    cout<<"\n";
    for(int c=0;c<n;c++)
    {
      v[c].mostrar();
    }
};

/*void centro:: pormedio_latitud(puntos v[], int n)
{
    float s=0;
    int k=0;
    for(int c=0;c<n;c++)
    {
        for(int d=0;d<n;d++)
        {
         if(v[c].mostrar()=v[d])
      {
          k++;
          s=s+v[d];
      }
      }
  cout<< s/k ;
  s=0;
  k=0;
 }
};*/
void main()
{
    clrscr();
    centro x;
    puntos w;
    puntos v[N];
    int n;
    n=w.cantidad();
    x.leer(v,n);
    x.mostrar(v,n);
    getch();
}


En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: Programacion orientada a objetos
« Respuesta #1 en: 11 Octubre 2013, 00:04 am »

Pon el código entre las etiquetas "code" que así se vera mucho mejor  :silbar:

Que error te da?

Saludos


En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programacion orientada a objetos
« Respuesta #2 en: 11 Octubre 2013, 09:24 am »

Tu código presenta algunos problemas de diseño:

1. Las variables de una clase deberían ser privadas.

Esto es así porque uno de los objetivos que se persigue con la programación orientada a objetos es la encapsulación, que entre otras cosas intenta que el acceso al estado de un objeto ( sus variables ) pase a través de determinados filtros que garanticen su consistencia.

Dejar las variables en public permite que desde cualquier parte del código se pueda modificar su valor sin rendir cuentas a nadie, lo que podría desembocar en un mal funcionamiento del código.

2. Las clases que "almacenan" información no deberían tener interfaz de usuario

Este punto básicamente intenta que tu código sea lo más versátil posible. Imagínate que un buen día decides que tu programa funcione en un entorno gráfico... te va a tocar reescribir la mitad de tus clases para que en vez de trabajar con la consola pasen a utilizar la interfaz gráfica.

Es mejor que, por ejemplo, la clase "puntos" únicamente se preocupe por almacenar los puntos y que sea alguna otra clase, o código del main, la que se encargue de requerir los datos al usuario y almacenarlos en "puntos".

3. Si quieres almacenar una serie de valores, necesitas vectores.

Esto te ha quedad claro pero a medias... no tiene mucho sentido que "puntos" almacene el número de puntos y no almacene los puntos en sí... desde mi punto de vista sería más lógico que v[] estuviese en "puntos". Entre otras cosas N no tiene sentido por sí misma ( porque no tienes los valores ) y v[] tampoco ( porque no sabes cuántos puntos son.

Un detalle a anotar en este apartado es que, dado que estás en c++, quizás deberías decantarte por el uso de la clase "vector"... ya puestos a programar en c++ aprende a sacarle todo el partido.

Además, si haces uso de la clase "vector", te puedes ahorrar el uso de "n".

4. Los nombres de las variables son gratuítos

Lo comento porque tener variables con nombres tan identificativos como "n" o "v" es muy cutre. Usa nombres descriptivos, te ayudarán a identificar mejor lo que hacen las variables.

Vaaaale si, me puedes decir que en este programa lo entiendes... pero si quieres te paso un código fuente de 1000 líneas con todas las variables con nombres tipo a, b, c, ... y el mismo con nombres válidos... a ver cuál entiendes mejor.

5. Una clase, si no tiene variables, o es una clase con utilidades, o está mal planteado el diseño.

Si revisas el código te darás cuenta de que la clase "centro" no es capaz de hacer nada por sí misma... todos sus miembros necesitan los mismos parámetros... n y v. Esto te está indicando algunas cosas:

* Reafirma que n y v deberían estar juntas ( por ejemplo en "puntos" ). De hecho, si estuviesen en "puntos" te ahorrarías un parámetro en todos los miembros de "centro".
* Lo que hace "centro" podría estar implementado en "puntos" sin problema.
* Todos los miembros de "centro" son utilidades

6. Los includes de c++ no llevan .h

Los includes por defecto de las librerías de c++ van sin extensión. Te recomiendo no añadir esas extensiones porque entonces te arriesgas a que tu código no sea portable. Básicamente es porque los .h de la stl de c++ no es algo que venga con el estándar.

7. SIEMPRE hay que inicializar las clases.

Es un requisito que ahorra muchos problemas futuros. Las clases, por definición, disponen de constructores... úsalos para inicializar todas las variables miembro de la clase.

Una variable sin inicializar ( sobretodo si son punteros ) puede suponer un problema complicado de resolver, ya que te va a fallar muy lejos del origen del problema, por lo que solucionarlo te puede llevar bastante tiempo.

Resumen

Para no apabullar solo con datos, te propongo una arquitectura algo más acorde con buenas prácticas de programación:

Código
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. enum Hemisferio
  5. {
  6.  Ninguno,
  7.  HemisferioNorte,
  8.  HemisferioSur
  9. };
  10.  
  11. class Punto
  12. {
  13.  public:
  14.    Punto( ); // Constructor por defecto
  15.  
  16.    float GetLatitud( ) const;
  17.  
  18.    float GetTemperatura( ) const;
  19.  
  20.    void SetLatitud( float latitud );
  21.  
  22.    void SetTemperatura( float temperatura );
  23.  
  24.  private:
  25.  
  26.    float latitud;
  27.    float temperatura;
  28. };
  29.  
  30. class Centro
  31. {
  32.  public:
  33.    Centro( );
  34.  
  35.    const std::vector< Punto >& GetPuntos( ) const;
  36.  
  37.    // Calculo de los promedios de temperatura por latitud
  38.    // devuelve un vector de puntos en el que la temperatura es la temperatura promedio
  39.    std::vector< Punto > PromediosLatitud( ) const;
  40.  
  41.    // Calculo de los promedios de temperatura por hemisferio
  42.    // devuelve un vector de temperaturas con dos elementos. El primero corresponde al hemisferio norte y el segundo al sur.
  43.    std::vector< float > PromediosHemisferio( ) const;
  44.  
  45.    void SetPuntos( const std::vector< Punto >& puntos );
  46.  
  47.    // Indica cual es el hemisferio mas calido.
  48.    Hemisferio HemisferioMasCaliente( ) const;
  49.  
  50.  private:
  51.  
  52.    std::vector< Punto > puntos;
  53. };

Y ahora parte de la implementación:


EI: la implementacion que la haga el, acordate que aca no hacemos tareas.
« Última modificación: 11 Octubre 2013, 10:39 am por eferion » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programacion orientada a objetos en php, ide
PHP
wizache 2 4,668 Último mensaje 11 Marzo 2008, 02:44 am
por [ Alberto]
programacion orientada a objetos con C#
.NET (C#, VB.NET, ASP)
Bleach@lex 3 5,403 Último mensaje 21 Abril 2012, 19:55 pm
por Bleach@lex
Programacion orientada a objetos
Programación C/C++
cazagavilan 4 3,752 Último mensaje 21 Abril 2012, 10:55 am
por cazagavilan
Programacion orientada a objetos
Programación C/C++
edwinabril1992 2 2,511 Último mensaje 9 Octubre 2013, 08:47 am
por eferion
¿Qué es la programación orientada a objetos? « 1 2 »
Programación General
Linton 13 6,555 Último mensaje 6 Febrero 2014, 08:14 am
por El Benjo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines