Como você avaliaria as habilidades de design orientado a objetos? [fechadas]

11

que tipo de idéias ou perguntas levaria você a determinar as habilidades de OOAD de uma pessoa.

Rohan Monga
fonte
Pergunte se eles pontuam seus i's.
Job

Respostas:

10

Você pode mostrar um design simples de OO de um problema simples e discutir o que ele faz, o que é bom e o que é ruim, se é flexível o suficiente, o que pode ser melhorado e como.

Se você precisar iniciar a discussão, pergunte o que a pessoa pensa sobre algum aspecto do código, mas não com uma pergunta inicial.

Importante é lembrar que a discussão é importante, não que você soubesse as respostas antes. Qualquer desenvolvedor decente deve ser capaz de apontar algo sobre o código que você nem pensava antes.

Guffa
fonte
Eu gosto desse método de entrevista em que é mais uma discussão do que uma sessão de perguntas e respostas.
Rohan Monga
5

Discuta um problema de design em aberto com a pessoa. Veja como ele / ela cria o modelo do sistema, que tipo de perguntas são feitas, como o design muda em resposta a novas informações.

Um ótimo exemplo - mencionado por Steve Yegge em uma de suas postagens no blog - é pedir à pessoa que crie um modelo de objeto para XML.

talonx
fonte
Você poderia me dar o link :)?
Rohan Monga
1
@bronzebeard - Aqui está - sites.google.com/site/steveyegge2/… . Na verdade, ele fala sobre OO modelagem HTML - mas acho que XML pode ser uma versão mais dura do que a pergunta :)
talonx
4

Ter um bom conhecimento de todos os padrões de design mais populares pode provar que o candidato realmente procurou soluções para seus problemas de design.

Ser capaz de discuti-los e saber quando aplicá-los ou não é uma boa indicação de que ele os entende.

Pedir a ele por exemplo usos em suas experiências passadas também pode ajudar.


fonte
Esse é um teste para saber como a sobrecarga funciona em C #, mas dificilmente um teste para as habilidades de design do OOAD.
user281377
Você está perfeitamente certo. Eu li sua pergunta rápido demais, eu mudo.
4
No entanto, você pode ter conhecimento de padrões de design e nunca ouviu falar do conceito. Eu estava usando coisas como cadeia de responsabilidade, observadores e controladores muito antes de saber que eles tinham nomes. Tenha cuidado para não supor que, porque alguém não sabe o nome de um padrão, ele não pode usá-lo com competência.
Michael K
@ Michael: sim, certamente é por isso que é melhor perguntar primeiro como resolver um determinado problema e depois falar sobre o nome real do padrão. Conheço muitas pessoas que usam o padrão de estratégia todos os dias e que não sabem que se chama assim. Eles apenas o "criaram" apenas pensando, como o grupo original de quatro fez. A diferença é que este último escreveu um livro sobre o assunto.
Observe que o Gang of Four obteve os padrões ao ver o código OO usado em outros projetos. De maneira alguma eles merecem crédito por qualquer um dos desenhos, apenas para reconhecê-los e descrevê-los de maneira consistente.
Macneil
3

Não faça um teste de vocabulário. "Definir herança" ou "nomear 3 recursos do design de OO" são perguntas que não lhe dizem nada sobre as habilidades do indivíduo, apenas quanto tempo desde a última vez que ele leu um livro didático. Eu conheci vários grandes programadores que usam essas habilidades todos os dias, mas que se sufocariam se solicitados a dar a definição formal.

AShelly
fonte
2

Solicitará que ele anote os objetos de negócios, classes e interfaces / métodos para uma sala ou qualquer outra entidade virtual

Gopi
fonte
2

Se possível, peça um código de amostra.

Caso contrário, encontre algum código de procedimento para usar como exemplo (ou algum código OO mal projetado) e, em seguida, pergunte a eles como eles o reprojetariam, generalizariam e melhorariam. Certifique-se de que o programa tenha um contexto extra, para que o novo design possa ser significativo.

Em última análise, o que você está testando-- design-- é subjetivo. Portanto, sua avaliação deve ser aberta para permitir várias boas soluções possíveis, e não apenas uma única. Em seguida, pense em possíveis alterações nos requisitos que forçariam uma alteração na interface: como eles lidam com isso?

Macneil
fonte
1

Leia o livro Head First Design Patterns. Todos os exemplos do livro começam com um problema orientado a objetos e acabam no padrão Design. Eles também dizem por que certos conceitos de OOP alcançarão resultados limitados e por que certos são melhores que outros.

Mesmo que um livro de Design Pattern esteja cheio de problemas do OOP :-)

Nerd
fonte
Não sei sobre isso, porque todos os exemplos do livro são especificamente para um padrão de design ou outro. Se você tem conhecimento teórico apenas o suficiente que você seria capaz de descobrir isso e que não reflete a aplicação pragmática
Rohan Monga
1

Comece simples: o que é OOP?

Você pode começar perguntando sobre as premissas básicas da OOP: abstração, polimorfismo, herança e encapsulamento. Boa comida para pensar para aquecê-los.

Dê a eles um problema

Em seguida, apresente a eles um problema que provavelmente envolverá padrões. Não é necessário nomear ou usar padrões, mas sua abordagem provavelmente renderá alguns se tiverem experiência na área.

Talvez validação dinâmica de entrada de texto. Você gostaria de poder validar o caractere de entrada por caractere para ver se é uma data, hora ou data e hora válidas no formato ISO8601. Você obtém uma cópia da sequência de entrada toda vez que uma tecla é pressionada e pode retornar um booleano para indicar se o texto permanece bom em pelo menos um dos formatos. Peça-lhes para conversar e esboçar um design usando os princípios de design OO.

Quando você termina de conversar sobre

  1. Controlador (aquele que aciona os eventos de mudança e avalia as respostas),
  2. Observador (os validadores respondem aos eventos de mudança),
  3. Estratégia (cada validador representa uma maneira diferente de determinar se a entrada é válida),

então você terá uma boa idéia se eles entenderem OOD.

Dê a eles o mesmo problema novamente, mas desta vez peça um design diferente

Agora, peça que eles redesenhem o sistema sem usar um padrão Observador (se o mencionaram) - eles podem optar por uma abordagem da Cadeia de Responsabilidade ou talvez um padrão de Comando. Você realmente não se importa com isso, sabe que eles têm uma compreensão razoável dos princípios envolvidos.

Mesmo que eles não adotem uma abordagem baseada em padrões, apenas ouvir a maneira como eles tentam dividir o problema em sua funcionalidade relacionada produzirá os resultados que você procura.

Gary Rowe
fonte
1

Costumo escolher um cenário do mundo real, algo bem conhecido por qualquer pessoa † e pedir que identifiquem as entidades; os atores envolvidos; que interações existem entre eles; onde características comuns poderiam ser abstraídas; quais propriedades precisam ser consideradas.

Sim, você pode pedir para eles se sentarem e desenharem UML, sim, você pode fazer perguntas sobre algumas especificações específicas de implementação de OOP para ver se elas podem "dar o fora".

Mas o que um empregador realmente precisa dentro de sua equipe é uma mente que entenda os conceitos envolvidos e possa aplicá-los ao que aparecer. Os detalhes podem ser aprendidos rapidamente, quando os conceitos são incorporados.


† Familiaridade profunda e ausência de conexão com o código ajudam: o uso de um banheiro pela família pela manhã; fazendo o jantar; uma linha de ônibus para o trabalho; a montagem de um carro.

Orbling
fonte
0

Algo que parece funcionar bastante bem e na verdade leva apenas alguns segundos: peça para que eles projetem um modelo de objeto. Não importa para quê. Pode ser absolutamente trivial. De fato, provavelmente deve ser trivial não arrastar o teste desnecessariamente.

Se a primeira coisa que escrevem é um objeto, eles já estão à frente de 99% de seus pares no entendimento do OO. Se a primeira coisa que escreverem for uma aula, peça-lhes que saiam e mandem o próximo candidato, e reflitam sobre o motivo pelo qual se chama OOP e não COP.

Jörg W Mittag
fonte
Enquanto eu entendo o que você quer dizer, acho que posso ter um pouco de cuidado em levar isso literalmente. Quando estou com soluções de design de "pensamento livre", costumo usar notações de classe UML, mesmo que não seja isso o que realmente quero dizer com diagramação.
Ken Henderson