neste post, vamos cobrir casos de uso para o implementa, estende-se e, com palavras-chave. Implementa V/s estende v / S com palavras-chave no dardo.
introdução
Se estiver a desenvolver uma aplicação de Flutter, deve ter visto muitos casos de uso para implementos, extensões e palavras-chave. Para alguém que nunca trabalhou com dardo antes, a diferença entre estas palavras-chave não é óbvio.
neste post, iremos em profundidade sobre estas palavras-chave para expandir a nossa compreensão de Flutter e dardo.
implementa é para forçar o comportamento Via Interface
em OOP, uma interface é algo que obriga a classe derivada a implementar uma lista de conjuntos de Campos e métodos públicos.
mas ao contrário de outras linguagens de programação tradicionais como C# e JAVA, Dart não tem tipos de interface explícitos. Cada classe, por padrão, define sua própria interface composta de Campos e métodos públicos. Assim, cada classe pode agir como uma interface no dardo.
usamos a palavra-chave implementa para implementar uma interface. Além disso, uma classe pode implementar várias interfaces.
No exemplo acima, a classe D implementa classes A, B e C, portanto, deve implementar os métodos públicos e campos de uma dessas classes.
além disso, uma vez que Dart não tem interfaces explícitas, nós usamos a classe abstrata como uma interface.
abstract class X { doX();} class Y implements X { @override doX() { // TODO: implement doX return null; }}
Extends Is For Sharing Behavior Via Inheritance
In OOP, inheritance implies sharing of behavior between classes. Não podemos compartilhar recursos com uma interface. Então, quando Implementamos uma aula, não podemos compartilhar o seu comportamento.
No exemplo acima, você pode ver que a classe B deve fornecer sua própria implementação de doA() método que o comportamento não é compartilhado.
Se quiser partilhar o comportamento nestas duas classes, deverá usar a palavra-chave extendida.
class A { doA() { print('A'); }}class B extends A { }main() { var b = B(); b.doA();}
no exemplo acima, uma vez que B estende A, você pode chamar o método doA() diretamente do objeto de B.
Ao contrário de implementar várias interfaces, Dart só suporta uma única herança. Então, você não pode estender a partir de várias classes.
class A { doA() { print('A'); }}class B { doB() { print('B'); }}// Not Allowed!class C extends A, B {}
com Is para Mixin
In OOP, uma mixin é uma classe que contém métodos para uso por outras classes. Ao contrário da abordagem de interface e herança, um mixin não tem que ser a classe pai dessas outras classes. assim, uma mistura não impõe restrição de uso nem restrição de tipo de forças.
normalmente irá colocar funções comuns dentro de uma mistura. No dardo, fazemos uso da mixin, usando a palavra-chave com.
Como mostrado no exemplo acima, a execução do mixin campos podem ser substituídas, se necessário. Além disso, uma classe pode usar várias mixinas.
algumas outras coisas para notar sobre Mixin
usando uma classe como uma Mixin
no dardo, uma classe também pode ser usada como mixin se a classe é menos construtor. Por exemplo, o código abaixo é válido.
class D { doD() { print('d'); }}class E with D {}main() { var e = E(); e.doD();}
mas este abaixo é inválido porque a classe D declara um construtor.
class D { D() { } doD() { print('d'); }}class E with D {}
impacting Mixin para tipos específicos
Você também pode impor uma mixin para ser utilizável para certas classes de tipos apenas usando a palavra-chave on ao definir a mixin.
mixin Z on D { doZ() { }}class D { doD() { print('d'); }}//Can't do this!class E with Z {}//Can do this!class F extends D with Z {}
Conclusion
neste post aprendemos sobre os casos de uso para implementos, extensões e com palavras-chave ao desenvolver aplicações de Flutter / Dart.
implementa V/S estende V/S com
para resumir o uso:
- implementa para reforçar comportamentos.
- Se Estende para compartilhar comportamentos de uma única classe.mixinas para partilha de comportamentos de vários tipos reutilizáveis.
aprender mais:
- Características da língua Dart
- aprender Flutter