GithubHelp home page GithubHelp logo

pauloricardo50 / daily-log-1.1 Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jardielmaqueiroz/daily-log

0.0 4.0 1.0 15.55 MB

Continuidade do projeto Daily Log desenvolvido durante a disciplina de Programação Orientada a Objeto no semestres 2018/2. Nessa nova versão iremos implementar padrões de projeto e fazer análise a nível de projeto de sistema.

Home Page: https://github.com/JardielmaQueiroz/Daily-Log

Java 84.49% CSS 1.48% HTML 0.81% JavaScript 9.58% Jupyter Notebook 3.63%

daily-log-1.1's Introduction

Daily Log 1.1.0

   Continuação do projeto Daily Log, que surgio por meio da disciplina de Programação Orientada a Objetos do curso Bacharelado em Sistemas de Informação (IFES - Campus Serra) no semestre 2018/2. Nessa nova versão do projeto iremos implementar padrões de projeto e também analisar o sistema do ponto de vista de projeto de sistema.

1. COMPONENTES

Integrantes do grupo:

2. JUSTIFICATIVA DO SISTEMA

   O sistema tem como propósito principal fazer o controle do tempo gasto com realização de atividades durante o expediente de trabalho. Além disso, o mesmo será utilizado como mediador para tomada de decisões estratégicas referentes à organização de atividades no trabalho, uma vez que essa ferramenta terá a capacidade de medir o tempo que está sendo gasto com cada atividade.

3.MINI-MUNDO

   A principal funcionalidade do sistema é controlar as atividades que os gestores desenvolvem no decorrer do expediente de trabalho, ações necessárias ou eventos significativos que não foram capturados no dia-a-dia e mostrar para eles dados estatísticos sobre as categorias de atividades que estão demandando maior parte do seu tempo. Categoria de atividade é uma classificação para identificar as características da atividade, já as subcategorias são as especificidades de cada categoria de atividade. Uma atividade possui titulo, descrição, duração, categoria, subcategoria, data e horário em que foi iniciada e concluída. As atividades devem ser iniciadas e finalizadas durante o horário de início e fim do expediente. Uma Atividade é formada por participações, que são os intervalos de tempo que foi dedicado para aquela atividade, juntamente com o que foi realizado. Além disso, deve ser permitido que outras pessoas participem da atividade, ou seja, possam adicionar participações na atividade que selecionar. O responsável pela atividade deverá ser informado quando outra pessoa adicionar uma participação. Após isso, ele poderá confirmar ou cancelar a participação quando a mesma for inserida por outra pessoa.

   Caso uma participação na atividade seja iniciada e não seja concluída até o horário de fim do expediente a mesma será considerada como concluída. Vários usuários podem participar de uma atividade, no entanto cada usuário fica responsável pela sua participação na atividade.

   Após uma atividade ser inserida no sistema, ela só poderá ser editada e ou deletada durante o período (30 dias) que estiver apta a receber modificações, após esse período nenhuma alteração será permitida. Duas atividades não podem ser inseridas no mesmo horário, caso aconteça, o sistema deve alertar que já existe uma atividade agendada para fazer naquele horário, não permitindo sobrescreve-lá a menos que a pessoa confirme que deseja descartar a atividade existente e permanecer com a nova. Além disso, o sistema deve permitir que o horário do expediente de trabalho - ex: 08h às 18h ou 12h às 19h seja definido, podendo posteriormente editar o horário do expediente de acordo com a necessidade. Além de, poder inserir, atualizar, deletar e consultar atividades que realizou. Apenas as pessoas que possuírem perfil de usuário comum ou de administrador do sistema poderão executar as funcionalidades citadas acima. Perfil de usuário será uma forma de atribuir responsabilidades às pessoas que utilizarão o sistema, de modo que para cada perfil será atribuído funcionalidades específicas.

   Deverá ser permitido, que pessoas com perfis autorizados (Usuário Administrador e usuário de cadastro), cadastrem novas categorias e subcategorias, destacando que só é possível criar subcategoria para uma categoria já existente e uma subcategoria está vinculada apenas a uma categoria.

   As pessoas que utilizarem o sistema, poderão consultar dados estatísticos em forma de gráfico e também relatórios semanais, trimestrais e por período específico sobre a relação de tempo que foi gasto com cada categoria de atividade. Além disso, poderá ser visualizado a porcentagem de tempo que foi destinado para realização da atividade por categoria e por subcategoria. Apenas as pessoas que possuírem permissões (usuário comum e usuário administrador), poderão executar as funcionalidades citadas. Pessoas que possuírem permissão (administrador) poderão visualizar relatórios de outras pessoas que também utilizam o sistema, destacando que essas pessoas deverão trabalhar no mesmo setor e possuírem vínculo (gerente e subordinado) de trabalho entre se. O cadastro de usuários assim como informações referentes a ele serão feitas por meio do sistema externo da STI, exceto quando a pessoa que participou da atividade não faça parte do grupo de funcionário do TJES. Para essas exceções será necessário salvar nome completo da pessoa, telefone e empresa que representa, ressaltando que o sistema deve ser capaz de sugerir ao usuário o nome da empresa para seleção quando possível.

   Os registros de eventos do sistema devem ser armazenados. A interface do sistema deverá se comportar adequadamente, independente do tamanho da tela do dispositivo que será utilizado para acesso – notebook, Smartphone ou Tablet e ser intuitiva, ou seja, simples de se trabalhar e de se aprender também, todos os botões deverão possuir ícones que representam sua função. O sistema deve possuir opções de acessibilidade, tais como, alteração no tamanho da fonte, alto contraste, além de, seguir as Diretrizes de Acessibilidade para Conteúdo Web (WCAG).

4.PROJECT MODEL CANVAS (PMC)

Alt Text

5.MAPA MENTAL

Alt Text

6. TECNOLOGIAS UTILIZADAS

  • Java: Implementação do código fonte;
  • MySQL Workbench: Implementação do Banco de Dados;
  • Balsamiq: Protótipós;

6.1 PADRÕES DE PROJETO UTILIZADOS

  • Singleton

    O padrão Singleton permite criar objetos únicos para os quais há apenas uma instância. Este padrão oferece um ponto de acesso global. Devido a caracteristica citada, implementamos o Singleton para controlarmos a interação com o banco de dados, com o objetivo de garantir que a classe conexão gerencie sua própria instância, além de evitar que qualquer outra classe crie uma instância dela. Sempre que for necessário fazer uma conexão com o banco o metódo conectar() é chamado, ele irá verificar se já existe uma instância de Conexão, caso já existe classe sempre vai oferecer a própria instância dela e caso não tenha ainda uma instância, então ela mesma cria e retorna essa nova instância criada.

    • O Diagrama de classe abaixo mostra mais detalhes sobre o funcionamento do padrão Singleton:
    • No diagrama de classe acima tem-se a classe Conexão, nessa existe o atributo conectar que é do tipo da sua própria classe e é estático, nessa variável tem-se a única instância da classe. Na classe Conexao pode-se observar que o construtor da classe Conexao() é PRIVADO. Ou seja, um construtor privado não permite que a classe seja instanciada a não ser que seja feito por ela mesmo na qual será instanciada pelo método getConexao() que é estático e assim pode ser acessado de qualquer outra classe sem precisar instanciar Conexao.

  • Builder

    Proporciona criação de diversos objetos semelhantes e Cria os novos objetos utilizando o mesmo código. Geralmente são separados por hierarquia e assim que a execução termina, o principal aproveita o construtor. Implementamos o padrão builder foi feita para controlar os perfis de permissão dos usuários. Sabendo que no sistema teremos três perfis de usuário que são: Admintrador, Comum e Cadastro. Implementamos o PerfilBuilder que define define os métodos do perfil, como pode ser visto no perfil abaixo, os quais retornam um objeto PerfilBuilder. Outro método importante na interface é o criaPerfil(). Este método tem como retorno um objeto Perfil, o qual retorna o objeto criado pelo builder. As classe concreta Perfil vai implementar os métodos da interface PerfilBuilder. Deste modo, se o usuário cadastrado tiver perfil de administrador, usará a classe PerfilBuilder.

    • O Diagrama de classe abaixo mostra mais detalhes sobre o funcionamento do padrão Builder:

  • Observer

    tem como objetivo manter o estado de objetos sempre atualizados através do conceito de observadores e observados. Também é utilizado para notificar quando outra pessoa adicionar uma participação na atividade. Quando um objeto mudar seu estado, todos os seus dependentes serão avisados e atualizados automaticamente. Tanto os observadores quanto os sujeitos (observados) podem ser reutilizados, já que existe um baixo acoplamento entre se. Implementamos o observer para fazer o monitoramento das participações das atividades, uma vez que uma atividade é composta por participações, que podem ser participações feitas pelo dono da atividade ou não. Sendo assim sempre que uma participação for adicionada a atividade e o usuário que participou da atividade não ser o dono da mesma o usuário que participou da atividade deve ser notificado.

    • O Diagrama de classe abaixo mostra mais detalhes sobre o funcionamento do padrão Observer:
    • No diagrama de classe acima tem-se a classe Observado, que é responsável por fazer o monitoramento de atividades que contem a lista de atividades e é responsável por registrar as atualizações. O método monitorAtividade() será utilizado para atualizar todos os observadores registrados sempre que o seu estado mudar. Existe também a interface Observador que tem o método update() que é chamado quando o estado do Observado é alterado. A classe NotSistema implementa a interface Observer, definindo assim o método update(), que será utilizado para notificar o usuário.

  • Template Method

    O Padrão de Projeto Template Method define os passos de um algoritmo e permite que a implementação de um ou mais desses passos seja fornecida por subclasses. Assim, o Template Method protege o algoritmo e fornece métodos abstratos para que as subclasses possam implementá-los. Portanto, o padrão Template Method basicamente oferece um método que define um algoritmo (uma sequência de passos) que pode, por sua vez, ser definido como abstrato para posteriormente ser implementado por uma subclasse. No nosso projeto implementamos o Template method, para definir qual metódo seria utilizado para notificar o usuário quando o mesmo fosse adicionado a uma participação de atividade. Para isso temos a Classe NotiSistema que é responsável por definir o metodo, que posteriormente será definido pelas classes: NotiEmail, NotiSms, NotiPositiva, NotNegativa.

    • O Diagrama de classe abaixo mostra mais detalhes sobre o funcionamento do padrão Template Method:

7. DIÁRIO DE BORDO

8. QUADRO KANBAN

10.PROTÓTIPOS DO SISTEMA(MOCKUPS)

11. DIAGRAMA DE CLASSES UML

Alt Text

12. DIAGRAMA DE CASO DE USO

Alt Text

13. MODELO CONCEITUAL

Alt Text

14. MODELO LÓGICO

Alt Text

15. MODELO FÍSICO

daily-log-1.1's People

Contributors

jardielmaqueiroz avatar pauloricardo50 avatar carolcebin avatar

Watchers

James Cloos avatar Hugo Ramalho avatar  avatar  avatar

Forkers

codacy-badger

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.