--- title: Técnicas avançadas em desenvolvimento de software tags: TADS, Semestre5, TecnicasAvancadasemDesenvolvimentoDeSoftware, Unicuritiba description: --- ### Técnicas avançadas em desenvolvimento de software # TADS #Tema 1 ###### Development patterns: ###### [Nesta seção: focados em java] * Singleton: objeto que pode ser instanciado apenas uma vez. - Como fazer um singleton: criar uma instância essática da própria classe, e um construtor privado, para que todo o acesso da classe seja a partir do getInstance: ```java= public class Example { private static Example instance; private Example() {} public static Example getInstance() { if (instance == null) { instance = new Example(); } return instance; } } ``` * Abstract class: Classe sem modelo, que possui atribuibuições genéricas (extendidas para classes mais específicas) * Factory: -- Visa abstrair a lógica de criação e instanciação de objetos em somente um local. Foca todas as -- Builder: um tipo de factory que permite criar atributos e características diretamente nos construtores. Pode ser usado em conjunto com uma factory. - Ex: VehicleByBuilder (Projeto das primeiras aulas) - classe para impedir a criação de vários construtores. Cria uma classe chamada Builder que, com os mesmos atributos da classe original, tem, nos sets, um ```return this```; ---> ! **Trabalho** para até o dia da prova: criar um builder para cada modelo de carro; E ao construir o carro diferenciar algum atributo entre dois modelos do mesmo carro (?) ------ # TADS #Tema 2 ###### Development patterns 2: - Facade: - Controle lógico para uma determinada feature - Visa abstrair a lógica de implementação de regras, reutilizando-as para impedir repetições. *(Classe abstrata vs Interface: Os métodos herdados da interface são de implementação ***obrigatória***)* - revisar!! --- # TADS #Tema 3 ###### Modelos de DP - MVC - Interação do usuário: View - Dados (transferência, manutenção, e..): Modelos - Controle do fluxo (funcionamento das ações e interações): Controller ![](https://i.imgur.com/ya8gamw.png) - MVVN - Possui uma interface entre modelos e views que convertem dados para a exibição deles na view. - Ao invés de um controlador, possui um sistema de conversão de dados. - ###### React - Biblioteca no java: RX Java -(Importação realizada na aula de projeto com Gradle + JavaRx): ```java= //build.gradle: dependencies { testCompile 'junit:junit:4.12' implementation "io.reactivex.rxjava3:rxjava:3.0.1" } ``` Implementação do projeto Java: - Objeto observável: possui três estados:: onNext, onComplete, onError; - Trabalho do tema: criar um jogo da velha. ```java= //Observable.just("hello world").subscribe(System.out::println); //estrutura observável, está notada de forma lambda (disponivel a partir do java 8) Observable<String> listaDeNomes = Observable.create(item ->{ item.onNext("Andre"); item.onNext("Diego"); }); listaDeNomes.subscribe(valor -> System.out.println(valor)); listaDeNomes.doOnNext(item -> {}); ```