Novedades Desafíos Papers y H-Zine Proyectos Foro
foros de discusión

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Ayuda con poliformismo, POO en dev-c++
j0lvr
post Oct 6 2008, 02:04 PM
Post #1


Miembro
***


Group: Hackerss Member
Posts: 53
Joined: 25-September 08
From: Colombia
Member No.: 5,572



hola compañeros necesito definir con conceptos basicos que es poliformismo he leido mucho tutorial y he definido lo siguiente: El poliformismo es la presencia de dos o más variantes heredables para una misma característica que coexisten dentro de una clase...

COMO POR EJEMPLO:

El operador suma de base de datos. Aunque a primera vista la expresión C= A+B, siendo A y B bases de datos, nos pudiera parecer una extraordinaria simplificación, nos conduce a la pregunta: ¿Qué es la suma de una base d datos?

Consideremos varias posibilidades:

Introducción de registros: Lo que exige que A y B tengan la misma estructura.

Unión de campos: Aquellos campos que aparezcan en B pero no en A serán añadidos a C

¿Alguna de estas dos opciones es verdaderamente una suma? Es decir ¿Cumple las propiedades conmutativa, asociativa, de elemento neutro, etc.? ¿Qué ocurre si sumo dos bases de datos con estructuras distintas?

Como puede observar, la definición de un operador sobre un tipo complejo de datos, intentando utilizar identificadores de operadores de datos simples, puede tener resultados impredecibles.

Una de las ventajas más importantes, sin entrar en la redefinición de operadores es permitir la realización de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan. Gracias a la encapsulación y el polimorfismo, aunque se utilicen los mismos nombre con las operaciones en dos clases distintas, el programa reconoce a que clase se aplica durante la ejecución.

Como se podrá observar el polimorfismo y la encapsulación de datos están íntimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolución que ha supuesto la introducción de los lenguajes orientados a objetos dentro de la programación.

Espero que me entientan ... ahora necesito que me ayuden con sus opiniones y si estoy equivocado corrijanme. ok

Go to the top of the page
 
+Quote Post
Ironic
post Oct 6 2008, 02:49 PM
Post #2


Adicto a Hackerss
Group Icon


Group: Root Admin
Posts: 1,443
Joined: 7-July 07
From: Buenos Aires, Argentina
Member No.: 2,688



No querras decir polimorfismo??
Poliformismo suena algo que tiene diferentes formas... en cambio polimorfismo es algo que puede ser diversas cosas...

http://es.wikipedia.org/wiki/Polimorfismo_...tada_a_objetos)

El ejemplo ese que tomaste la verdad que no te ayuda mucho... porque se mezclaron al explicarte..

Pero basicamente el poliformismo, entre otras cosas, habla de la sobre carga de funciones...

Usando la herencia que poseen los objetos, encontramos lo siguiente:
CODE
Interfaz Animal
          String Nombre;
          String HacerRuido();
End Interfaz

Ahora tenemos las clases Perro, Gato y Pez, E implementamos las interfaces de Animal
CODE
Class Perro : Animal
    Public String Nombre {
        return "Perro";
    }
    Public String HacerRuido() {
        return "Guau";
    }
End Class

Class Gato : Animal
    Public String Nombre {
        return "Gato";
    }
    Public String HacerRuido() {
        return "Miauuu";
    }
End Class

Class Pez : Animal
    Public String Nombre {
        return "PescaoDeth";
    }
    Public String HacerRuido() {
        return "Blublu";
    }
End Class

AHora si tu tuvieras la siguiente funcion
CODE
Function HazloLlorar(Animal victima)
{
    Console.Writeline(victima.Nombre + " hace " + victima.HacerRuido());
}

y en un main pones:
CODE
public static void Main(string[] args)
{
    HazloLlorar(new Perro());
    HazloLlorar(new Gato());
    HazloLlorar(new Pez());
}

Obtendrias:
QUOTE
Perro hace Guau
Gato hace Miauuu
PescaoDeth hace Blublu


De esta manera, puedes hacer una funcion que reciba la clase "padre", pero el metodo que se ejecutara correspondera al de la instancia.
Asi reusas codigo y te evitas de reescribir todo por solo una cosita

/Edit:
Ah, si es Poliformismo no tengo ni idea que es...


--------------------
Mi blog: http://www.ironicnet.com
Mi fotolog: http://www.fotolog.com/ironicnet_com

Cualquier cosa: ironic@ironicnet.com
Msn: ironic@ironicnet.com

Registrate en Bux.to y sumate unos dolares mensuales!
No te hace millonario, pero ayuda...

Go to the top of the page
 
+Quote Post
j0lvr
post Oct 7 2008, 07:02 PM
Post #3


Miembro
***


Group: Hackerss Member
Posts: 53
Joined: 25-September 08
From: Colombia
Member No.: 5,572



Gracias ironic muy buena explicacion esta mejor que mi profe de programacion-->

De paso te realizo otra consulta lo que pasa es que hoy empezamos a ver bases de datos y necesito adelantar mis conocimientos y no para impresionar para ser el !mejor ¡ y nos mandaron a hacer un trabajo relacionado con "un diccionario de datos"
Go to the top of the page
 
+Quote Post
Soul Lost
post Oct 10 2008, 09:54 AM
Post #4


Un poco Geek
******


Group: Hackerss Member
Posts: 1,607
Joined: 22-March 06
From: UnderHouse
Member No.: 8



QUOTE(j0lvr @ Oct 7 2008, 08:02 PM) *
Gracias ironic muy buena explicacion esta mejor que mi profe de programacion-->

De paso te realizo otra consulta lo que pasa es que hoy empezamos a ver bases de datos y necesito adelantar mis conocimientos y no para impresionar para ser el !mejor ¡ y nos mandaron a hacer un trabajo relacionado con "un diccionario de datos"


Jajajaj, este tipo laugh.gif laugh.gif laugh.gif .


--------------------
Siempre hay algo nuevo que aprender

Nuevo blog: www.soullost.org

Guías,Tutoritales,Howtos,Articulos. Bajo Licencia: CreativeCommons
Go to the top of the page
 
+Quote Post
Chocolate
post Jan 3 2009, 07:47 AM
Post #5


Recién llegado
*


Group: Hackerss Member
Posts: 8
Joined: 3-January 09
From: Mexico
Member No.: 6,763



si lo que dice la persona del primer mensaje es cierto, entonces el que puso los codigos de abajo esta mal

por que dice que en una clase, hay 2 o mas variables que heredan la misma caracteristica, eso es una sobre carga de operadores, no poliformismo y no son sinonimos.

This post has been edited by Chocolate: Jan 3 2009, 07:48 AM


--------------------
Go to the top of the page
 
+Quote Post
Ironic
post Jan 3 2009, 11:55 PM
Post #6


Adicto a Hackerss
Group Icon


Group: Root Admin
Posts: 1,443
Joined: 7-July 07
From: Buenos Aires, Argentina
Member No.: 2,688



Tiene razon chocolate, termine explicando la herencia y no el polimorfismo... que bobo...

La sobrecarga de funciones sirve principalmente para la semantica...
EJEMPLO LARGO:
Es decir, hagamos de cuenta que tenemos nuestra clase Camion :
CODE
public class Camion : Vehiculo
{
    public void CargarMaterial(object material)
    {
        if (material == typeof(Arena))CargarArena((Arena)material);
        if (material == typeof(Tierra))CargarTierra((Tierra)material);
        if (material == typeof(Comida))CargarComida((Comida)material);
        if (material == typeof(Cemento)) {
            Granito granito = (Granito)material;
            Agua agua = (Agua)material;
            CargarAguaYGranito(agua, granito)
        }
    }
    private void CargarArena(Arena material)
    {
        this.load("\Solido\Lote" + material.loteId  + ".xml");
    }
    private void CargarTierra(Tierra material)
    {
        this.load("\Solido\Lote" + material.loteId  + ".xml");
    }
    private void CargarAgua(Agua material)
    {
        this.Impermeabilizar();
        this.load("\Liquido\Lote" + material.loteId  + ".xml");
    }
    private void CargarAguaYGranito(Agua material, Granito granito)
    {
        this.Impermeabilizar();
        this.load("\Liquido\Lote" + material.loteId  + "_cemento.xml");
    }
}
Camion truck = new Camion();
truck.CargarMaterial(proveedor.getMaterial());

Ahora usando sobrecarga podemos usar:
CODE
public class Camion : Vehiculo
{
    private void Cargar(Arena material)
    {
        this.load("\Solido\Lote" + material.loteId  + ".xml");
    }
    private void Cargar(Tierra material)
    {
        this.load("\Solido\Lote" + material.loteId  + ".xml");
    }
    private void Cargar(Agua material)
    {
        this.Imperbealizar();
        this.load("\Liquido\Lote" + material.loteId  + ".xml");
    }
    private void Cargar(Cemento material)
    {
        Granito granito = material.Granito;
        Agua agua = material.Agua;
        Cargar(agua, granito);
    }
    private void Cargar(Agua material, Granito granito)
    {
        this.Impermeabilizar();
        this.load("\Liquido\Lote" + material.loteId  + "_cemento.xml");
    }
    
}
Camion truck = new Camion();
truck.Cargar(proveedor.getMaterial());


Ejemplo Corto
CODE
////////// USANDO POLIMORFISMO
public class Client
{
    IPAddress DefaultAddress = new IPAddress("127.0.0.1");
    int DefaultPort = 80;
    public void Connect()
    {
        Connect(DefaultAddress, DefaultPort, string.Empty, string.Empty);
    }
    public void Connect(IPAddress address)
    {
        Connect(address, DefaultPort, string.Empty, string.Empty);
    }
    public void Connect(IPAddress address, int port)
    {
        Connect(address, port, string.Empty, string.Empty);
    }
    public void Connect(IPAddress address, int port, string username, string password)
    {
        this.Socket = new Socket();
        this.Socket.Address = address;
        this.Socket.Port = port;
        this.Socket.Username = username;
        this.Socket.Password = password;
        this.Socket.Connect();
    }
}

////////// SIN USAR POLIMORFISMO
public class Client
{
    IPAddress DefaultAddress = new IPAddress("127.0.0.1");
    int DefaultPort = 80;
    public void Connect()
    {
        this.Socket = new Socket();
        this.Socket.Address = DefaultAddress;
        this.Socket.Port = DefaultPort;
        this.Socket.Username = string.Empty;
        this.Socket.Password = string.Empty;
        this.Socket.Connect();
    }
    public void ConnectWithIp(IPAddress address)
    {
        this.Socket = new Socket();
        this.Socket.Address = address;
        this.Socket.Port = DefaultPort;
        this.Socket.Username = string.Empty;
        this.Socket.Password = string.Empty;
        this.Socket.Connect();
    }
    public void ConnectWithIpAndPort(IPAddress address, int port)
    {
        this.Socket = new Socket();
        this.Socket.Address = address;
        this.Socket.Port = port;
        this.Socket.Username = string.Empty;
        this.Socket.Password = string.Empty;
        this.Socket.Connect();
    }
    public void ConnectWithAuthentication(IPAddress address, int port, string username, string password)
    {
        this.Socket = new Socket();
        this.Socket.Address = address;
        this.Socket.Port = port;
        this.Socket.Username = username;
        this.Socket.Password = password;
        this.Socket.Connect();
    }
}


--------------------
Mi blog: http://www.ironicnet.com
Mi fotolog: http://www.fotolog.com/ironicnet_com

Cualquier cosa: ironic@ironicnet.com
Msn: ironic@ironicnet.com

Registrate en Bux.to y sumate unos dolares mensuales!
No te hace millonario, pero ayuda...

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

- Lo-Fi Version Time is now: 7th January 2009 - 01:26 PM