---
# System prepended metadata

title: Técnicas avançadas em desenvolvimento de software
tags: [' Semestre5', ' TecnicasAvancadasemDesenvolvimentoDeSoftware', TADS, ' Unicuritiba']

---

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