O que significa" contrato " de uma classe

estou a ler o Livro a linguagem de programação Java. No capítulo que explica o método de prevalecendo, diz:

Tornar um método de anulação (na subclasse) menos acessível do que na super classe violaria o contrato da superclasse ...

o texto no seu conjunto é compreensível. A minha única pergunta é: Qual é o contrato da superclasse? O que significa o contrato para uma classeJava ?

Author: Erick Robertson, 2011-12-16

8 answers

Um contrato numa classe Java é semelhante a um contrato no mundo real-em termos não técnicos:

É um acordo que a classe exporá certos métodos, certas propriedades e certos comportamentos.

Mais técnico, de aqui : (negrito adicionado por mim)

Não seria bom se todas as classes Java que você usa, incluindo a sua o próprio, cumpriu as suas promessas? Na verdade, não seria bom Se tu ... na verdade sabia exatamente o que uma determinada classe promessas? Se você concordar, leia no [...]

Desenho Por Contrato

A técnica de desenvolvimento de software por contrato (DBC) garante software de alta qualidade, garantindo que cada componente de um sistema está à altura das suas expectativas. Como um programador que usa o DBC, você indica contratos de componentes como parte da interface do componente. o contrato especifica o que esse componente espera dos clientes e o que os clientes podem espera.
 29
Author: David, 2014-05-04 19:20:26

O contrato de tipo (classe, interface, enum) é o, bem, o contrato Este tipo promete cumprir. Diz:

  • quais são os parâmetros aceitáveis para o construtor e/ou métodos deste tipo;
  • o que deve e/ou não deve esperar que este tipo esteja a fazer. Por exemplo, pode afirmar que você deve esperar que esta classe seja Segura ou não segura por fio;
  • o que são invariantes suportados por este tipo. Por exemplo, método do tipo addData(float) de MathAverage A classe que calcula a média da sua entrada pode indicar que cada vez que a sua chamada para add(float) é devolvida, deverá esperar que a chamada para MathAverage.getAverage() devolva a média correcta da entrada actual.
  • de um modo geral, o seu tipo pode especificar qualquer restrição que os subtipos devem seguir. Por exemplo, ele pode dizer "nenhum método deste tipo deve levar mais de um segundo para executar".

O contrato é especificado em forma livre em javadoc do tipo. Existem algumas ferramentas / práticas para aplicar execução de contratos, mas eles são limitados, exatamente porque o contrato pode ser arbitrário, ou, mesmo, auto-contraditório, em caso de erro do programador.

Uma vez que a subtipagem(subclassing) pode estender/modificar o comportamento dos métodos do supertipo de forma arbitrária, também pode violar algumas partes do Contrato do supertype. Exemplo disso seria estender HashMap, que Aceita null valores e Chaves, com alguma implementação que proíbe null valores em chamadas para os seus métodos.

Outros o aspecto importante do contrato de tipo é que o subtipo pode ter um contrato mais forte (cobrindo subconjuntos de restrições no contrato de tipo), mas não pode ter mais fraco (cobrindo o conjunto de restrições no contrato de tipo). Por exemplo, se o método do seu tipo 'doX(n)' promete tomar O(n) (linear) tempo, 'DOX(n)' no subtipo pode tomar O(1) (constante) tempo, mas não pode tomar O(n^2) tempo.

 5
Author: Victor Sorokin, 2011-12-16 18:02:26

O "contrato" de uma classe é a sua interface pública ou, pelo menos, a interface se for apresentada a outras classes que não a si própria.

Isto significa que inclui quaisquer elementos (métodos, campos, construtores, etc.) que outras classes podem usar.
 3
Author: cdeszaq, 2011-12-16 16:22:21

Significa que o método que sobrepõe um método numa classe ou interface pai deve comportar-se da forma que o contrato define.

Caso contrário, o resultado não é definido.

 2
Author: jontro, 2011-12-16 16:22:09

Há muitos princípios aos quais você deve se conformar ao programar em java, ou em qualquer linguagem de programação. Os princípios dependem da linguagem de programação que você está usando. Você pode saber mais sobre o contrato em Design por página da Wikipédia por contrato

 0
Author: Mansuro, 2011-12-16 16:26:49

Em termos simples significa que quebrarias as condições da superclasse se tornasses o código de anulação menos acessível

 0
Author: sum2000, 2011-12-16 16:27:44
É uma expressão que vem da ideia de contratos no "mundo real"." Basicamente, se quebrares o contrato com uma turma, não é necessário comportares-te da maneira que esperas. Do outro lado, é uma promessa da classe que se você seguir as regras que ele estabelece, ele vai se comportar da maneira que sua API diz.

Um exemplo comum de um contrato em Java é sobrepor {[[0]} quando hashCode() é sobreposto. Dois objetos que são considerados iguais devem, por contrato, tem o mesmo código de hash. É possível escrever um código sintaticamente correto que não obedece a isso, mas pode não funcionar corretamente, e isso é culpa do programador que quebrou o contrato.

 0
Author: Pops, 2011-12-16 16:31:10

O contrato de uma classe ou interface Java ou qualquer outra linguagem OO, geralmente refere-se à exposição pública de métodos (ou funções) e as propriedades (ou campos ou atributos) de que a interface de classe , juntamente com quaisquer comentários ou documentação que se aplicam a esses métodos públicos e propriedades.

No caso da relação entre uma classe e uma subclasse, quaisquer métodos ou propriedades protegidas seriam considerados "publicamente expostos", no sentido em que estão expostos para a subclasse.

 0
Author: dgvid, 2011-12-16 16:49:40