Clean Code. Escrevendo código para seres humanos. Rodrigo

Tamanho: px
Começar a partir da página:

Download "Clean Code. Escrevendo código para seres humanos. Rodrigo Rosa @rodrigorosa"

Transcrição

1 Clean Code Escrevendo código para seres humanos Rodrigo

2 Rodrigo

3

4 Mas afinal O que é código limpo?

5 Ward Cunningham co-criador da XP Elegância e eficiência, fazer uma coisa bem feita! Bjarne Stroustrup criador do C++ Fácil para outro desenvolvedor entender e melhorar! Legibilidade, código como leitura de um livro! Dave Thomas co-autor do The Pragmatic Programmer Grady Booch co-criador do UML Escrito por alguém que se importa! Cada rotina faz exatamente o que você espera que ela faça! Michael Feathers escritor e coach

6 Qualquer um consegue escrever código que um computador entende. Bons programadores escrevem código que humanos entendem. (Martin Fowler)

7 Por que é importante escrever bom código? Modelo mental (o problema) Modelo semântico (a solução!) Modelo sintático (o código)

8 Três meses depois

9 Meu código lindo!

10 Quem é o culpado?

11

12 Deixe uma única janela quebrada e

13 Regra do escoteiro "Deixe o campo mais limpo que quando você chegou."

14 Agenda Nomes Funções Comentários Formatação Classes Testes Automatizados

15 Nomes

16 Revelar intenção calcular(int d, int t) calcularvalordeatraso(int dias, int taxa)

17 Evitar desinformação List pagamentoslist = new ArrayList(); Algum tempo depois. Set pagamentoslist = new HashSet();

18 Fazer distinções significativas copy(a, b); copy(source, destination);

19 Evitar redundância Double variablevalorpagar; Double valorpagar; create table PessoasTable( ) create table Pessoas( )

20 Usar nomes: Pronunciáveis: Date genymdhms; Date generationtimestamp;

21 Usar nomes: Procuráveis: String a; int x; //números mágicos total = 7; MAX_FILES_PER_STUDENT = 7;

22 Evitar encoding Notação húngara nvalor; snome; acondicoes; Member prefixes m_valor; _valor;

23 Usar um termo por conceito getpessoas(); fetchpessoas(); retrievepessoas();

24 Classes e métodos Classes devem ser substantivos Pessoa Conta Pagamento Métodos devem ser verbos totalizar() excluir()

25 Parece simples, mas não deixe isso te enganar (Erico Rocha)

26 Funções

27 Regras do Clube das Funções: 1 - Devem ser pequenas! 2 - Devem ser menores!

28 Funções Fazer uma única coisa! DRY - Don't Repeat Yourself SRP - Single Responsibility Principle Número de linhas? Número de indentações?

29 Exemplos de funções pequenas Um nível de abstração por função!

30 Ler o código de cima para baixo Estruturar em níveis Código como uma narrativa Cada função é seguida pelas outras no próximo nível

31 Código como narrativa

32 Parâmetros O ideal é zero! Um é bom! Dois é tolerável! Três? Evitar! Parâmetros do tipo boolean: maybe not Output Parameter: just don't

33 Efeitos colaterais boolean login(string user, String password) { User user = UserRepository.findByName(user); if (user!= null && user.checkpassword(password)) { Session.initialize(); return true; } return false; }

34 Command Query Separation Função deve FAZER algo ou RETORNAR algo Use exceções ao invés de códigos de retorno Não retornar null Não passar null

35 Refinamento Primeira versão da função apenas faz o código funcionar Refinamentos para extrair métodos privados separando responsabilidades, renomear variáveis e métodos Por fim, temos funções curtas, bem nomeadas, organizadas e estruturadas

36 Comentários https://acertandooalvo.files.wordpress.com/2012/07/fofoca.jpg

37

38 Quando comentários são ruins? Quando são redundantes Quando estão desatualizados Quando são desnecessários, gerando sujeira e ruído no código

39

40 Quando compensam código ruim" // verifica se o funcionário tem direito // a todos benefícios if(employee.flags && HOURLY_FLAG) && (employee.age > 65) if(employee.iseligibleforfullbenefits())

41 Melhor refatorar // módulo da lista global depende // do subsistema do qual fazemos parte? if(module.getdependsystems().contains(subsysmod.getsubsystem())){} List dependees = module.getdependsystem(); String oursubsystem = subsysmod.getsubsystem(); if(dependees.contains(oursubsystem)){}

42 Quando comentários são benéficos Intenção ao invés de explicação Alerta sobre consequências TODO Destacar a importância de algo

43 Lembrem-se! Autor e data ficam no controle de versão Documentação somente em APIs públicas Código comentado é código morto!

44

45 Formatação

46 The Open Closed Principle - Uncle Bob 12 May 2014 Craftsmanship In 1988 Bertrand Meyer defined one of the most important principles of software engineering. The Open Closed Principle (OCP). In his book Object Oriented Software Construction[1] he said: A satisfactory modular decomposition technique must satisfy one more requirement: It should yield modules that are both open and closed. A module will be said to be open if it is available for extension. For example, it should be possible to add fields to the data structures it contains, or new elements to the set of functions it performs. A module will be said to be closed if is available for use by other modules. This assumes that the module has been given a well-defined, stable description (the interface in the sense of information hiding). In the case of a programming language module, a closed module is one that may be compiled and stored in a library, for others to use. In the case of a design or specification module, closing a module simply means having it approved by management, adding it to the project's official repository of accepted software items (often called the project baseline), and publishing its interface for the benefit of other module designers. This definition is obviously dated. Nowadays many languages don't require that modules be compiled. And getting module specifications approved by management smacks of a waterfall mentality. Still, the essence of a great principle still shines through those old words. To wit: You should be able to extend the behavior of a system without having to modify that system.

47

48 Metáfora do jornal Lido verticalmente Manchete no topo Sinopse Detalhes

49 Ordenação vertical (de cima para baixo) Espaçamento vertical (parágrafos) Continuidade vertical (associação íntima) Distância vertical (não separar conceitos)

50 Formatação https://github.com/caelum/caelum-stella/blob/master/stella-boleto/src/main/java/br/com/caelum/stella/boleto/utils/stellastringutils.java

51 Padrões internos Padrões da equipe Recursos da IDE Respeito!

52 Classes

53 SOLID Single Responsibility Principle (SRP) Open Closed Principle (OCP) Liskov Substitution Principle (LSP) Interface Segregation Principle (ISP) Dependency Inversion Principle (DIP)

54 Classes Devem ser pequenas! Responsabilidade única

55 Acoplamento "É o grau em que um módulo depende de outro módulo de programação.

56 Coesão "É a medida da força relativa de um módulo"

57 Regras do Clube das Classes: 1. Devem ter baixo acoplamento 2. Devem ter alta coesão

58 Te s te s

59 Três leis 1. Não se deve escrever testes de produção até ter um teste falhando; 2. Não se deve escrever mais que o suficiente para falhar o teste 3. Não se deve escrever mais código de produção que o suficiente para o teste passar

60 Manter os códigos dos testes limpos (padrão construir-operar-verificar) Minimizar o numero de asserts por teste (não necessariamente apenas um) Testar um único conceito por teste

61 Formas de medir a qualidade Testes automatizados Peer review Avaliadores estáticos de código FindBugs, CheckStyle, PMD CodeClimate, RubyCritic

62

63 Reconhecer bom código de mau código não significa que você saiba fazer bom código. (Uncle Bob)

64 Leituras complementares

65 Fontes e referências https://github.com/caelum/caelum-stella/ https://github.com/unclebob

66

67

68

Padrões de Projeto em Desenvolvimento Web SCC 266. Prof. Renata Pontin M. Fortes renata@icmc.usp.br PAE: Willian Watanabe (watinha@gmail.

Padrões de Projeto em Desenvolvimento Web SCC 266. Prof. Renata Pontin M. Fortes renata@icmc.usp.br PAE: Willian Watanabe (watinha@gmail. Padrões de Projeto em Desenvolvimento Web SCC 266 Prof. Renata Pontin M. Fortes renata@icmc.usp.br PAE: Willian Watanabe (watinha@gmail.com) 2.semestre 2010 Instituto de Ciências Matemáticas e de Computação

Leia mais

Laboratório 3. Base de Dados II 2008/2009

Laboratório 3. Base de Dados II 2008/2009 Laboratório 3 Base de Dados II 2008/2009 Plano de Trabalho Lab. 3: Programação em Transact-SQL MYSQL Referências www.mysql.com MICROSOFT SQL SERVER - Procedimentos do Lado do Servidor (Stored Procedures)

Leia mais

Métodos Formais em Engenharia de Software. VDMToolTutorial

Métodos Formais em Engenharia de Software. VDMToolTutorial Métodos Formais em Engenharia de Software VDMToolTutorial Ana Paiva apaiva@fe.up.pt www.fe.up.pt/~apaiva Agenda Install Start Create a project Write a specification Add a file to a project Check syntax

Leia mais

Tópicos de Orientação a Objetos

Tópicos de Orientação a Objetos Capítulo 3 Tópicos de Orientação a Objetos Um bom design de software visa a uma arquitetura flexível que permita futuras alterações, facilite a produção de código organizado e legível, maximizando seu

Leia mais

Boas Práticas de Programação

Boas Práticas de Programação Boas Práticas de Programação João Arthur Brunet Monteiro Mestrando em Informática - COPIN 25/10/2008 João Arthur Brunet Monteiro 1/ 27 Roteiro Introdução 1 Introdução Objetivos Contextualização 2 Práticas

Leia mais

UML & Padrões. Aula 1 Apresentação. Profª Kelly Christine C. Silva

UML & Padrões. Aula 1 Apresentação. Profª Kelly Christine C. Silva UML & Padrões Aula 1 Apresentação Profª Kelly Christine C. Silva Sistemas para Internet Módulo I - Construção de sites informativos Módulo II - Construção de sites dinâmicos Módulo III - Aplicações para

Leia mais

Prática em Laboratório N.04 (Parte 01) Criando uma aplicação composta a partir de um serviço Web

Prática em Laboratório N.04 (Parte 01) Criando uma aplicação composta a partir de um serviço Web Prática em Laboratório N.04 (Parte 01) Criando uma aplicação composta a partir de um serviço Web O objetivo deste exercício é fornecer uma introdução a criação de uma aplicação composta de modo a ilustrar

Leia mais

a. A plataforma recomendada é Web, com arquitetura Microsoft.Net; b. A linguagem recomendada para codificação de Sistemas de Informações é C#;

a. A plataforma recomendada é Web, com arquitetura Microsoft.Net; b. A linguagem recomendada para codificação de Sistemas de Informações é C#; 1. OBJETIVO O objetivo deste documento é definir as normas e os padrões que deverão ser adotados pelos desenvolvedores da equipe interna e externa (fornecedores) que venham a desenvolver soluções de software

Leia mais

Padrões de Codificação Java

Padrões de Codificação Java Padrões de Codificação Java João Carlos Pinheiro jcpinheiro@cefet-ma.br Versão: 1.0 Última Atualização: Março / 2005 1 Objetivos Apresentar os padrões de codificação Java da SUN 2 Introdução Um padrão

Leia mais

Easy Linux! FUNAMBOL FOR IPBRICK MANUAL. IPortalMais: a «brainware» company www.iportalmais.pt. Manual

Easy Linux! FUNAMBOL FOR IPBRICK MANUAL. IPortalMais: a «brainware» company www.iportalmais.pt. Manual IPortalMais: a «brainware» company FUNAMBOL FOR IPBRICK MANUAL Easy Linux! Title: Subject: Client: Reference: Funambol Client for Mozilla Thunderbird Doc.: Jose Lopes Author: N/Ref.: Date: 2009-04-17 Rev.:

Leia mais

5/10/10. Implementação. Building web Apps. Server vs. client side. How to create dynamic contents?" Client side" Server side"

5/10/10. Implementação. Building web Apps. Server vs. client side. How to create dynamic contents? Client side Server side 5/10/10 Implementação Mestrado em Informática Universidade do Minho! 6! Building web Apps How to create dynamic contents?" Client side" Code runs on the client (browser)" Code runs on a virtual machine

Leia mais

Descrição de Arquitectura e Design. SyncMasters

Descrição de Arquitectura e Design. SyncMasters 1 Descrição de Arquitectura e Design SyncMasters ConfiKeeper Version 2.0, 16-11-2014 by SyncMasters: Carlos Paiva, 2009108909, cpaiva@student.dei.uc.pt Inês Parente, 2012152484, iparente@student.dei.uc.pt

Leia mais

PADRÕES DE PROJETO. Cleviton Monteiro (cleviton@gmail.com)

PADRÕES DE PROJETO. Cleviton Monteiro (cleviton@gmail.com) PADRÕES DE PROJETO Cleviton Monteiro (cleviton@gmail.com) Roteiro Atributos de qualidade Boas práticas de projeto Code Smell Padrões de Projeto Atributos de qualidade Coesão Acoplamento Atributos de qualidade

Leia mais

Microsoft Visual Studio Express 2012 for Windows Desktop

Microsoft Visual Studio Express 2012 for Windows Desktop Microsoft Visual Studio Express 2012 for Windows Desktop Apresentação da ferramenta Professor: Danilo Giacobo Página pessoal: www.danilogiacobo.eti.br E-mail: danilogiacobo@gmail.com 1 Introdução Visual

Leia mais

Introdução ao TDD. Dionatan Moura. #guma10anos Abril de 2014. about.me/dionatanmoura

Introdução ao TDD. Dionatan Moura. #guma10anos Abril de 2014. about.me/dionatanmoura Introdução ao TDD #guma10anos Abril de 2014 Dionatan Moura about.me/dionatanmoura Introdução ao TDD Extreme Programming TDD Refatoração xunit Baby Steps Clean Code Patterns para TDD Red Bar Test Green

Leia mais

extreme Programming extreme Programming (XP) Metodologia Ágil Partes do XP Communication (comunicação) 1. Valores do XP

extreme Programming extreme Programming (XP) Metodologia Ágil Partes do XP Communication (comunicação) 1. Valores do XP extreme Programming extreme Programming (XP) Metodologia ágil para equipes pequenas a médias desenvolvendo software com requesitos vagos ou que mudam freqüentemente. [Beck 2000] Em XP, codificação é principal

Leia mais

CONVENÇÃO DE CÓDIGO JAVA

CONVENÇÃO DE CÓDIGO JAVA CONVENÇÃO DE CÓDIGO JAVA Eligiane Ceron - Abril de 2012 Versão 1.0 Conteúdo Considerações iniciais... 2 Introdução... 2 Extensão de arquivos... 2 Arquivos de código Java... 2 Comentários iniciais... 2

Leia mais

Aqui pode escolher o Sistema operativo, e o software. Para falar, faça download do Cliente 2.

Aqui pode escolher o Sistema operativo, e o software. Para falar, faça download do Cliente 2. TeamSpeak PORTUGUES ENGLISH Tutorial de registo num servidor de TeamSpeak Registration tutorial for a TeamSpeak server Feito por [WB ].::B*A*C*O::. membro de [WB ] War*Brothers - Non Dvcor Dvco Made by:

Leia mais

ESPECIFICAÇÃO DO AMBIENTE EXPSEE SEGUNDO O MÉTODO CATALYSIS

ESPECIFICAÇÃO DO AMBIENTE EXPSEE SEGUNDO O MÉTODO CATALYSIS ESPECIFICAÇÃO DO AMBIENTE EXPSEE SEGUNDO O MÉTODO CATALYSIS RESUMO Este artigo apresenta a especificação de um sistema gerenciador de workflow, o ExPSEE, de acordo com a abordagem de desenvolvimento baseado

Leia mais

ANÁLISE E PROJETO ORIENTADO A OBJETOS. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

ANÁLISE E PROJETO ORIENTADO A OBJETOS. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com ANÁLISE E PROJETO ORIENTADO A OBJETOS Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com Análise Descrição do problema a ser implementado Descrição dos objetos e classes que fazem parte do problema, Descrição

Leia mais

Oracle PL/SQL Overview

Oracle PL/SQL Overview Faculdades Network Oracle PL/SQL Overview Prof. Edinelson PL/SQL Linguagem de Programação Procedural Language / Structured Query Language Une o estilo modular de linguagens de programação à versatilidade

Leia mais

Conceitos e Benefícios do Test Driven Development

Conceitos e Benefícios do Test Driven Development Conceitos e Benefícios do Test Driven Development Eduardo N. Borges Instituto de Informática Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal 15.064 91.501-970 Porto Alegre RS Brazil enborges@inf.ufrgs.br

Leia mais

Os Desafios da Segurança no Desenvolvimento com Métodos Ágeis. OWASP Education Project. The OWASP Foundation http://www.owasp.org

Os Desafios da Segurança no Desenvolvimento com Métodos Ágeis. OWASP Education Project. The OWASP Foundation http://www.owasp.org Os Desafios da Segurança no Desenvolvimento com Métodos Ágeis Education Project Rafael Dreher Porto Alegre Chapter - Co-founder Security Consultant @ Dell dreher@owasp.org Copyright 2007 The Foundation

Leia mais

User Guide Manual de Utilizador

User Guide Manual de Utilizador 2400 DPI OPTICAL GAMING MOUSE User Guide Manual de Utilizador 2014 1Life Simplify it All rights reserved. www.1-life.eu 2 2400 DPI OPTICAL GAMING MOUSE ENGLISH USER GUIDE...4 MANUAL DE UTILIZADOR PORTUGUÊS...18

Leia mais

JSP - ORIENTADO A OBJETOS

JSP - ORIENTADO A OBJETOS JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...

Leia mais

Serviços: API REST. URL - Recurso

Serviços: API REST. URL - Recurso Serviços: API REST URL - Recurso URLs reflectem recursos Cada entidade principal deve corresponder a um recurso Cada recurso deve ter um único URL Os URLs referem em geral substantivos URLs podem reflectir

Leia mais

Evolução do Design através de Testes e o TDD

Evolução do Design através de Testes e o TDD c a p a Lucas Souza (lucas.souza@caelum.com.br): é bacharel em Engenharia da Computação pela Universidade de Ribeirão Preto, possui a certificação SCJP e trabalha com Java há 4 anos. Atualmente é desenvolvedor

Leia mais

Estudo de caso de solução integrada ao AutoCAD através da API.NET para conversão de desenhos

Estudo de caso de solução integrada ao AutoCAD através da API.NET para conversão de desenhos Estudo de caso de solução integrada ao AutoCAD através da API.NET para conversão de desenhos Augusto Cesar Silva Brighenti Álamo Soluções em TI A sessão será um estudo de caso de uma solução de integração

Leia mais

Evolução de Software e Refatoração

Evolução de Software e Refatoração Evolução de Software e Refatoração Mudança de software Mudança de software é inevitável Novos requisitos surgem quando o software é usado; O ambiente de negócio muda; Erros devem ser reparados; Novos computadores

Leia mais

Notas de Aula 04: Casos de uso de um sistema

Notas de Aula 04: Casos de uso de um sistema Notas de Aula 04: Casos de uso de um sistema Objetivos da aula: Aprender os elementos básicos da modelagem por casos de uso Utilizar as associações entre casos de uso, atores e demais artefatos Compreender

Leia mais

Programação Orientada pelos Objectos CodeRuler

Programação Orientada pelos Objectos CodeRuler Programação Orientada pelos Objectos CodeRuler O trabalho deste guião consiste em implementar um jogo. Os objectivos do guião são os seguintes: Perceber o que é um motor de jogo. Instalar um motor de jogo

Leia mais

UML Linguagem de Modelagem Unificada

UML Linguagem de Modelagem Unificada Modelagem de Sistemas UML Linguagem de Modelagem Unificada Prof. Mauro Lopes 1-25 Objetivos Nesta aula iremos apresentar os elementos conceituais da Linguagem de Modelagem Unificada (UML). Boa aula a todos.

Leia mais

Práticas de Desenvolvimento de Software

Práticas de Desenvolvimento de Software Aula 3. 09/03/2015. Práticas de Desenvolvimento de Software Aula 3 - Introdução à linguagem de programação Ruby Oferecimento Ruby (1) Ruby Ruby (2) Ruby Linguagem de programação dinâmica, de código aberto,

Leia mais

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores 1 Exercícios Exercício 1: Construtores e Testes Analise a classe Conta.java, mostrada na

Leia mais

Alarmes e Erros CNC Proteo

Alarmes e Erros CNC Proteo Alarmes e Erros CNC 1 Códigos de Erro 1.1 Erro ( 0 ) : NO ERROR Texto: "Código de erro inválido" "Invalid Error Code" 1.2 Erro ( 1 ) : ERROR_BP_WAS_UNABLE_TO_OPEN_INPUT_FILE Texto: "Não foi possível abrir

Leia mais

Servo 1.0: sistema de apoio acadêmico-administrativo. Servant 1.0: academic-administrative support system

Servo 1.0: sistema de apoio acadêmico-administrativo. Servant 1.0: academic-administrative support system Servo 1.0: sistema de apoio ARTIGO acadêmico-administrativo ORIGINAL / ORIGINAL ARTICLE Servo 1.0: sistema de apoio acadêmico-administrativo Servant 1.0: academic-administrative support system Marcus Henrico

Leia mais

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos Programação Orientada a Objetos Relacionamentos entre objetos Associação, composição e agregação Construtores e sobrecarga Variáveis de classe e de instância Reinaldo Gomes reinaldo@cefet-al.br Objetos

Leia mais

Universidade da Beira Interior. Sistemas Distribuídos - 2014/2015 Curso: Engª Informática. Folha 11. JAX-RS: Java API for RESTful Web Services

Universidade da Beira Interior. Sistemas Distribuídos - 2014/2015 Curso: Engª Informática. Folha 11. JAX-RS: Java API for RESTful Web Services JAX-RS: Java API for RESTful Web Services A - Creating RESTful Web Services from a Database 1- Comece por criar um projeto do tipo Java Web application, como fez nos exercícios das fichas anteriores. No

Leia mais

Versão: 1.0. Segue abaixo, os passos para o processo de publicação de artigos que envolvem as etapas de Usuário/Autor. Figura 1 Creating new user.

Versão: 1.0. Segue abaixo, os passos para o processo de publicação de artigos que envolvem as etapas de Usuário/Autor. Figura 1 Creating new user. Órgão: Ministry of Science, Technology and Innovation Documento: Flow and interaction between users of the system for submitting files to the periodicals RJO - Brazilian Journal of Ornithology Responsável:

Leia mais

Slides_Java_1 !"$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code.

Slides_Java_1 !$ % & $ ' ' Output: Run java. Compile javac. Name of program. Must be the same as name of file. Java source code. Slides_Java_1!"#$!" $ % & $ Sistemas Informáticos I, 2005/2006 ( Java source code Compile javac Java bytecode Run java Output:!"#) %& Name of program. Must be the same as name of file.!"#$!"$ % & $ Where

Leia mais

Pesquisa sobre código limpo (clean code) 09-05-2014 Por: Tarik Boschi http://boschi.com.br

Pesquisa sobre código limpo (clean code) 09-05-2014 Por: Tarik Boschi http://boschi.com.br Pesquisa sobre código limpo (clean code) 09-05-2014 Por: Tarik Boschi http://boschi.com.br 1. QUESTIONÁRIO O presente questionário foi disponibilizado para o levantamento sobre práticas de código limpo

Leia mais

Prática em Laboratório N.04 Criando uma aplicação composta a partir de um serviço Web

Prática em Laboratório N.04 Criando uma aplicação composta a partir de um serviço Web Prática em Laboratório N.04 Criando uma aplicação composta a partir de um serviço Web O objetivo deste exercício é fornecer uma introdução a criação de uma aplicação composta de modo a ilustrar o processo

Leia mais

Arquitetura de Software

Arquitetura de Software Arquitetura de Software Centro de Informática - Universidade Federal de Pernambuco Engenharia da Computação Kiev Gama kiev@cin.ufpe.br Slides elaborados pelos professores Marcio Cornélio e Kiev Gama O

Leia mais

Técnicas de Database Refactoring para ambientes 24x7. Matheus de Oliveira

Técnicas de Database Refactoring para ambientes 24x7. Matheus de Oliveira <matheus.oliveira@dextra.com.br> Técnicas de Database Refactoring para ambientes 24x7 Matheus de Oliveira Matheus de Oliveira DBA PostgreSQL consultorias e suportes 24x7/8x5

Leia mais

Framework utilizando reflexão e aspectos para persistência de objetos em java

Framework utilizando reflexão e aspectos para persistência de objetos em java Framework utilizando reflexão e aspectos para persistência de objetos em java Antonio Carlos Rolloff (UNIPAR) acrolloff@gmail.com Arthur Cattaneo Zavadski (UNIPAR) arthur@datacoper.com.br Maria Aparecida

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 DICIONÁRIO. Armanda Rodrigues 6 de Outubro 2011

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 DICIONÁRIO. Armanda Rodrigues 6 de Outubro 2011 ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 DICIONÁRIO Armanda Rodrigues 6 de Outubro 2011 2 Guardar todos os documentos da biblioteca Vamos voltar ao nosso exemplo da biblioteca Os utilizadores do sistema

Leia mais

Teoria Económica Clássica e Neoclássica

Teoria Económica Clássica e Neoclássica Teoria Económica Clássica e Neoclássica Nuno Martins Universidade dos Açores Jornadas de Estatística Regional 29 de Novembro, Angra do Heroísmo, Portugal Definição de ciência económica Teoria clássica:

Leia mais

MC302A Modelagem de Sistemas com UML. Prof. Fernando Vanini vanini@ic.unicamp.br

MC302A Modelagem de Sistemas com UML. Prof. Fernando Vanini vanini@ic.unicamp.br MC302A Modelagem de Sistemas com UML Prof. Fernando Vanini vanini@ic.unicamp.br Modelamento de Sistemas e Orientação a Objetos O paradigma de Orientação a Objetos oferece um conjunto de características

Leia mais

Diagrama de Classes. Viviane Torres da Silva viviane.silva@ic.uff.br. http://www.ic.uff.br/~viviane.silva/2012.1/es1

Diagrama de Classes. Viviane Torres da Silva viviane.silva@ic.uff.br. http://www.ic.uff.br/~viviane.silva/2012.1/es1 Diagrama de Classes Viviane Torres da Silva viviane.silva@ic.uff.br http://www.ic.uff.br/~viviane.silva/2012.1/es1 O que é? Diagrama mais utilizado da UML Representa os tipos (classes) de objetos de um

Leia mais

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl AVALIAÇÃO DA QUALIDADE DO CÓDIGO FONTE ESCRITO EM PL/SQL Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl Roteiro Introdução Objetivos do trabalho Fundamentação teórica Desenvolvimento

Leia mais

Elsa Cardoso, DCTI - ISCTE

Elsa Cardoso, DCTI - ISCTE Elsa Cardoso, DCTI - ISCTE 25 Maio 2004 elsa.cardoso@iscte.pt Sumário Perspectiva de Desenho do Sistema: Diagrama de classes numa perspectiva de Desenho: Estereótipos Relação de Dependência Relação de

Leia mais

TDD depois do mainstream. E agora?

TDD depois do mainstream. E agora? TDD depois do mainstream. E agora? Mauricio Aniche mauricio.aniche@caelum.com.br www.aniche.com.br Nós amamos métodos ágeis (e TDD mais ainda)! Na academia... Mas tudo faz sentido... Será que vale a pena

Leia mais

ControlPro: Uma Ferramenta de Acompanhamento de Projetos Integrada a um Ambiente de Desenvolvimento de Software

ControlPro: Uma Ferramenta de Acompanhamento de Projetos Integrada a um Ambiente de Desenvolvimento de Software ControlPro: Uma Ferramenta de Acompanhamento de Projetos Integrada a um Ambiente de Desenvolvimento de Software Rodrigo Dal Moro, Julio Cesar Nardi, Ricardo de Almeida Falbo Departamento de Informática

Leia mais

Addition of Fields in Line Item Display Report Output for TCode FBL1N/FBL5N

Addition of Fields in Line Item Display Report Output for TCode FBL1N/FBL5N Addition of Fields in Line Item Display Report Output for TCode FBL1N/FBL5N Applies to: Any business user who uses the transactions FBL1N and FBL5N to display line item reports for vendors and customers.

Leia mais

Diagrama de Classes. Diagrama de Classes. Diagramas de Classe. POST Criando Diagramas de Classe. Como construir (2)

Diagrama de Classes. Diagrama de Classes. Diagramas de Classe. POST Criando Diagramas de Classe. Como construir (2) Diagrama de Classes Diagrama de Classes Modelo de classes de especificação Perspectiva de Projeto Ilustra as especificações de software para as classes e interfaces do sistema. É obtido através da adição

Leia mais

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO.

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO. Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO. Robson Adão Fagundes http://robsonfagundes.blogspot.com/ Mini curso Desenvolvimento de aplicação

Leia mais

Meta Programming. Nelson Ferraz nferraz@gmail.com

Meta Programming. Nelson Ferraz nferraz@gmail.com Meta Programming Nelson Ferraz nferraz@gmail.com Resumo Meta Programming Code Generation AppML 23/11/07 Nelson Ferraz 2 Meta Programming Programas que manipulam programas Geração de

Leia mais

Figura 1: VHDL - Exemplo de uso do construto generic: componente mult_se_neg com valor default de n=16 bits.

Figura 1: VHDL - Exemplo de uso do construto generic: componente mult_se_neg com valor default de n=16 bits. OBJETIVOS: Projeto de componentes em VHDL. Projeto e simulação de uma biblioteca de componentes em VHDL no ambiente Quartus II Altera para construção de um caminho de dados (ou bloco operacional) e de

Leia mais

Wiki::Score A Collaborative Environment For Music Transcription And Publishing

Wiki::Score A Collaborative Environment For Music Transcription And Publishing Wiki::Score A Collaborative Environment For Music Transcription And Publishing J.J. Almeida 1 N.R. Carvalho 1 J.N. Oliveira 1 1 Department of Informatics, University of Minho {jj,narcarvalho,jno}@di.uminho.pt

Leia mais

Capítulo 9 Desenho de classes

Capítulo 9 Desenho de classes Capítulo 9 Desenho de classes Escolha de classes a implementar Coesão e acoplamento Minimização de efeitos colaterais Consolidação de conceitos: métodos e campos estáticos, abrangência de variáveis locais

Leia mais

Programação Orientada a Objetos. Encapsulamento

Programação Orientada a Objetos. Encapsulamento Programação Orientada a Objetos Encapsulamento de Dados Ocultação de dados Garante a transparência de utilização dos componentes do software, facilitando: Entendimento Reuso Manutenção Minimiza as interdependências

Leia mais

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ. Documentação Key Organizer Projeto realizado para a disciplina de Resolução de Problemas em Engenharia

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ. Documentação Key Organizer Projeto realizado para a disciplina de Resolução de Problemas em Engenharia PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ Documentação Key Organizer Projeto realizado para a disciplina de Resolução de Problemas em Engenharia CURITIBA Novembro de 2012 Carlo Nery de Lima Moro João

Leia mais

O que é modularidade? Sérgio Soares scbs@cin.ufpe.br

O que é modularidade? Sérgio Soares scbs@cin.ufpe.br O que é modularidade? Sérgio Soares scbs@cin.ufpe.br AOSD Aspectos tem como objetivo aumentar a modularidade dos sistemas...... mas 2 O que é modularidade??? 3 Parnas, 1972 modularization is a mechanism

Leia mais

TIPOS PARAMETRIZADOS CLASSES GENÉRICAS PARTE I

TIPOS PARAMETRIZADOS CLASSES GENÉRICAS PARTE I TIPOS PARAMETRIZADOS CLASSES GENÉRICAS PARTE I JAVA5 Tiger JAVA6 - Mustang ARQUITECTURAS DE SOFTWARE F. Mário Martins 2011 1 EVOLUÇÃO ARQUITECTURAS DE SOFTWARE F. Mário Martins 2011 2 EVOLUÇÃO JSE ARQUITECTURAS

Leia mais

CODIGOS CONTROLE RS232 Matrix HDMI 4x2 Control EDID/RS232 (GB.42.2014)

CODIGOS CONTROLE RS232 Matrix HDMI 4x2 Control EDID/RS232 (GB.42.2014) CODIGOS CONTROLE RS232 Matrix HDMI 4x2 Control EDID/RS232 (GB.42.2014) Versão 2014.04.23 Você acaba de adquirir um produto AV LIFE!!! Não deixe de acessar nosso site www.avlife.com.br para ficar por dentro

Leia mais

VINÍCIUS FERNANDES DE JESUS ARQUITETURA DE SOFTWARE: UMA PROPOSTA PARA A PRIMEIRA APLICAÇÃO

VINÍCIUS FERNANDES DE JESUS ARQUITETURA DE SOFTWARE: UMA PROPOSTA PARA A PRIMEIRA APLICAÇÃO VINÍCIUS FERNANDES DE JESUS ARQUITETURA DE SOFTWARE: UMA PROPOSTA PARA A PRIMEIRA APLICAÇÃO LONDRINA PR 2013 VINÍCIUS FERNANDES DE JESUS ARQUITETURA DE SOFTWARE: UMA PROPOSTA PARA A PRIMEIRA APLICAÇÃO

Leia mais

Computação e Programação

Computação e Programação Computação e Programação 8ª Aula de Problemas Cell arrays Estruturas Instituto Superior Técnico, Dep. de Engenharia Mecânica - ACCAII Problema 1 Escreva uma função que recebe um cell array de strings e

Leia mais

modelagem do negócio (processos e objetos do negócio) modelagem de requisitos alocados ao software modelagem da solução de software

modelagem do negócio (processos e objetos do negócio) modelagem de requisitos alocados ao software modelagem da solução de software POO com UML Java Uso da linguagem UML(Unified Modeling Language) A UML, ou Linguagem de Modelagem Unificada, é a junção das três mais conceituadas linguagens de modelagem orientados a objectos (Booch de

Leia mais

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL 1. O que é Linguagem SQL 2. Instrução CREATE 3. CONSTRAINT 4. ALTER TABLE 5. RENAME TABLE 6. TRUCANTE TABLE 7. DROP TABLE 8. DROP DATABASE 1 1. O que é Linguagem SQL 2. O SQL (Structured Query Language)

Leia mais

DESENVOLVIMENTO DE SOFTWARE

DESENVOLVIMENTO DE SOFTWARE VARIAÁ VEL Antes de iniciarmos os comandos referentes a Banco de Dados, precisamos de uma breve descrição técnica sobre Variáveis que serão uma constante em programação seja qual for sua forma de leitura.

Leia mais

Laboratório 5. Base de Dados II 2008/2009

Laboratório 5. Base de Dados II 2008/2009 Laboratório 5 Base de Dados II 2008/2009 Plano de Trabalho Lab. 4: Programação em Transact-SQL Referências MICROSOFT SQL SERVER - Triggers (gatilhos). - Exercícios 1. Conceito. - Os Stored Procedures permitem

Leia mais

Persistência de Classes em Tabelas de Banco de Dados

Persistência de Classes em Tabelas de Banco de Dados UTFPR DAELN - Disciplina de Fundamentos de Programação II ( IF62C ). 1 Persistência de Classes em Tabelas de Banco de Dados 1) Introdução! Em algumas situações, pode ser necessário preservar os objetos

Leia mais

Analisar através de Casos de Uso,

Analisar através de Casos de Uso, 5.1 Programa do Módulo 2 Orientação a Objetos Conceitos Básicos Análise Orientada a Objetos (UML) Diagramas de Interação: Seqüência, Comunicação Processo Unificado (RUP) Métodos Orientados a Objetos UML

Leia mais

Guia de Fatores de Qualidade de OO e Java

Guia de Fatores de Qualidade de OO e Java Qualiti Software Processes Guia de Fatores de Qualidade de OO e Java Versã o 1.0 Este documento só pode ser utilizado para fins educacionais, no Centro de Informática da Universidade Federal de Pernambuco.

Leia mais

Ferramenta para Geração de Código a partir da Especialização do Diagrama de Classes

Ferramenta para Geração de Código a partir da Especialização do Diagrama de Classes Ferramenta para Geração de Código a partir da Especialização do Diagrama de Classes Alexandro Deschamps (Ápice) alexandro@apicesoft.com Everaldo Artur Grahl (FURB/DSC) egrahl@furb.br Resumo. Uma das grandes

Leia mais

Iniciando o MySQL Query Brower

Iniciando o MySQL Query Brower MySQL Query Brower O MySQL Query Browser é uma ferramenta gráfica fornecida pela MySQL AB para criar, executar e otimizar solicitações SQL em um ambiente gráfico. Assim como o MySQL Administrator foi criado

Leia mais

ARMAZENAMENTO DE DADOS INTERMEDIÁRIOS

ARMAZENAMENTO DE DADOS INTERMEDIÁRIOS ARMAZENAMENTO DE DADOS INTERMEDIÁRIOS Leandro R. Pádua Divisão de Ciência da Computação Instituto Tecnológico de Aeronáutica (ITA) São José dos Campos, SP Brasil padualrp@gmail.com Abstract. When performing

Leia mais

O essencial do comando mysqladmin, através de 18 exemplos

O essencial do comando mysqladmin, através de 18 exemplos O essencial do comando mysqladmin, através de 18 exemplos Elias Praciano O mysqladmin é uma ferramenta de linha de comando que vem junto com a instalação do servidor MySQL e é usada por administradores

Leia mais

TCP/IP - NÍVEL APLICAÇÃO (utilizador)

TCP/IP - NÍVEL APLICAÇÃO (utilizador) Protocolos de Aplicação (Telnet, FTP, SMTP, POP, HTTP) TCP/IP - NÍVEL APLICAÇÃO (utilizador) TCP UDP ICMP IP ARP Acesso à rede Secção de Redes de Comunicação de Dados Redes de Computadores Correio Electrónico

Leia mais

Project Management Activities

Project Management Activities Id Name Duração Início Término Predecessoras 1 Project Management Activities 36 dias Sex 05/10/12 Sex 23/11/12 2 Plan the Project 36 dias Sex 05/10/12 Sex 23/11/12 3 Define the work 15 dias Sex 05/10/12

Leia mais

O que é a UML? Introdução a UML. Objetivos da Modelagem. Modelos. A UML não é. Princípios da Modelagem. O que é um modelo?

O que é a UML? Introdução a UML. Objetivos da Modelagem. Modelos. A UML não é. Princípios da Modelagem. O que é um modelo? O que é a UML? Introdução a UML Linguagem Gráfica de Modelagem para: Visualizar Especificar Construir Documentar Comunicar Artefatos de sistemas complexos Linguagem: vocabulário + regras de combinação

Leia mais

Sumário. Cópia de Sumário Crystal 10 Guia Prático.pmd 285

Sumário. Cópia de Sumário Crystal 10 Guia Prático.pmd 285 Sumário 1 Crystal Reports...1 1.1 Introdução... 1 1.2 Um pouco de História... 1 1.3 Novidades e Melhorias da Versão 10... 2 1.3.1 Acesso a Dados Simplificados (Business Views)... 3 1.3.2 Repositório...

Leia mais

Técnicas de programação no desenvolvimento de um sistema em Delphi

Técnicas de programação no desenvolvimento de um sistema em Delphi Técnicas de programação no desenvolvimento de um sistema em Delphi Carlos A. P. Araújo Centro Universitário Luterano de Santarém (CEULS) Santarém Pará Brasil carlos@controlautomacao.com.br Resumo. Tempo

Leia mais

SOLID através de BDD um guia prático para rubistas. Lucas Húngaro software developer

SOLID através de BDD um guia prático para rubistas. Lucas Húngaro software developer SOLID através de BDD um guia prático para rubistas Lucas Húngaro software developer SOLID Conjunto de princípios desenvolvidos por Bob Martin que devem ser aplicados para melhorar a qualidade do código

Leia mais

Algoritmos em Javascript

Algoritmos em Javascript Algoritmos em Javascript Sumário Algoritmos 1 O que é um programa? 1 Entrada e Saída de Dados 3 Programando 4 O que é necessário para programar 4 em JavaScript? Variáveis 5 Tipos de Variáveis 6 Arrays

Leia mais

A Importância da Disciplina de Análise & Design para uma Aplicação. Ivan Zilotti Alencar 01/06/2006 ialencar@gmail.com

A Importância da Disciplina de Análise & Design para uma Aplicação. Ivan Zilotti Alencar 01/06/2006 ialencar@gmail.com A Importância da Disciplina de Análise & Design para uma Aplicação Ivan Zilotti Alencar 01/06/2006 ialencar@gmail.com Apresentações Sua empresa/instituição Seu papel Sua experiência Em requisitos Processo

Leia mais

do grego: arkhé (chefe ou mestre) + tékton (trabalhador ou construtor); tekhne arte ou habilidade;

do grego: arkhé (chefe ou mestre) + tékton (trabalhador ou construtor); tekhne arte ou habilidade; 1 ARQUITETURA E DESIGN DE SOFTWARE O que é Arquitetura? do grego: arkhé (chefe ou mestre) + tékton (trabalhador ou construtor); tekhne arte ou habilidade; do dicionário: Arte de projetar e construir prédios,

Leia mais

Trabalho Prático Nº1 Introdução ao C#.NET

Trabalho Prático Nº1 Introdução ao C#.NET Trabalho Prático Nº1 Introdução ao C#.NET 1. OBJECTIVOS - Entender o contexto da plataforma.net - Desenvolver programas simples em C#.NET - Saber efectuar entradas de dados em modo Consola e Windows Forms

Leia mais

EDDL- Electronic Device Description Language

EDDL- Electronic Device Description Language EDDL- Electronic Device Description Language César Cassiolato Gerente de Produtos - Smar Equipamentos Industriais Ltda Introdução Quando falamos em protocolos digitais abertos, um dos tópicos mais importantes

Leia mais

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS Coleções Conceitos e Utilização Básica c Professores de ALPRO I Faculdade de Informática PUCRS 05/2012 ALPRO I (FACIN) Coleções: Básico 05/2012 1 / 41 Nota Este material não pode ser reproduzido ou utilizado

Leia mais

UML Unified Modeling Language

UML Unified Modeling Language UML Unified Modeling Language Linguagem de Modelagem Unificada A linguagem UML UML (Unified Modeling Language) Linguagem de Modelagem Unificada É uma linguagem para especificação, É uma linguagem para

Leia mais

Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre César M de Oliveira

Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre César M de Oliveira Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Introdução Autoria:Aristófanes Corrêa Silva Adaptação: Alexandre

Leia mais

Engenharia de Software I

Engenharia de Software I Engenharia de Software I Rogério Eduardo Garcia (rogerio@fct.unesp.br) Bacharelado em Ciência da Computação Aula 05 Material preparado por Fernanda Madeiral Delfim Tópicos Aula 5 Contextualização UML Astah

Leia mais

DESENVOLVIMENTO DE SOFTWARE

DESENVOLVIMENTO DE SOFTWARE VARIAÁ VEL Antes de iniciarmos os comandos referentes a Banco de Dados, precisamos de uma breve descrição técnica sobre Variáveis que serão uma constante em programação seja qual for sua forma de leitura.

Leia mais

Laravel: De Aprendiz a Artesão (Brazilian Portuguese)

Laravel: De Aprendiz a Artesão (Brazilian Portuguese) Laravel: De Aprendiz a Artesão (Brazilian Portuguese) Taylor Otwell and Pedro Borges This book is for sale at http://leanpub.com/laravel-pt-br This version was published on 2013-10-01 This is a Leanpub

Leia mais

Programas eram lineares e com poucos módulos (Programação estruturada) Aumento da complexidade dos sistemas e difícil reusabilidade dos mesmos

Programas eram lineares e com poucos módulos (Programação estruturada) Aumento da complexidade dos sistemas e difícil reusabilidade dos mesmos OO -Objetos, classes, atributos, métodos, estado, comportamento e identidade (Slide) Prof. Bruno Gomes bruno.gomes@ifrn.edu.br Programação Orientada a Objetos Introdução Programas eram lineares e com poucos

Leia mais

Modelo para Documento de. Especificação de Requisitos de Software

Modelo para Documento de. Especificação de Requisitos de Software Modelo para Documento de Especificação de Requisitos de Software (Baseado na norma IEEE Std 830-1993 - Recommended Practice for Software Requirements Specifications) A boa organização lógica do documento

Leia mais

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo

JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo JAVA 1.5 na plataforma J2SE 5.0 Tiger Novas Construções, Sintaxe, Tipos e Polimorfismo GENERICS (Tipos Parametrizados, Classes Parametrizadas) : têm o objectivo de tornar as Colecções seguras em termos

Leia mais

Introdução ao SQL. O que é SQL?

Introdução ao SQL. O que é SQL? Introdução ao SQL 1 O que é SQL? Inicialmente chamada de Sequel, SQL (Structured Query Language), é a linguagem padrão utilizada para comunicar-se com um banco de dados relacional. A versão original foi

Leia mais