Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Programacion orientada a objetos

Estas en el tema de Programacion orientada a objetos en el foro de C/C++ en Foros del Web. Estoy iniciando recién con la programación orientada a objetos pero no la entiendo bien en caso que clases y objetos algo que me recomienden o ...
  #1 (permalink)  
Antiguo 13/05/2014, 16:42
 
Fecha de Ingreso: mayo-2014
Ubicación: Puno-Puno-Puno
Mensajes: 1
Antigüedad: 10 años, 6 meses
Puntos: 0
Pregunta Programacion orientada a objetos

Estoy iniciando recién con la programación orientada a objetos pero no la entiendo bien en caso que clases y objetos algo que me recomienden o que me pueda orientar gracias
  #2 (permalink)  
Antiguo 13/05/2014, 17:08
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Programacion orientada a objetos

Estas preguntando un tema muy amplio. ¿Que tal buscar en google primero y luego preguntar los detalles que no entiendas?
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 13/05/2014, 19:43
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Programacion orientada a objetos

A ver te explico por encima, después te paso unos vídeos XD

Una cosa es la idea de lo que es un perro y otra totalmente distinta es un perro.
Una clase es la idea y un objeto es por ejemplo un perro de verdad.
Creamos un modelo o nos hacemos la idea de los que es un perro(CLASE), para después hacer copias(OBJETO) a partir de de la idea.

Como puede ser un perro(Idea)?
Bueno realmente en la programación un perro puede ser como tu quieras... puede hacer cosas que poco tienen que ver con un perro, puede volar o ser invisible pero en nuestra(mi idea) idea de un perro es que tenga un nombre, una edad, una raza y un nombre. Pero puede tener varias otras funciones que no vienen al caso hoy ;).
Así que una vez sabemos como queremos nuestro perro(tenemos la idea) pues haremos la clase...

Elegimos un nombre para la clase... perro mismo XD

Código C++:
Ver original
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.  
  5. class Perro { //<---Esto es la idea de lo que es un perro =D  
  6.     //La parte publica de Perro
  7.     public:
  8.     //Metodos constructores
  9.        
  10.         //Costructor por defecto
  11.         Perro( int unaEdad = 0, int unPeso  = 0, string unNombre = "No tiene nombre", string unaRaza  = "No tiene raza"   ){
  12.             suEdad   = unaEdad;
  13.             suPeso   = unPeso;
  14.             suNombre = unNombre;
  15.             suRaza   = unaRaza;
  16.         }
  17.        
  18.     //Metodos destructores
  19.         ~Perro(){} //destructor por defecto
  20.        
  21.     //metodos geters "obtener"
  22.         int    getEdad  ()const { return suEdad; }
  23.         int    getPeso  ()const { return suPeso; }
  24.         string getNombre()const { return suNombre; }
  25.         string getRaza  ()const { return suRaza;   }
  26.        
  27.     //Metodos seters "entrada de datos"
  28.         void setEdad  ( int unaEdad ) { suEdad = unaEdad; }
  29.         void setPeso  ( int unPeso  ) { suPeso = unPeso;  }
  30.         void setNombre( string unNombre ) { suNombre = unNombre; }
  31.         void setRaza  ( string unaRaza  ) { suRaza   = unaRaza;  }
  32.        
  33.     //Otros metodos
  34.         void ladrar(){ std::cout << "aroof roof!XD" << endl; }
  35.        
  36.     //La parte privada de perro"No podemos acceder desde fuera de la clase"
  37.     private:
  38.     //Atributos
  39.         int    suEdad;
  40.         int    suPeso;
  41.         string suNombre;
  42.         string suRaza; 
  43. }; //Fin de la idea perro "Esta es la clase no el objeto"
  44.  
  45. int main () {
  46.     system ( "MODE CON cols=100 lines=50" );
  47.  
  48.     //Ahora Creamos 2 objetos "Copias de la clase perro"
  49.     Perro miPerro;                             //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro
  50.     Perro otroPerro( 3, 7, "Rex", "Pitbull" ); //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro
  51.    
  52.     // Como ves aun que llame a la funcion getNombre() en ambos casos dan resultados distintos, son copias de la
  53.     //clase Perro pero tienen sus propios datos, como no he pasado los datos a miPerro a tomado los datos del constructor por defecto
  54.     //que tambien tenia parametros por defecto.
  55.     cout << miPerro.getNombre() << endl;
  56.     cout << otroPerro.getNombre() << endl;
  57.    
  58.     //Ponemos un nombre a miPerro
  59.     miPerro.setNombre("floriponcio");
  60.     cout << miPerro.getNombre() << endl;
  61.     miPerro.ladrar();
  62.    
  63.     cin.ignore();
  64. }
Aqui le puedes ver funcionando: http://codepad.org/AoIXOm1q

En esta pagina: http://v1.minidosis.org/C++/
Tienes vídeos buenísimos sobre clases: http://v1.minidosis.org/C++/Clases/
Este es el su canal de youtube: https://www.youtube.com/user/paueky/playlists

Aquí mas canales con vídeos sobre c++:
https://www.youtube.com/playlist?lis...A837BC005D3614
https://www.youtube.com/playlist?lis...34A65FD9DA6721

Te paso vídeos por que fue realmente donde me quito muchas dudas, pero aparte te recomiendo algún libro para iniciante y mucho foro para las dudas. ;)

  #4 (permalink)  
Antiguo 14/05/2014, 00:05
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Programacion orientada a objetos

Hola!
Muy buen aporte vangodp, muchas gracias.

Código C++:
Ver original
  1. //Ahora Creamos 2 objetos "Copias de la clase perro"
  2.     Perro miPerro;                             //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro
  3.     Perro otroPerro( 3, 7, "Rex", "Pitbull" ); //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro

No sabía que en C++, cuando se hacían herencias de clases, al hacer una herencia, se hacía inversa.
  #5 (permalink)  
Antiguo 14/05/2014, 13:16
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Programacion orientada a objetos

Cita:
No sabía que en C++, cuando se hacían herencias de clases, al hacer una herencia, se hacía inversa.
No lo pillo lo que tu dices con "...al hacer una herencia, se hacía inversa."

Lo único que hay ahí es la clase y los objetos creados desde ella
Si quieres puedo poner algún ejemplo sobre herencia.

  #6 (permalink)  
Antiguo 14/05/2014, 23:46
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Programacion orientada a objetos

Claro, yo pensaba que esto sería así:

Código C++:
Ver original
  1. //Ahora Creamos 2 objetos "Copias de la clase perro"
  2.     miPerro Perro;                             //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro
  3.     otroPerro( 3, 7, "Rex", "Pitbull" ) Perro; //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro

pero es así:

Código C++:
Ver original
  1. //Ahora Creamos 2 objetos "Copias de la clase perro"
  2.     Perro miPerro;                             //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro
  3.     Perro otroPerro( 3, 7, "Rex", "Pitbull" ); //Esto es un objeto creado apartir de la clase Perro, realmente es una copia de Perro

osea pensaba que cuando se copiaba un objeto era de la forma de arriba (1°), como hacen las variables, primero va la variable a la que se le asignarán los valores y segundo la variable que contiene los valores

Cita:
Si quieres puedo poner algún ejemplo sobre herencia.
Si estaría bueno un ejemplo de herencias!

Gracias amigo!

PD: Recomiendo que actualicen sus vavegadores a Internet Explorer 9, está bastante bueno, antés tenía un problema cuando copiaba algún texto, por ejemplo un código o alguna frase de algún usuario para usarla en una cita, pero cuando hacía eso, se re clavaba el navegador (cargaba y cargaba....) después de un rato volvía a estar bien normalmente.
Les aconsejo esto porque varios usuarios vi que tienen windows 7 igual que yo, seguro les pasa lo mismo.
  #7 (permalink)  
Antiguo 15/05/2014, 05:24
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Programacion orientada a objetos

Código C++:
Ver original
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4. class Perro;
  5. class Perro {
  6.     public:
  7.         //Metodos constructores
  8.        
  9.         //Costructor por defecto
  10.         Perro () {
  11.             suEdad   = 0;
  12.             suPeso   = 0;
  13.             suNombre = "No tiene nombre";
  14.             suRaza   = "No tiene raza";
  15.         }
  16.        
  17.         //Constructor con parametros
  18.         Perro ( int unaEdad, int unPeso, string unNombre, string unaRaza ) {
  19.             suEdad   = unaEdad;
  20.             suPeso   = unPeso;
  21.             suNombre = unNombre;
  22.             suRaza   = unaRaza;
  23.         }
  24.        
  25.         //Constructor de copia
  26.         Perro ( Perro &unPerro ) {
  27.             suEdad   = unPerro.suEdad;
  28.             suPeso   = unPerro.suPeso;
  29.             suNombre = unPerro.suNombre;
  30.             suRaza   = unPerro.suRaza;
  31.         }
  32.        
  33.         //Metodos destructores
  34.         ~Perro() {} //destructor por defecto
  35.        
  36.         //metodos geters "obtener"
  37.         int    getEdad () const { return suEdad; }
  38.         int    getPeso () const { return suPeso; }
  39.         string getNombre() const { return suNombre; }
  40.         string getRaza () const { return suRaza;   }
  41.        
  42.         //Metodos seters "entrada de datos"
  43.         void setEdad ( int unaEdad ) { suEdad = unaEdad; }
  44.         void setPeso ( int unPeso ) { suPeso = unPeso;  }
  45.         void setNombre ( string unNombre ) { suNombre = unNombre; }
  46.         void setRaza ( string unaRaza ) { suRaza   = unaRaza;  }
  47.        
  48.         //Otros metodos
  49.         void ladrar() { std::cout << "aroof roof!XD" << endl; }
  50.        
  51.         //La parte privada de perro"No podemos acceder desde fuera de la clase"
  52.     private:
  53.         //Atributos
  54.         int    suEdad;
  55.         int    suPeso;
  56.         string suNombre;
  57.         string suRaza;
  58. }; //Fin de la idea perro "Esta es la clase no el objeto"
  59.  
  60. int main () {
  61.     system ( "MODE CON cols=100 lines=50" );
  62.    
  63.  
  64.     Perro miPerro;                              //Creamos copia de la clase Perro "Constructor por defecto"
  65.     Perro otroPerro ( 3, 7, "Rex", "Pitbull" ),Dog(otroPerro); //Creamos copia de la clase Perro "Constructor con parametros" ¡Y! Creamos otro Perro "Dog" usando el constructor de copias que hemos implementado ;)
  66.  
  67.     cout << miPerro.getNombre() << endl;        //miPerro no tiene ningun dato aparte de los de por defecto "No tiene Nombre"
  68.     cout << otroPerro.getNombre() << endl;      //otroPerro si tiene nombre y se llama Rex
  69.    
  70.     //Con es constructor de copia puedes hacerlo ;)
  71.     miPerro = otroPerro;                        //Mi perro ha ganado todos los datos de otroPerro "Constructor de copia"
  72.  
  73.     cout  << miPerro.getNombre() << "se llama miPerro, ahora tambien se llama Rex y es identico a otroPerro: " << endl;//Ahora miPerro tiene nombre que es igual al de otroPerro "Rex"
  74.    
  75.     cout  << "Este es Dog que es una copia de otroPerro y su nombre es: " << Dog.getNombre() << endl;
  76.    
  77.     //Puedes hacer copias del Perro que te apetesca usando el Constructor de copias.
  78.     //Algunos ejemplos
  79.     Perro unDog2(otroPerro);
  80.     Perro papaNatas = otroPerro;
  81.     Perro hotDog;
  82.     hotDog = otroPerro;
  83.     cout  << "unDog2: " << unDog2.getNombre() << endl;
  84.     cout  << "papaNatas: " << papaNatas.getNombre() << endl;
  85.     cout  << "hotDog: " << hotDog.getNombre() << endl;
  86.     cin.ignore();
  87. }

Poder se puede pero si no invocas al constructor de copias te va entrar los Datos por defecto por que es como hacer eso:

int num1 = 10, num2;

No tiene por que num2 tomar el valor de num1 a menos que haga eso:

int num1 = 10, num2 = num1;

recuerda que cpp hace la asignacion de de arriba abajo y de izquierda a derecha lo lo que esto: int num1 = 10, num2 = num1;

va en ese orden:

1º num1=10
2º num2=num1

Asi funciona mas o menos:
Perro otroPerro ( 3, 7, "Rex", "Pitbull" ),Dog(otroPerro);

Si le creo asi:
Perro otroPerro ( 3, 7, "Rex", "Pitbull" ),Dog;
no tiene por que ganar el valor de la izquierda de la coma ;), para eso necesitas un constructor de copias.
Si no elijes un constructor recuerda que va pillar siempre "El constructor por defecto" XDDD



https://www.youtube.com/watch?v=MDXbFIlVEb8

Etiquetas: c++, clases, objetos, poo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:22.