/ / Polimorfismo é a única solução - polimorfismo

O polimorfismo é a única solução - polimorfismo

O título diz tudo.

Eu preciso de um cenário onde o polimorfismo seja a única solução. Eu tenho visto muitos segmentos com benefícios de polimorfismo, mas eu acho, cenário em que a solução com apenas polimorfismo está faltando.

Outra maneira de fazer a mesma pergunta é:

"Qual é a origem do polimorfismo?"

Respostas:

0 para resposta № 1

Sua pergunta está de alguma forma aberta à interpretação.

Deixe-me tentar responder a sua pergunta, primeiro desenhe uma linha entre:

  1. Polimorfismo como um conceito abstrato
  2. Polimorfismo diretamente suportado por linguagens de programação e compiladores como C ++, Java, C #, etc

O exemplo padrão para o polimorfismo pode ser umferramenta de gráficos de vetor como, e. Corel Draw, Inkscape. Suponha que você gostaria que o usuário pudesse desenhar várias formas geográficas diferentes (quadrado, triângulo, círculo) em uma tela.

Eu agora sugiro que o CONCEITO de polimorfismo éa única solução para esse problema e, ao mesmo tempo, é claro que você será capaz de escrever uma solução em qualquer linguagem de programação, incluindo aquelas que não oferecem um mecanismo integral de polimorfismo (como, por exemplo, C).

O polimorfismo explícito se tornará evidente na forma de várias condições "se".

Assim: O CONCEITO de Polimorfismo é sempre a única solução, se:

  1. você tem várias cópias de entidades que compartilham um subconjunto de comportamento comum, mas também cada classe tendo algum comportamento especial especial para essa classe apenas
  2. na compilação você não sabe o que classe concreta será necessária, apenas em tempo de execução

Sua pergunta sobre a "origem" dePolimorfismo. O conceito de polimorfismo é algo eminente, como Primes, pelo menos me sinto assim. O suporte implícito do polimorfismo em linguagens de programação começou com o C ++ no início dos anos 90, os primeiros programas WYSWG como o Corel Draw e Word e O livro (isso é claro, uma observação pessoal)

Abaixo um exemplo.

// example WITH implicit polymorphism
abstract class PolyGeometricEntity
{
public int center_x__mm;                    // commen superset
public int center_y__mm;                    // commen superset
public void move(int d_x__mm, int d_y_mm)   // commen superset
{
center_x__mm += d_x__mm;
center_y__mm += d_y_mm:
}

public abstract int area();                 // commen superset on abstract level, but specialized at implementation level
public abstract void draw();               // commen superset on abstract level, but specialized at implementation level
}

class CircleEntity : PolyGeometricEntity
{
public override int area()
{
// circle specific
return 1;
}
public override void draw()
{
// draw a circle
}
}

class TriangleEntity : PolyGeometricEntity
{
public override int area()
{
// triangle specific
return 1;
}
public override void draw()
{
// draw a triangle
}
}


class PolyCanvas
{
List<PolyGeometricEntity> entities = new List<PolyGeometricEntity>();

void CreateEntity(string toCreateClass)
{
// assume that code is called by the ui
// you do not know what the user decides at runtime
// Polymorphism "starting" now:
PolyGeometricEntity toCreate = null;
if (toCreateClass == "c") { toCreate = new CircleEntity(); }
else if (toCreateClass == "t") { toCreate = new TriangleEntity(); }
entities.Add(toCreate);
}

void ReDraw()
{
foreach (PolyGeometricEntity toDraw in entities)
{
toDraw.draw(); // polymorphism in action!
}
}
}


// example WITHOUT implicit polymorphism
abstract class NonPolyGeometricEntity
{
public int center_x__mm;                    // commen superset
public int center_y__mm;                    // commen superset

public string entityClass;

public void move(int d_x__mm, int d_y_mm)   // commen superset
{

}

// explicid Polymorphism, but concept of Polymorphism still present
public int area()
{
if (entityClass == "c")
{
// return area of cirlce
}
else if (entityClass == "t")
{
// return area of triangle
}
return 0;
}
public void draw()
{
if (entityClass == "c")
{
// draw area of cirlce
}
else if (entityClass == "t")
{
// draw area of triangle
}
}
}





class NonPolyCanvas
{
List<NonPolyGeometricEntity> entities = new List<NonPolyGeometricEntity>();

void CreateEntity(string toCreateClass)
{
// assume that code is called by the ui
// you do not know what the user decides at runtime
NonPolyGeometricEntity toCreate = null;
toCreate.entityClass = toCreateClass;   //explit polymorphism
entities.Add(toCreate);
}

void ReDraw()
{
foreach (NonPolyGeometricEntity toDraw in entities)
{
toDraw.draw();
}
}
}