Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNOPAR SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DARLENE ALVES DEBONA PROJETO INTEGRADO III CACHOEIRO DE ITAPEMIRIM 2022 DARLENE ALVES DEBONA PROJETO INTEGRADO III Projeto Integrado III apresentado como requisito parcial para aprovação no curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas na Universidade Norte do Paraná (UNOPAR), polo de Cachoeiro de Itapemirim. Disciplinas: Análise orientada a objetos; Linguagem de programação; Programação e desenvolvimento de banco de dados; Interface e usabilidade; Linguagem orientada a objetos. Tutor a distância: Fernanda Caroline da Silva Fernandes. CACHOEIRO DE ITAPEMIRIM 2022 SUMÁRIO INTRODUÇÃO ............................................................................................................ 5 PROJETO INTEGRADO III ......................................................................................... 6 CONSIDERAÇÕES FINAIS ...................................................................................... 16 REFERÊNCIAS ......................................................................................................... 17 LISTA DE FIGURAS E TABELAS Figura 1 - Exemplo de diagrama de classes .................................................................................... 8 Figura 2 - Exemplo de diagrama de atividades ............................................................................... 9 Figura 3 - Interface do aplicativo do Ministério da Educação ...................................................... 11 Figura 4 - Interface do aplicativo do Ministério da Educação ...................................................... 11 Tabela 1 - Comparação entre BD relacional e BD não relacional .............................................. 15 5 INTRODUÇÃO A presente pesquisa almeja expor conhecimentos, técnicas e ferramentas necessárias para a boa atuação profissional do Analista e Desenvolvedor de Sistemas, elencado noções e fundamentos a respeito das disciplinas estudadas durante o semestre. As disciplinas identificadas neste trabalho são: Análise orientada a objetos, Linguagem de programação, Programação e desenvolvimento de banco de dados, Interface e usabilidade e Linguagem orientada a objetos. O principal objetivo do trabalho é difundir o aparato de informações e ferramentas necessárias para a instrumentalização do profissional na área de programação, baseado nas disciplinas elencadas acima. Os objetivos específicos são: mostrar conceitos das disciplinas estudadas no semestre, expor conhecimento específicos para os profissionais de programação, desenvolver estudos dirigido, analisar possíveis práticas ligadas a teoria e proporcionar um desenvolvimento de pesquisa por parte do estudante. Os conceitos que serão apresentados envolvem a Linguagem de Modelagem Unificada (UML) e seus diagramas estruturais e comportamentais, o design de interfaces apresentando informações, aspectos e técnicas; interpretação de um código Python, instanciação da programação orientada a objetos e as diferenças e características dos bancos de dados relacionais e não relacionais. 6 PROJETO INTEGRADO III A Linguagem de Modelagem Unificada ou UML é uma importante ferramenta utilizada para modelagem de negócios, processos de softwares e tem ligação direta com a análise orientada a objetos. A UML traz uma combinação de conceitos comuns sendo possível representar a maioria dos modelos existentes por esta, é compatível com todas as etapas do desenvolvimento de software e diversos escopos, pode modelar diferentes linguagens e torna os diagramas da análise orientada a objetos aplicáveis a várias situações. (DIAS, 2020) Uma versão simplificada da definição de UML é dada por Fowler (2004, p.25): UML (Unified Modeling Language) é uma família de notações gráficas, apoiada por um metamodelo único, que ajuda na descrição e no projeto de sistemas de software, particularmente daqueles construídos utilizando o estilo orientado a objetos (OO). (FOWLER, 2004, p.25) A UML trabalha com diagramas de modelagem, sendo dividido em dois: diagramas estruturais e diagramas comportamentais. Os diagramas estruturais são: classes, objetos, pacotes, estrutura composta, componente, instalação (implantação) e perfil. Os diagramas comportamentais são: casos de uso, atividade, máquina de estados e os de interação (sequência, comunicação, tempo e visão geral de interação). Os diagramas estruturais são utilizados para mostrar como um sistema pode ser organizado em partes, apresentando seus componentes e os relacionamentos entre eles, estando associados a modelagem estática, representando conceitos do sistema como abstrações, questões de implementação e do mundo real, sendo, em geral, elaborados no momento do projeto de arquitetura. Os diagramas comportamentais são utilizados para mostrar o fluxo de informações e os eventos do sistema, apresentando o comportamento dinâmico dos objetos e como o sistema reage as ações e eventos, incluindo os diagramas de interação que servem para modelar as interações do sistema ou entre os componentes de um sistema. (DIAS, 2020) Um dos mais usados diagramas estruturais é o diagrama de classes. Segundo Fowler (2004, p.52) “um diagrama de classes descreve os tipos de objetos presentes no sistema e os vários tipos de relacionamentos estáticos existentes entre eles”. Além disso, Fowler (2004) ainda explica que os diagramas de classes mostram as propriedades e operações das classes, como também as restrições. Dias (2020) 7 explica que o diagrama de classes remete às classes criadas em um software, sendo o principal objetivo representar classes, suas definições e as relações entre elas. Dias (2020) acrescenta que este diagrama é composto por atributos e métodos, sendo os atributos as variáveis ligadas ao conceito e os métodos as funções. Ademais, Dias (2020) acrescenta duas das relações com que as classes se relacionam, sendo elas a herança e o polimorfismo, a relação herança é aquela que uma classe herda atributos de outra, com os atributos comuns colocados em uma superclasse e os específicos em uma subclasse que herda as características da anterior, já o polimorfismo trata casos em que as características da classe podem ser as mesmas em determinado sentido, mas apresentar divergência dependendo de cada tipo de subclasse. Como percebido, o diagrama de classes é um dos mais básicos dos diagramas estruturais da UML. Este diagrama pode ser utilizado durante a fase de execução do software para converter os modelos em códigos e vice-versa. Durante o projeto de softwares, o diagrama de classe pode ser usado no momento inicial, do planejamento, a fim de representar os objetos que o sistema irá manipular, assim como suas operações e métodos. Este diagrama é capaz de mapear de forma clara a estrutura de um sistema, ajudando no planejamento do sistema, como também na sua manipulação. Apesar de poder ser usado já na fase de planejamento, o diagrama de classes pode ser usado em várias outras etapas por sua abundância usabilidade e aplicabilidade. Na fase do projeto, por exemplo, o diagrama de classe deve especificar as classes do software e as interfaces de aplicação, podendo ser usado para o planejamento de quais classes haverá, de como se interrelacionam e quais métodos serão utilizados para que o software possa alcançar os objetivos necessários para o seu bom funcionamento. Um exemplo simples de um diagrama de classes é apresentado abaixo na Figura 1. É um exemplo que pode ser utilizado nas fases iniciais do projeto do software, como na especificação de requisitos, no caso de um software de vendas para uma empresa, apresentando assimas principais classes que esse software pode ter, além, claro, das relações, métodos e restrições. Quanto aos diagramas comportamentais, o diagrama de atividades é fundamental para a UML e principalmente para o projeto de software. Dias (2020) explica que o diagrama de atividades é responsável por apresentar os fluxos que 8 ocorrem no sistema como um todo, mostrando os fluxos normais, alternativos e as exceções, assim auxiliando o entendimento do sistema como um todo. Fowler (2004, p.118) elucida que “os diagramas de atividades são uma técnica para descrever lógica de procedimento, processo de negócio e fluxo de trabalho”. Assim, o diagrama de atividades se torna essencial no projeto de software, principalmente na parte da documentação do software, a fim de estabelecer os fluxos de trabalho que o sistema deverá percorrer para poder funcionar de forma eficiente. Com o diagrama de atividades, o desenvolvedor pode estipular quais serão as ações necessárias para que os fluxos do sistema ocorram, como também identificar as exceções e prever possíveis problemas que podem vir a ocorrer durante o processo de desenvolvimento do software. Na figura 2 é representado um diagrama de atividades. É perceptível que o diagrama de atividades é fundamental para o projeto de desenvolvimento de um sistema, podendo auxiliar de várias formas a indicar quais são as atividades e até as classes necessárias para que todo o sistema funcione corretamente. O diagrama de atividades auxilia o desenvolver a escolher a ordem na qual fazer as atividades Figura 1 - Exemplo de diagrama de classes Fonte: FOWLER (2004, p.53) 9 ocorrerem, determinando as regras essenciais de sequência que se deve seguir dentro do software. O design de interfaces precisa ter um desenvolvimento voltado para as pessoas, facilitando os processos e o acesso. No caso do desenvolvimento de uma interface da página inicial de um programa para o Ministério da Educação, tendo login, senha, cadastro e uma parte visual com o mapa do Brasil apresentando dados das faculdades espalhadas pelo país, o desenvolvedor deve se atentar para as especificações que o design deve ter afim de possibilitar que todos possam usar, como, por exemplo, quais pessoas seriam as interessadas em utilizar o sistema, questões de usabilidade, adaptação da acessibilidade, possibilitar acesso tanto por computadores quanto por dispositivos móveis, entre outras características. As atividades de design devem seguir a ISO 9241-11 (2019) incluindo: ter o Design Centrado no Usuário contido na estratégia do projeto, planejar o processo de design centrado no humano, especificar os requisitos do usuário e os organizacionais, especificar o contexto do uso, produzir soluções de design, realizar Figura 2 - Exemplo de diagrama de atividades Fonte: FOWLER (2004, p.119) 10 avaliações do projeto, introduzir e operar o projeto (BETIOL, 2021). No caso em questão, os requisitos do usuário devem levar em conta estudantes que desejam ingressar nas faculdades, os pais e/ou responsáveis dos estudantes que desejam saber mais sobre as faculdades e outras partes que possam se interessar (professores, pesquisadores e etc.); como também nas organizações como as próprias instituições de ensino, os governos estaduais e municipais e o próprio Ministério da Educação. Para a criação do design de interfaces, há alguns princípios de usabilidade que podem ser seguidos, são princípios gerais ergonômicos de design, sendo os de Nielsen (1994) e Shneiderman (2005). Os princípios de Nielsen (1994) são os seguintes: visibilidade do status do sistema, compatibilidade entre o sistema e o mundo real, controle e liberdade do usuário, consistência e padrões, prevenção de erros, reconhecimento no lugar de recordação, flexibilidade e eficiência de uso, projeto estético e minimalista, reconhecimento, diagnóstico e recuperação de erros; ajuda e documentação. Os princípios de Shneiderman (2005) são os seguintes: esforce-se para assegurar a coerência, busque a usabilidade universal, forneça feedback, projete diálogos que indiquem o término da ação, previna erros, permita que as ações sejam revertidas facilmente, mantenha os usuários no controle, reduza a carga da memória de curto prazo. Além disso, os princípios de Gestalt também podem ser utilizados para definir as características visuais da interface. (BETIOL, 2021) Há várias técnicas e tecnologias que podem ser utilizados para o design de interfaces. Por exemplo, para a especificação de usuários, segundo Betiol (2021), as técnicas que podem ser usadas são personas, identificação de stakeholders e mapa de empatia; enquanto para a análise de cenários, tarefas e mapas de jornadas podem ser usados os cenários de uso, storyboarding, storytelling e contexto de uso; além da jornada do usuário e do mapeamento de história do usuário. Todas são técnicas para identificar usuários e estabelecer conexões. Para o desenvolvimento de interfaces, há vários aplicativos que podem usados, como o próprio HTML ou a ferramenta Figma, que é uma ferramenta online que possibilita o design da interface dos sistemas. As 11 Figura 3 e Figura 4 mostram a utilização do Figma para o design do aplicativo para o Ministério da Educação: Para a validação de um projeto de interface, é importante realizar a prototipação. A prototipação é a representação limitada de um produto, podendo ser feito de materiais simples, sketches, pedaço do produto finalizado, storyboard e etc. Figura 3 - Interface do aplicativo do Ministério da Educação Fonte: elaborado pela autora. Figura 4 - Interface do aplicativo do Ministério da Educação Fonte: elaborado pela autora. 12 Serve para fazer uma série de verificações, permitindo uma exploração interativa com o projeto, observando a funcionalidade geral e específicas, organização e arquitetura de informações, aspectos de navegação e visuais, usabilidade e entendimento de elementos da interface. Podem ser classificados em três níveis dependendo do projeto: baixa, média e alta fidelidade. O de baixa fidelidade é chamado de mockup ou wireframe, é mais distante do produto final como se fosse um rascunho das ideias do produto, podendo ser usado as ferramentas Wireframe cc e Visual Paradigm Online. O de média fidelidade é um pouco mais próximo do produto final, são usadas ferramentas que permitem uma maior interação e detalhamento, podendo simular o comportamento da interação e podendo testar alguma funcionalidade específica. Já o de alta fidelidade é o mais próximo do produto final, sendo similares, apresentando as ferramentas que serão utilizadas na interface final e também os detalhamentos que serão usados no produto final, permitindo validar a viabilidade e usabilidade. Outras ferramentas também utilizadas para a prototipação são o Figma, já comentado aqui, o Sketch, sendo que ambos possuem versões gratuitas e pagas, o Kodular, usada para criação de aplicativos mobile, e entre outras ferramentas. (UNRUH, 2021) Python é uma das linguagens de programação existente, utilizada para a programação orientada a objetos, sendo clara e poderosa, utilizando uma sintaxe elegante, facilita a leitura dos programas que estão sendo escritos, fácil de usar, possui uma grande biblioteca padrão, possui inúmeros bibliotecas para estender seu poder de atuação, é uma linguagem interpretada já convertida para linguagem de máquina por compilação e permite atribuição múltipla. Na programação orientada para objetos método é o comportamento que um objeto pode fazer, contendo uma mensagem para invocar os objetos. (SCHEFFER, 2020) Vejamos o código Python abaixo: 1. def remove(self, valor): 2. if self.head.data == valor: 3. self.head = self.head.nextItem 4. else: 5. before = None 6. navegar = self.head 7. while navegar and navegar.data != valor: 8.before = navegar 9. navegar = navegar.nextItem 13 10. if navegar: 11. before.nextItem = navegar.nextItem 12. else: 13. before.nextItem = None O código acima remete a uma lista no qual o faz percorrer a lista verificando os itens, caso o item desejado seja encontrado, a função retorna um valor, removendo o item especificado no início da função. A cada interação realizada, se não for encontrado o item especificado, a função move para o próximo node. No caso em questão, a função deseja remover itens, comparando self.head.data com determinado ‘valor’, se foram iguais, self.head é substituído por self.head.nextItem, removendo o self.head da interação em questão, caso não ache, irá colocar None retornando para before e comparar navegar com self.head e fazer uma busca enquanto navegar e navegar.data for diferentes do ‘valor’ especificado, com o before retornando navegar e navegar retornando navegar.nextItem, se encontrar navegar, substituirá before.nextItem por navegar.nextItem, se não encontrar, retornará None para before.nextItem. Assim, têm-se um código que faz percorrer determinada lista para encontrar um valor pesquisado a fim de o remover e o modificar por outro termo quando possível. Um processo comum na programação orientada a objetos é a instanciação, realizando uma cópia de algo. Segue o código abaixo com as lacunas preenchidas: 1 <?php 2 require_once ‘usuarios.php’; 3 $u = new user(); 4 if (isset(($_POST['usuario'])){ 5 $user = addslashes($_POST['usuario']); 6 $passwd = addslashes($_POST['senha']); 7 8 if (!empty($usuario) && !empty($senha)){ 9 $u->conectar("nomeDB", "localhost", "user", "password"); 10 if ($u->msgErro == ""){ 11 if (!$u->logar($user, $passwd)){ 12 echo "Credenciais incorretas!"; 13 } 14 14 } else{ 15 echo "Erro: " . $u->msgErro; 16 } 17 } else{ 18 echo "Preencha todos os campos obrigatórios!"; 19 } 20 } 21 ?> O estudo dos bancos de dados é fundamental para os programadores, que precisarão trabalhar com essa ferramenta em diversos tipos de aplicações. Há vários tipos de banco de dados, sendo dois tipos: banco de dados relacionais e banco de dados não relacionais. Segundo Nunes (2018), o banco de dados relacionais possui um conjunto estruturado e correlacionado de informações, sendo organizado de forma a permitir a eficiência na sua manipulação. Silva et al (2021) explica que os bancos de dados relacionais são os mais utilizados, são sistemas de propósito geral, utilizam o SQL para consulta e manipulação de dados, como também para estruturação de dados. Silva et al (2021) esclarece que uma das principais características do banco de dados relacionais é a integridade referencial por garantir a acurácia e a consistência dos dados dentro dos relacionamentos das tabelas, sendo feito por meio de uma chave estrangeira. Por fim, Silva et al (2021) acrescenta que o banco de dados relacional tem por característica a normalização, que busca otimizar os bancos de dados, garantir a consistência, evitar a duplicação de informações e dividir as tabelas de acordo com os elementos. Porém, o banco de dados relacionais apresenta algumas desvantagens. Silva et al (2021) cita as principais limitações dos bancos de dados relacionais: não foram construídos para aplicações distribuídas, modelo de dados disponível é limitado, dificuldade em escalar os sistemas de forma horizontal, custo mais caro por conta da escalabilidade vertical e também por conta dos cruzamentos de dados através de joins que exigem muitos termos de requisitos de hardware. Já o banco de dados não relacionais, segundo Silva et al (2021), não possuem essa mesma estruturação de dados, isso porque foram criados para serem capazes de acompanhar a escala da internet, sendo assim, as principais características do banco de dados não relacionais é que possui capacidade de armazenamento para dados não estruturados e capacidade para os processar mais 15 rápido. Os bancos de dados não relacionais também são chamados de NoSQL, sendo caracterizados pela ausência da linguagem SQL, são geralmente open source, desenvolvidos para funcionarem em clusters de computadores, oferecem diversas variações de consistência de dados, ausência de esquema e permite a adição de novas colunas de forma livre (SILVA et al, 2021). Assim, com as informações de Nunes (2018) e de Silva et al (2021) a respeito de bancos de dados relacionais e não relacionais, pode-se criar uma tabela comparativa abaixo entre os dois modelos: Banco de dados relacional Banco de dados não relacional Utilizam linguagem SQL; Conjunto estruturado de informações; Integridade referencial; Normalização; Baseado em tabelas; Possui consistência dos dados; Eficiência na manipulação de dados estruturados; Mais utilizado atualmente; Escalabilidade vertical; Não utilizáveis para aplicações distribuídas; Custo mais caro de hardware; Custo mais caro de implementação. Não utilizam linguagem SQL; Capacidade de armazenar dados não estruturados; Ausência de esquema e estrutura; Permite adição de novas colunas de forma livre; Rapidez na manipulação de dados não estruturados; Open source; Alta capacidade de escalabilidade; Capacidade de processar grandes volumes de dados em curtos espaços de tempo; Integridade de dados não é garantida; Pouca flexibilidade na criação de índices; Consultas indisponíveis em geral. Tabela 1 - Comparação entre BD relacional e BD não relacional Fonte: elaborado pela autora. 16 CONSIDERAÇÕES FINAIS A presente pesquisa alcançou os objetivos do trabalho, podendo apresentar as informações e os conhecimentos necessários para trabalhar com as disciplinas estudadas no semestre. Ofereceu instrumentalização teórica profissional sobre a área de análise e desenvolvimento de softwares, como também formas adaptáveis para instrumentalização prática dos conhecimentos e ferramentas no mercado de trabalho. As informações aqui dispostas podem favorecer o desenvolvimento de novas pesquisas e estudos para favorecer a criação de novas ideias, ferramentas e conhecimentos que podem ser utilizados pelos profissionais. Python é uma das linguagens de programação, sendo fundamental que todo programador tenha, pelo menos, conhecimento mínimo a respeito dessa ferramenta, principalmente se deseja trabalhar como analista de sistemas, além de ser a principal linguagem de programação utilizada na análise e programação orientada a objetos. O conhecimento sobre banco de dados é fundamental para todos os programadores também, por ser uma matéria em que todos da área terão que trabalhar em algum momento, fazendo parte da base do trabalho do analista e desenvolvedor de sistemas. Conhecer, saber identificar, elaborar e analisar códigos php é necessário para o trabalho com a programação orientada a objetos, como também para o trabalho com os bancos de dados. Os conhecimentos de interface e usabilidade são essenciais para o design de sistemas, podendo influenciar diretamente na percepção dos usuários e nos benefícios percebidos por eles. A linguagem UML é outro conhecimento essencial para a programação em geral, mas também para a análise e programação orientada para objetos, por conta de sua aplicabilidade neste modelo, principalmente com seus diagramas que mostram grande capacidade de funcionalidade na área. Todos os conhecimentos, informações, técnicas e ferramentas apresentadas se mostrarão fundamentais para o trabalho do analista e desenvolvedor de sistemas, no caso em questão, principalmente para quem trabalhará com a análise e programação orientada a objetos. Dessa forma, o presente trabalho se mostrou importante para agregar instrumentalização teórica e prática ao estudo das disciplinas. 17 REFERÊNCIAS BETIOL, Adriana Holtz. Interface e Usabilidade. Londrina:Editora e Distribuidora Educacional S.A., 2021. DIAS, Maurício Acconcia. Análise orientada a objetos. Londrina: Editora e Distribuidora Educacional S.A., 2020. FOWLER, Martin. UML Essencial: um breve guia para a linguagem-padrão de modelagem de objetos. 3.ed. Porto Alegre: Bookman, 2004. NUNES, Sergio Eduardo. Programação em banco de dados. Londrina: Editora e Distribuidora Educacional S.A., 2018. SCHEFFER, Vanessa Cadan. Linguagem de programação. Londrina: Editora e Distribuidora Educacional S.A., 2020. SILVA, Fernando Calaça et al. Banco de dados não relacional. Porto Alegre: SAGAH, 2021. UNRUH, Gabriela Unger. Prototipação de interfaces. In: Interface e Usabilidade. Londrina: Editora e Distribuidora Educacional S.A., 2021.
Compartilhar