---
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

- 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 -> {});
```