Da modelagem ao Código - Parte I

Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Da modelagem ao Código - Parte I

Mensagem por bernardino »

  • Importância da modelagem na OO
  • Transformando modelagem em código
  • Fundamentos da linguagem Java
  • Atividade
Relevância

A modelagem dos objetos representa uma importante fase na Engenharia de Software que impacta positivamente o processo de desenvolvimento pois fornece uma estratégia para:
  • identificar/refinar os requisitos de negócios
  • planejar o crescimento futuro do sistema (escalar)
  • discutir processos do negócio
  • validar teorias
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Da modelagem ao Código - Parte I

Mensagem por bernardino »

### Problema: Modelagem do sistema para WestStar Marinas

> *West Star Marinas é uma rede de doze marinas que oferecem serviços aos proprietários de barcos, incluindo:
Manutenção e reparo de barcos, motores e equipamentos marítimos;
Venda de barcos, motores e acessórios marítimos;
Desenvolvimento de um sistema para integrar todas as marinas em uma rede unificada.*
>

### Capturando Requsitos de Negócios:

> A West Star Marinas precisa de um sistema para gerir e integrar suas operações em todas as suas unidades
>

**Requisitos funcionais:**

- O sistema deve permitir o agendamento de serviço de manutenção e reparo de: barcos, motores e equipamentos marítimos
- O sistema deve oferecer um módulo de vendas de barcos, motores e acessórios
- O sistema deve permitir o gerenciamento de clientes, armazenando dados como nome, contato e histórico de serviços
- O sistema deve suportar a gestão de estoque, controlando produtos disponíveis e até movimentações entre estoques das unidades
- O sistema deve permitir a gestão de funcionarios, registrando seus dados e atribui~]pes dentro das marinas
- O sistema deve registrar ordens de serviço, associadas a clientes, funcionarios e serviços prestados (padronizado para todas as unidades)

**Requisitos de qualidade**:

- O sistema deve ser escalável, permitindo a gerir novas marinas
- O sistema deve ter alta disponibilidade, garantindo o funcionamento contínuo para todas as unidades da rede
- O sistema deve possuir uma interface responsiva, acessível de qualquer dispositivo (smartphones, tablets)
- O sistema deve fazer uso de controle de acessos baseado em funções/papeis (clientes, funcionários e administradores)
- O banco de dados deve garantir consistência dos dados entre todas as marinas

### Planejamento do crescimento futuro

> A West Star Marinas pensa em expandir cada vez mais seu negócio e com isso o sistema deve estar pronto para acompanhar os negócios a longo prazo
>

Ao desenvolver o sistema é preciso considerar:

- Arquitetura do sistema (distribuída?)
- Banco de dados (centralizado?)
- Infraestrutura (nuvem?)
- API RESTful (integrável?)

### Identificação dos principais processo de negócio

> A partir da breve descrição do que a West Star Marinas faz, é possível compreender alguns dos processos essenciais para o sistema representar o negócio real:
>
- Cadastro de cliente
- O cliente fornece os dados pessoais e cria uma conta no ssitema
- o sistema armazena o histórico de transações do cliente (serviços e compras)
- Agendamento de serviços
- O cliente solicita disponibilidade de serviço de manutenção
- o sistema verifica os horarios e profissionais disponíveis
- o serviço é agendado e registrado no sistema
- um dia antes é enviado uma mensagem para confirmar a presença do cliente
- Venda de produtos
- O cliente escolhe barcos, motores ou acessórios
- o sistema verifica o estoque
- pagamento é processado e o estoque atualizado (para todas as marinas)
- Gestão de funcionarios
- Funcionarios são cadstrados e atribuídos a marinas específicas
- o sistema gerencia suas atividades e responsabilidades (funções)

### Validando teorias e cenários de teste

> Ao entender os processos de negócio é possível criar um fluxo onde o interesse é reproduzir passo a passo uma interação no sistema que seja crucial para o negócio, de tal forma que cada passo executado poderá revelar um defeito existente no sistema
>
- Cenário: Agendamento de Serviço
- Pré-condições: o Cliente possui uma conta ativa no sistema e há funcionarios disponíveis para executar o serviço desejado
- Passos:
- o cliente acessa o sistema e seleciona a opção “Agendar Serviço”
- Escolhe o tipo de serviço
- Seleciona uma marina e escolhe um horário disponível
- confirma a solicitação e recebe um número de agendamento
- o sistema registra a solicitação e designa um funcionario para executar
- Resultado esperado: O sistema exibe uma confirmação da reserva e o serviço aparece na agenda do funcionário

### Diagrama de Classe

> A partir de toda a discussão criada em cima do contexto do negócio, com muita definição dos processos é possível desenhar/diagramar um modelo que poderá representar não só as entidades principais, mas também como elas se associam:
>
west_star_marinas.png
west_star_marinas.png (220.66 KiB) Exibido 14844 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Da modelagem ao Código - Parte I

Mensagem por bernardino »

Importância da modelagem em OO

Inúmeros são os benefícios como
  • Capacidade de rapidamente capturar os requisitos de negócios enquanto planeja a evolução do software
  • Ajuda a validar teorias, escolhendo a solução mais viável para o contexto do problema
  • Os desenvolvedores podem criar um modelo que é fácil entender e documentar
  • Permite criar uma documentação mais clara e facilita a manutenção e modificação do sistema
O processo de projetar um modelo é denominado modelagem e envolve:
identificar os objetos a serem incluídos no modelo
descrever os modelos
agrupar objetos com características similares em coleções de objetos

Tal processo contribui para a criação de uma representação simplificada do problema, que pode ser usado para estudá-lo e construir uma solução mais adequada

Boas Práticas

Importância da modelagem em OO
  • Modelagem de objetos é prático pois representa os requisitos de negócios em uma notação gráfica (UML) que se traduz facilmente em código.
  • É adaptável e extensível pois organiza os requisitos em um modelo que espelha os negócios e permite que o modelo cresça e evolua acompanhando o negócio.
  • É fácil de criar, ainda que existam muitas ferramentas disponível com um papel e lápis rapidamente podemos rascunhar a modelagem e estabelecer uma discussão sobre o sistema antes mesmo de pensar no código.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Da modelagem ao Código - Parte I

Mensagem por bernardino »

Notação

Importância da modelagem em OO

A linguagem de modelagem unificada (UML) possui uma grande variedade de diagramas que representam diferentes aspectos da modelagem do objeto.
  • Diagramas de classes são usados para representar a estrutura estática do sistema
  • tem como propósito ilustrar as classes, interfaces e suas associações
  • são úteis para testar e identificar os limites do sistema
Relacionamentos

Importância da modelagem em OO

Os diagramas de classe, assim como os elementos em um sistema, possuem relacionamentos que representam as interações entre si, na UML tais
relacionamentos são representados por Associações.

O relacionamento entre duas classes determina como seus objetos podem interagir em tempo de execução e é essencial definir os relacionamentos durante a modelagem da classe.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Da modelagem ao Código - Parte I

Mensagem por bernardino »

Associação Simples:
  • vínculo estrutural entre duas classes
  • representado por uma linha sólida sem extremidades
  • pode indicar a multiplicidade
Relacionamentos.png
Relacionamentos.png (18.86 KiB) Exibido 14831 vezes
ex: Um Cliente pode realizar múltiplos Agendamentos.

Relacionamentos

Associação Bidirecional e Unidirecional:
  • Bidirecional: as duas classes se conhecem representada por uma linha sólida entre classes
  • Unidirecional: apenas uma classe conhece a outra representado por uma linha sólida com a seta apontando para a classe conhecida
Funcionario_Agendamento.png
Funcionario_Agendamento.png (17.75 KiB) Exibido 14829 vezes
ex: Um Funcionário sabe quais Agendamentos executou (unidirecional)
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Da modelagem ao Código - Parte I

Mensagem por bernardino »

Relacionamentos

ex: Um Funcionário mantém uma lista de Agendamentos realizados e o Agendamento mantém a referência ao Funcionário que o executou. (bidirecional)
Funcionario.png
Funcionario.png (47.95 KiB) Exibido 14827 vezes

Agregação

Representa a relação “tem-um” onde a parte é independente (pode existir sem o todo) na UML é representado por uma linha sólida com um losango vazio na extremidade do todo
Marina.png
Marina.png (12.2 KiB) Exibido 14825 vezes
ex: Uma Marina agrega vários Funcionários, mas cada Funcionário pode existir sem uma Marina.

Composição

Representa uma parte que não existe sem o todo, ela percente estritamente ao todo Na UML utiliza-se uma linha sólida com um losango preenchido na extremidade do todo
Venda.png
Venda.png (13.06 KiB) Exibido 14823 vezes
ex: Uma Venda contém Produtos, e se a Venda for removida, os Produtos nela não existirão nessa transação.
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Avatar do usuário
bernardino
Site Admin
Mensagens: 929
Registrado em: 28 Ago 2020, 15:11

Re: Da modelagem ao Código - Parte I

Mensagem por bernardino »

Através da modelagem reduzimos o gap (lacuna) entre o sistema idealizado, garantindo que a representação do software seja consistente como modelo mental do domínio do negócio, pois a modelagem, em especial o diagrama de classes, guia a implementação.

As classes dos diagramas UML se tornam classes Java e suas relações representam como os objetos dessas classes interagem no programa

Objetos: são instâncias de uma classe (entidade real que possui dados e comportamentos)
Classes: moldes/modelos que definem os objetos (características e comportamentos)
Barco.png
Barco.png (32.97 KiB) Exibido 14795 vezes
Partindo de uma modelagem simplificada
Barco_2.png
Barco_2.png (76.02 KiB) Exibido 14795 vezes
Barco_3.png
Barco_3.png (71.97 KiB) Exibido 14795 vezes
barco.java.png
barco.java.png (19.52 KiB) Exibido 14795 vezes
Código Java disponível no Online GDB

https://www.onlinegdb.com/_-GDzIush

Estrutura básica da Classe

Código na linguagem de programação JAVA
public_class_barco.png
public_class_barco.png (61.17 KiB) Exibido 14793 vezes
Atributos da Classe (características do objeto) também conhecidos por variáveis de instância
string_modelo.png
string_modelo.png (49.33 KiB) Exibido 14792 vezes
Método construtor da classe

Facilita a criação, garante que os atributos sejam inicializados e com valores válidos
Construtor_Classe.png
Construtor_Classe.png (99.39 KiB) Exibido 14791 vezes
Método navegar()

Comportamento do Objeto
Metodo_Navegar.png
Metodo_Navegar.png (128.92 KiB) Exibido 14781 vezes
Método desenharbarco()

Comportamento do Objeto
Metodo_Desenhar.png
Metodo_Desenhar.png (176.95 KiB) Exibido 14780 vezes
Barco Java.png
Barco Java.png (137.32 KiB) Exibido 14779 vezes
Algumas pessoas acham que foco significa dizer sim para a coisa em que você vai se focar.
Mas não é nada disso.
Significa dizer não às centenas de outras boas ideias que existem.
Você precisa selecionar cuidadosamente.”

Steve Jobs
Responder