Qual é a diferença entre especificação e implementação em ciência da computação? como esses dois podem ser claramente diferenciados em uma tese?

A especificação geralmente assume a forma de um documento que descreve

o que

o código deve executar, por exemplo, que tipo de opções de interface do usuário deve fornecer, que tipo de saída é esperado para determinadas entradas etc. O nível de detalhe da especificação é freqüentemente adaptado à complexidade do problema em que o código é destinado a resolver, e quais aspectos do design devem ser claramente entendidos pela equipe com bastante antecedência, em vez de serem deixados para o implementador quando chegar a hora de trabalhar nessa peça. Essa é uma arte, e ter a “quantidade certa” de especificação depende muito dos conjuntos de habilidades e da dinâmica de grupo da equipe do projeto, bem como de quanto tempo está disponível para escrever e refinar a especificação antes de iniciar a fase de implementação .

A implementação é exatamente isso: A modalidade real no código (e outros ativos, como som, arte, modelos 3D, se apropriado, etc.) que compreendem o produto final. Dependendo de como as coisas funcionam durante a implementação, pode ser necessário retornar ao documento de especificação e fazer atualizações com base na descoberta de que algumas das idéias iniciais não funcionam tão bem quanto o originalmente esperado, ou que são necessários esclarecimentos adicionais.

A diferenciação entre esses dois conceitos em uma tese escrita deve ser razoavelmente óbvia a partir da discussão acima.

Pense em uma casa. Se você tem a planta de uma casa, qualquer pessoa pode olhar para ela e ver como ela deve ser. Qualquer um pode pegar o projeto e construir uma casa que se encaixe no projeto. O blueprint é uma especificação. É um conjunto de regras (às vezes também chamado

um contrato

) que a casa pronta deve atender (ou cumprir). Por exemplo, a especificação pode incluir uma planta baixa, número de quartos, altura do teto, forma do telhado, localização de portas e janelas etc.

A casa final e real é análoga à implementação. Quando você o constrói, precisa cumprir os requisitos escritos nas especificações, mas pode escolher o que não for especificado. Se você criar duas casas, cada uma com uma marca distinta de telhas, cada uma com cores de parede diferentes etc., elas serão diferentes, mas ainda atenderão às especificações.

Outra coisa que você pode fazer, depois de ter uma especificação, é possível testar uma casa arbitrária e verificar se ela atende à especificação. Pode até acontecer que uma casa se encaixe, mesmo que não tenha sido construída com essa especificação específica em mente.

Por que isso é útil? Isso se chama separação de preocupações. Quando estou comprando a casa, só me preocupo com a planta e o número de quartos. Não me importo com a forma específica dos tijolos ou com a forma como os cabos correm nas paredes. Na minha perspectiva, casas com diferentes detalhes de implementação são

permutável

e

equivalente

.

E como isso é útil em software? Existem milhares de ratos diferentes. Se cada mouse fosse um produto completamente diferente, seria extremamente difícil oferecer suporte a todos eles. Mas como todos os mouses seguem o mesmo padrão USB (ou seja, especificação), você precisa suportar apenas um. Se o mouse quebrar, você poderá substituí-lo por um mouse diferente (ou seja, implementação), e ele ainda funcionará.