FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM C++ BASEADO EM PADRÕES DE LEGIBILIDADE

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

Download "FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM C++ BASEADO EM PADRÕES DE LEGIBILIDADE"

Transcrição

1 i UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO (Bacharelado) FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM C++ BASEADO EM PADRÕES DE LEGIBILIDADE TRABALHO DE CONCLUSÃO DE CURSO SUBMETIDO À UNIVERSIDADE REGIONAL DE BLUMENAU PARA A OBTENÇÃO DOS CRÉDITOS NA DISCIPLINA COM NOME EQUIVALENTE NO CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO DENIS ALBERTO DALMOLIN BLUMENAU, NOVEMBRO/ /2-18

2 FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM C++ BASEADO EM PADRÕES DE LEGIBILIDADE DENIS ALBERTO DALMOLIN ESTE TRABALHO DE CONCLUSÃO DE CURSO, FOI JULGADO ADEQUADO PARA OBTENÇÃO DOS CRÉDITOS NA DISCIPLINA DE TRABALHO DE CONCLUSÃO DE CURSO OBRIGATÓRIA PARA OBTENÇÃO DO TÍTULO DE: BACHAREL EM CIÊNCIAS DA COMPUTAÇÃO Prof. Everaldo Artur Grahl Orientador na FURB Prof. José Roque Voltolini da Silva Coordenador do TCC BANCA EXAMINADORA Prof. Everaldo Artur Grahl Prof. Roberto Heinzle Prof. Paulo César Rodacki Gomes ii

3 SUMÁRIO SUMÁRIO...iii RESUMO...v ABSTRACT...vi LISTA DE FIGURAS...vii 1 INTRODUÇÃO ORIGEM OBJETIVOS ORGANIZAÇÃO LINGUAGEM C HISTÓRICO LINGUAGEM C ESTRUTURA BÁSICA DE UM PROGRAMA EM C VARIÁVEIS EM C OPERADORES ESTRUTURAS DE REPETIÇÃO ESTRUTURAS DE DECISÃO PROGRAMAÇÃO ORIENTADA A OBJETO OBJETOS POLIMORFISMO HERANÇA QUALIDADE DE SOFTWARE CONSIDERAÇÕES INICIAIS...13 iii

4 3.2 PADRONIZAÇÃO LEGIBILIDADE REESTRUTURAÇÃO PADRÕES PADRÃO DE COMPOSIÇÃO DE MÓDULOS PADRÃO GERAL PADRÃO DE ESTILO PADRÃO PARA ESCOLHA DE NOMES DESENVOLVIMENTO DO SOFTWARE ANÁLISE DO PROGRAMA FONTE DEFINIÇÕES DO SOFTWARE ESPECIFICAÇÕES DO SOFTWARE ESTRUTURA DO SOFTWARE FUNCIONAMENTO DO SOFTWARE CONCLUSÃO CONSIDERAÇÕES FINAIS LIMITAÇÕES E SUGESTÕES...37 ANEXOS...38 ANEXO 1 - PADRÃO DE COMPOSIÇÃO DE MÓDULOS...38 ANEXO 2 - PADRÃO GERAL...42 ANEXO 3 - PADRÃO DE ESTILO...51 ANEXO 4 - PADRÃO PARA A ESCOLHA DE NOMES...60 REFERÊNCIAS BIBLIOGRÁFICAS...68 iv

5 RESUMO Este trabalho consiste no desenvolvimento de uma ferramenta que analisa e faz a reestruturação de código fonte em C++, utilizando padrões de legibilidade, obtidos em pesquisa bibliográfica. A ferramenta permite melhorar a legibilidade e consequentemente aumenta a qualidade dos fontes escritos em linguagem de programação C++, através do padrão geral e o padrão de estilo. v

6 ABSTRACT This study consists a development tool that analyzes and restructuring C++ sources codes, using legibility patterns, obtained in library research. The tool permit of improving the legibility and consequently increasing sources quality writings in language of programming C++, through in general and style patterns. vi

7 LISTA DE FIGURAS 1 ESTRUTRA DE UM PROGRAMA EM C DIAGRAMA DE CASOS DE USO DIAGRAMA DE CLASSES DIAGRAMA DE SEQUÊNCIA FLUXOGRAMA DO FUNCIONAMENTO DO SOFTWARE TELA PRINCIPAL DO SOFTWARE TELA DE ABERTURA DE ARQUIVOS PARA REESTRUTURAÇÃO TELA PRINCIPAL COM UM ARQUIVO FONTE EM C++ ABERTO TELA PARA INFORMAR O TAMANHO DE INDENTAÇÃO DO CÓDIGO FONTE TELA DE MENSAGENS SOBRE A REESTRUTURAÇÃO DO CÓDIGO FONTE TELA DE MENSAGENS POSICIONANDO NA LINHA COM O PROBLEMA TELA DO SOFTWARE COM EXEMPLO DE CÓDIGO FONTE ANTES E DEPOIS DA REESTRUTURAÇÃO vii

8 1 1 INTRODUÇÃO Este capítulo trata das considerações iniciais sobre o trabalho, sua importância e objetivos a serem alcançados e organização do trabalho. 1.1 ORIGEM Hoje em dia busca-se a qualidade no software a um custo mais baixo. Para obter um produto final com qualidade, a empresa deve estabelecer mecanismos de garantia da qualidade desde o começo de um projeto. Estes mecanismos são difíceis de serem implantados em certas empresas devido a utilização de métodos e ambientes tradicionais pelas equipes de projeto e desenvolvimento de software ([PRE1995]). As empresas estão reconhecendo a importância econômica do software para a competitividade empresarial e começam a exigir dos seus fornecedores produtos com maior qualidade. As empresas de software por sua vez também estão sentindo que a concorrência está aumentando e obrigam-se a melhorar a qualidade dos seus produtos e a revisar seus métodos e ambiente de desenvolvimento, procurando por padrões de desenvolvimento do código fonte para agilizar e reduzir custos com a manutenção do software ([FER1995]). Uma das linguagens de programação mais populares atualmente no mercado é o C++. Com a linguagem C++ pode-se construir programas organizados e concisos, ocupando pouco espaço de memória com alta velocidade de execução. Infelizmente, dada toda a flexibilidade da linguagem, também pode-se escrever programas desorganizados e difíceis de serem compreendidos. Esta prática, não tão incomum nas empresas é justamente o foco deste trabalho. 1.2 OBJETIVO Este trabalho tem como objetivo principal especificar e implementar uma ferramenta que apoie a reestruturação de código fonte escrito em linguagem C++ utilizando padrões de legibilidade. Estes padrões foram obtidos a partir de pesquisa bibliográfica.

9 2 1.3 ORGANIZAÇÃO O trabalho é composto por seis capítulos. Neste primeiro capítulo foram apresentados a origem do trabalho, objetivo e organização. No segundo capítulo são apresentadas as principais características da linguagem de programação C e C++, além de uma apresentação sobre a programação orientada a objeto, seus conceitos e características. No terceiro capítulo são apresentados conceitos e características da qualidade de software e os padrões utilizados para a elaboração do software. No quarto capítulo é descrito a especificação do protótipo, assim como detalhes sobre sua implementação. No quinto capítulo são apresentadas as conclusões e sugestões sobre o trabalho desenvolvido.

10 3 2 LINGUAGEM C Este capítulo trata da linguagem de programação C e sua evolução, demonstrando seu histórico, principais construções, vantagens na utilização do C. Descreve também a programação orientada a objeto. 2.1 HISTÓRICO Nos anos 70, a linguagem C foi inventada e implementada pela primeira vez por Dennis Ritchie em um equipamento DEC PDP-11, usando o sistema operacional UNIX. A linguagem C é o resultado do processo de desenvolvimento iniciado com outra linguagem, chamada BCPL, desenvolvida por Martin Richards. Esta linguagem influenciou a linguagem inventada por Ken Thompson, chamada B, a qual levou ao desenvolvimento da linguagem C ([SCH1992]). A linguagem C é freqüentemente referenciada como uma linguagem de nível médio, posicionando-se entre o assembler (baixo nível) e o Pascal (alto nível). Uma das razões da invenção da linguagem C foi dar ao programador uma linguagem de alto nível que poderia ser utilizada como uma substituta para a linguagem assembler. Suas características segundo [MIZ1994] são: a) portabilidade entre máquinas e sistemas operacionais. b) dados compostos em forma estruturada. c) programas Estruturados. d) total interação com o Sistema Operacional. A linguagem C quando comparada com outras linguagens de complexidade análoga se mostra mais compacta e rápida. A linguagem C tornou-se uma das linguagens de programação mais usadas (e desejadas). Flexível, ainda que poderosa, a linguagem C tem sido utilizada na criação de

11 4 alguns dos mais importantes produtos de software dos últimos anos. Entretanto, a linguagem encontra seus limites quando o tamanho do projeto ultrapassa um certo ponto. Ainda que esse limite possa variar de projeto para projeto, quando o tamanho de um programa se encontra entre e linhas, torna-se problemático o seu gerenciamento, tendo em vista que é difícil compreendê-lo como um todo. Para resolver este problema, em 1980, enquanto trabalhava nos laboratórios da Bell, em Murray Bill, New Jersey, Bjarne Stroustrup acrescentou várias extensões à linguagem C e chamou inicialmente esta nova linguagem de C com Classes. Entretanto, em 1983, o nome foi mudado para C++ ([SCH1992]). 2.2 LINGUAGEM C++ Quando o C++ foi inventado ([SCH1992]), Bjarne Stroustrup sabia que era importante manter o espírito original da linguagem C, incluindo a eficiência, a natureza de nível médio e a filosofia de que o programador, não a linguagem, está com as responsabilidades, enquanto, ao mesmo tempo, acrescenta o suporte à programação orientada ao objeto. Assim, o C++ proporciona ao programador a liberdade e o controle da linguagem C junto com o poder dos objetos. As características da orientação ao objeto em C++, usando as palavras de Stroustrup, permite aos programas serem estruturados quanto a clareza e extensibilidade, tornando fácil a manutenção sem perda de eficiência. Segundo [HOL1994], o que tornou o C++ famoso foi a capacidade de trabalhar com objetos. A linguagem C++ serve exatamente para isto: dividir programas grandes em objetos gerenciáveis e independentes. Esses objetos poderão cuidar de todas as operações que eles precisam para si mesmos tais como gravar a si próprios num arquivo em disco. Dessa forma, pode-se pensar em objetos em termos de seu uso geral, sem ter de lembrar todos os detalhes de seu manuseio interno. Na verdade, um objeto é muito parecido com um novo tipo de estrutura exceto que ele pode conter tanto dados quanto funções.

12 5 2.3 ESTRUTURA BÁSICA DE UM PROGRAMA C Os conceitos e comandos sobre a linguagem de programação C encontrados à partir deste capítulo, foram obtidos através de manuais e tutoriais encontrados em [PIR2000] e [AID2000]. A estrutura de um programa em C consiste em uma coleção de funções, onde a função main ( ) é a primeira função a ser executada, é o início da função e } é o fim da função. A função main ( ) tem que existir em algum lugar, ela marca o início da execução, como demonstrado na figura 1. FIGURA 1 ESTRUTURA DE UM PROGRAMA EM C 2.4 VARIÁVEIS EM C Os nomes de variáveis podem conter letras, números e caracter de sublinhado. Porém: a) o primeiro caracter não pode ser número: ex.: br_01, _br01 01_br (NÃO é permitido) b) letras maiúsculas são diferentes de letras minúsculas (convenção : minúsculas) ex.: A1 é diferente de a1

13 6 c) não podemos usar palavras reservadas ex.: int, float, if, else, etc... Os tipos básicos em na linguagem C são: char - apenas 1 caracter alfanumérico (geralmente ocupa 1 byte) int - nºs inteiros ex.: 7 (geralmente ocupa 2 bytes) float - nºs fracionários com precisão simples ex.: 7.5 (geralmente ocupa 4 bytes) double - nºs fracionários com precisão dupla (geralmente ocupa 8 bytes) void - indica que não retorna nada. Na declaração de variáveis utiliza-se a seguinte sintaxe: tipo nome_variável ; ex.: int x, y ; float f ; Para a inicialização de variáveis utiliza-se a sintaxe: nome_variável = valor ; ex.: x = y = 10 ; f = 3.5 ; 2.5 OPERADORES Os operadores de atribuição possui a sintaxe: nome_variável = expressão ; ex.: y = 2 ; /* atribui o valor 2 a y */ x = 4 * y + 3 ; /* atribui o valor da expressão a x */ Os operadores aritméticos são divididos em operadores unários: a) Operadores Unários que atuam sobre apenas um operando - (menos unário) multiplica o operando por (-1) ++ (incremento) incrementa o operando em uma unidade -- (decremento) decrementa o operando em uma unidade ex.: x = 2 ; e y = 4*x + 3 ; b) Operadores Binários atuam sobre dois operandos + (adição) - (subtração) * (multiplicação) / (divisão)

14 7 % (mod) - fornece o resto da divisão de 2 nºs inteiros ex.: 10 % 2 = 0, 11 % 2 = 1 Os operadores de Atribuição Compostos possuem a seguinte sintaxe: expressão_1 operador = expressão_2 é equivalente a expressão_1 = expressão_1 operador expressão_2 ou verdadeiro. ex.: a = a + 1 a + = 1 ou a ++ y = y 1 y - = 1 ou --y Os operadores Relacionais são usados para comparar expressões. Resultam em falso = = (igual comparação) - compara se 2 valores são iguais > (maior que) < (menor que) >= (maior ou igual) <= (menor ou igual)!= (diferente) ex.: 4 = = 3 /* resulta em falso */ 3 > 2 /* resulta em verdadeiro */ Os operadores Lógicos permitem relacionar duas ou mais expressões. && (e) - resulta em verdadeiro se ambas expressões forem verdadeiras (ou) - resulta em verdadeiro se pelo menos uma expressão for verdadeira! (não) - resulta em verdadeiro se a expressão for falsa ex.: (5 > 2) && (3!= 2) /* resulta em verdadeiro ambos verdadeiros */ (3 >= 2) (4 = = 2) /* resulta em verdadeiro pelo menos 1 verdadeiro */!(4 = = 2) /* resulta em verdadeiro pois a expressão é falsa */ 2.6 ESTRUTURAS DE REPETIÇÃO As principais estruturas de repetição são: for, while, do-while. Sintaxe do while: while (expressão de teste) Instrução; Ex: main ( ) int num = 0; while (num < 3) printf ( %d, num++); }

15 8 Sintaxe do for: for ( inicialização; teste; incremento ) Ex: main ( ) int num; for (num = 1; num <= 1000; num++) printf ( % d, num); } Sintaxe do do-while: do instrução; } while (expressão de teste); Ex: main ( ) char ch; do printf ( digite uma letra ); printf ( continua? (s / n): ); } while (getche( ) == s ); } 2.7 ESTRUTURAS DE DECISÃO As estruturas de decisão devem permitir testes para decidir ações alternativas. Os principais comandos são: if, if - else, switch e Operador Condicional (?:) O COMANDO if Forma Geral: if (condição) instrução; main ( ) char ch; ch = getche ( ); if (ch == p ) printf ( você pressionou a tecla p ); }

16 9 O COMANDO if - else O comando if só executa a instrução caso a condição de teste seja verdadeira, nada fazendo se a expressão for falsa, o comando else executará um conjunto de instruções se a expressão de teste for falsa. Forma Geral: if (condição) instrução else instrução main ( ) if (getche ( ) == p ) printf ( você digitou p ); else printf ( você não digitou p ); } O COMANDO switch O comando switch é uma forma de substituir o comando if - else ao se executar vários testes. Similar ao if - else com maior flexibilidade e formato limpo. Forma Geral: switch (expressão) case constante 1: instruções; /* opcional */ break; /* opcional */ case constante 2: instruções break; default: instruções } main ( ) float num1; } printf ( digite um n.o ); scanf ( %f, &num1); switch (num1) case 1 : printf ( digitou 1 ); break: case 2 : printf ( digitou 2 ); break; default: printf ( digitou outro ); }

17 10 O OPERADOR CONDICIONAL TERNÁRIO?: É uma forma compacta de expressar uma instrução if else. Forma Geral: (Condição)? expressão 1 : expressão 2 Max = (num1 > num2)? num1 : num2; Exemplo: ABS = (num < 0)? - num : num; 2.8 PROGRAMAÇÃO ORIENTADA A OBJETO A programação orientada a objeto aproveitou as melhores idéias da programação estruturada e combinou-as com novos conceitos. A programação orientada a objeto permite que um problema seja mais facilmente decomposto em subgrupos relacionados ([SCH1992]). Todas as linguagens de programação orientadas a objeto possuem três coisas em comum: objetos, polimorfismo e herança ([SCH1992]) OBJETOS A característica mais importante de uma linguagem orientada a objeto é o objeto. De maneira simples, um objeto é uma entidade lógica que contém dados e código para manipular esses dados. Dentro de um objeto, alguns códigos e/ou dados podem ser privados ao objeto e inacessíveis diretamente para qualquer elemento fora dele. Dessa maneira, um objeto evita significativamente que algumas outras partes não relacionadas de programa modifiquem ou usem incorretamente as partes privadas do objeto. Essa ligação dos códigos e dos dados é freqüentemente referenciada como encapsulamento ([SCH1992]). Exemplo de um objeto em C++: class CToken public: CToken(); virtual ~CToken();

18 11 protected: char TokenName; int TokenType; }; POLIMORFISMO Linguagens de programação orientadas a objeto suportam polimorfismo, o que significa essencialmente que um nome pode ser usado para muitos propósitos relacionados, mas ligeiramente diferentes. A intenção do polimorfismo é permitir a um nome ser usado para especificar uma classe geral de ações. Entretanto, dependendo do tipo de dado que está sendo tratado, uma instância específica de um caso geral é executada. Por exemplo, pode-se ter um programa que define três tipos diferentes de pilha. Uma pilha é usada para valores inteiros, uma para valores de ponto flutuante e uma, para inteiros longos. Por causa do polimorfismo, pode-se criar três conjuntos de funções para essas pilhas, chamadas põe() e tira(), e o compilador selecionará a rotina correta, dependendo com qual tipo a função é chamada. Nesse exemplo, o conceito geral é pôr e tirar dados de e para a pilha. As funções definem a maneira específica como isso é feito para cada tipo de dado ([SCH1992]). Exemplo de polimorfismo em C++: class CInteiro public: void SetaValor (int var); protected: int Variavel; }; class CLongo public: void SetaValor (long var); protected: long Variavel; }; Observe que no exemplo anterior quando se chama a função SetaValor, com um parâmetro long, ela vai ser tratada na classe CLongo, e quando chamar com o parâmetro int, ela vai ser tratada na classe CInteiro.

19 HERANÇA Herança é o processo em que um objeto pode adquirir as propriedades de outro objeto. Sendo importante, pois suporta o conceito de classificação. Considerando-o por classificações hierárquicas, mais conhecimento torna-se gerenciável. Por exemplo, uma deliciosa maçã vermelha é parte da classificação maçã, que, por sua vez, faz parte da classificação frutas, que está na grande classe comida. Sem o uso de classificações, cada objeto precisaria definir explicitamente todas as suas características. Portanto, usando-se classificações, um objeto precisa definir somente aquelas qualidades que o tornam único dentro da classe. Ele pode herdar as qualidades que compartilha com a classe mais geral. É o mecanismo de herança que torna possível a um objeto ser uma instância específica de uma classe mais geral. Exemplo de herança em C++: class Frutas public: Frutas(); void Comer();... } class Banana : public Frutas public: Banana(); void Amassar();... }; Observe no exemplo anterior que a classe Banana é derivada da classe Frutas, a classe Banana está herdando propriedades e métodos da outra classe mais geral chamada Frutas.

20 13 3 QUALIDADE DE SOFTWARE Este capítulo trata sobre a qualidade de software e sua importância no desenvolvimento e manutenção de programas, a influência da legibilidade e da reestruturação de software na melhoria da qualidade de software e padrões de legibilidade pesquisados para programação em linguagem C CONSIDERAÇÕES INICIAIS Ao longo da década de 1980, segundo [PRE1995] os principais objetivos da área de computação estavam voltados para o avanço do hardware. Houve uma crescente evolução no hardware ocasionando em um aumento da capacidade de processamento e armazenamento de informação a um custo cada vez mais baixo. Hoje se procura resolver outro problema que é a busca da qualidade do software a um custo mais baixo. Durante os primeiros anos de sua existência, o software era projetado sob medida e produzido por funcionários da própria empresa que o utilizava. O projeto só existia na mente de alguém. A manutenção era feita pela mesma pessoa que desenvolvia o software e a documentação era considerada desnecessária ([PRE1995]). Com o crescimento do tamanho e da complexidade dos programas, bem como com o desenvolvimento de programas para fins econômicos, tornou-se evidente a necessidade de utilizar um instrumental mais poderoso do que simplesmente arte e intuição. Assim sendo, apenas recentemente é que o estudo aprofundado do processo de programação tornou-se interessante. Como conseqüência deste estudo, existem hoje diversas propostas de métodos para o desenvolvimento de programas com elevado nível de qualidade ([STA1983]). Para obter um produto final com qualidade, a empresa deve estabelecer mecanismos de garantia da qualidade desde o começo de um projeto. Estes mecanismos são difíceis de serem implantados em certas empresas devido a utilização de métodos e ambientes tradicionais pelas equipes de projeto e desenvolvimento de software. Dados estatísticos indicam que entre 50%

21 14 e 70% de todo o esforço gasto num programa acontece depois que ele é entregue ao cliente ([PRE1995]). De uma forma genérica pode-se dizer que um software de boa qualidade produz resultados úteis e confiáveis na oportunidade certa; é ameno ao uso; é mensurável e auditável; é corrigível, modificável, e volutível; opera em máquinas e ambientes reais; foi desenvolvido de forma econômica e no prazo estipulado; e opera com economia de recursos. Qualidade de software é, pois, um conceito muito mais amplo do que software correto e bem documentado, requerendo, para ser conseguida, métodos e técnicas de desenvolvimento específicas ([STA1983]). Atualmente, as empresas estão reconhecendo a importância econômica do software para a competitividade empresarial e começam a exigir dos seus fornecedores, produtos com maior qualidade. As empresas de software por sua vez também estão sentindo que a concorrência está aumentando e se obrigam a melhorar a qualidade dos seus produtos e a revisar seus métodos e ambiente de desenvolvimento ([FER1995]). É possível desenvolver software de boa qualidade mesmo trabalhando de forma pouco sistemática ([STA1983]). Entretanto, estes são casos raros e, usualmente, são conseguidos por profissionais muito talentosos. Interessa-nos elevar o nível médio de qualidade dos softwares desenvolvidos, aumentar a produtividade do desenvolvimento, sem, no entanto, requerer profissionais difíceis de serem encontrados. Necessita-se pois, instrumentos que assegurem uma melhor qualidade quando aplicados de modo sistemático. Um software de boa qualidade tenderá a ter uma maior rentabilidade, do que um software funcionalmente semelhante porém de baixa qualidade. Porém, se for exagerado nos níveis de qualidade, a rentabilidade poderá vir a ficar comprometida. Isto reforça a necessidade de se projetar a qualidade desejável, de modo que não se venha a ter prejuízos decorrentes, tanto da falta como do excesso de qualidade ([STA1983]). A falta de boas especificações tem levado a insatisfações e frustrações, a programas que não fazem o que se deseja, a programas resistentes a alterações (manutenção), a programas remendados e de baixa qualidade e a um considerável volume de esforço perdido.

22 15 Em suma, é na falta de especificações adequadas que se localiza uma das principais causas da existência de programas de baixa qualidade e com custos de desenvolvimento e operação elevados ([STA1983]). O aumento da concorrência e crescentes exigências do mercado global em solicitar produtos com maior qualidade leva as organizações a procurarem padrões de desenvolvimento do código fonte para a agilizar e reduzir custos com a manutenção do software. 3.2 PADRONIZAÇÃO Infelizmente os engenheiros de software parecem ter uma certa repulsa sobre a palavra padronização. Um padrão é algo estabelecido por uma autoridade, cliente, ou pelo consenso geral, para um modelo ou exemplo. Entretanto com o melhoramento da qualidade, os problemas são resolvidos por pessoas que conhecem tanto o trabalho quanto o problema. Um padrão é normalmente o menor denominador comum pelo qual todos podem concordar em usar. A frase tente agradar a todos e você não agradará a ninguém, vem imediatamente à nossa mente. O que se quer realmente é consistência, mas não necessariamente uma forma idêntica de aplicação dos melhoramentos por toda a organização do sistema ([ART1994]). 3.3 LEGIBILIDADE Legibilidade diz respeito às características lexicais das informações apresentadas que possam dificultar ou facilitar a leitura desta informação (brilho do caracter, contraste letra/fundo, tamanho da fonte, espaçamento entre palavras, espaçamento entre linhas, espaçamento de parágrafos, comprimento da linha, etc.) ([LAB2000]). A performance melhora quando a apresentação da informação leva em conta as características cognitivas e perceptivas dos usuários. Uma boa legibilidade facilita a leitura da informação apresentada.

23 REESTRUTURAÇÃO Segundo [FUR1994], reestruturação é uma área da Reengenharia da Informação que trata do processo de padronização de nome de dados e estruturação de programas. Existem basicamente dois tipos de reestruturação: a) reestruturação de código fonte: análise dos fluxos de controle e lógica de programação com geração de uma versão estruturada do código-fonte original sem alterações de sua funcionalidade; b) reestruturação de dados: visa eliminar redundâncias de nomes para a mesma lógica de dados, adotando-se um nome padrão para os elementos em nível de análise de área de negócio. A reestruturação do código-fonte contribui para a melhoria da produtividade na manutenção de sistemas, mas em alguns casos, poderá ter efeito contrário. Quando alguém conhece um programa desestruturado, normalmente não mais irá reconhecê-lo após uma reestruturação. Já no caso de não conhecer o programa, certamente encontrará mais facilidade em compreendê-lo após tal reestruturação. Um questão fundamental na reestruturação é que preservar o conhecimento é mais importante do que melhorar sua reestruturação. Para se reestruturar programas ou módulos, primeiramente deve-se analisar, revisar e corrigir e, em seguida, gerar automaticamente o programa de forma estruturada. O processo automatizado de reestruturação de programas cria por sua vez alguns problemas colaterais do tipo: os programas tendem a se tornar maiores, as sentenças deixam de ser familiares. Segundo [FUR1994], as ferramentas para reestruturação tem sido empregadas com sucesso para a melhoria da produtividade no processo de manutenção, redução de defeitos, realocação de pessoal técnico e posicionamento do código para análises subsequentes. Tais ferramentas utilizadas por profissionais adequadamente capacitados, podem desempenhar um papel-chave na preparação dos sistemas para eventual recuperação do desenho ou reutilização.

24 PADRÕES Serão apresentados os tópicos de regras e recomendações aplicáveis às diversas etapas do desenvolvimento de programas, para visualizar as regras de cada padrão você pode consultar o Anexo 1, 2, 3 e 4 deste trabalho. Estas padrões estudados foram obtidos do livro de [STA2000]. O objetivo é fornecer aos projetistas e aos programadores padrões básicos visando construir programas de boa qualidade. Estes padrões foram desenvolvidos sem visar uma organização (empresa) específica, portanto devem ser adaptados às características específicas de cada organização ([STA200]). Os principais padrões de legibilidade abordados são: a) padrão de composição de módulos; b) padrão geral; c) padrão de estilo; d) padrão para a escolha de nomes. 3.6 PADRÃO DE COMPOSIÇÃO DE MÓDULOS Este padrão trata de regras e recomendações de como criar e declarar módulos de definição e de implementação em C e C++. O padrão de composição de módulos tem como principais objetivos: a) assegurar a existência de definições de interfaces entre módulos; b) assegurar a consistência dos módulos que compartilhem uma mesma interface.

25 PADRÃO GERAL Este padrão trata de regras e recomendações de como utilizar a linguagem padrão, declaração de protótipos e de cabeçalhos de funções, fazer declarações, o uso de expressões e comandos e sobre sequência de execução de comandos em C++, e tem por objetivo reduzir a frequência de erros e defeitos mais corriqueiros em programação. 3.8 PADRÃO DE ESTILO Este padrão trata de regras e recomendações sobre o estilo de programação como o espaçamento da margem esquerda, estilo de declarações de variáveis, estilo de expressões e atribuições, estilo de blocos e estruturas de controle. O padrão de estilo tem como principais objetivos: a) uniformizar o estilo de programação da organização; b) reduzir a necessidade de treinamento ao alocar um novo programador; c) facilitar a compreensão, manuseio e modificação de programas escritos por outros. 3.9 PADRÃO PARA A ESCOLHA DE NOMES Este padrão trata sobre a estrutura genérica de um nome, sobre prefixos de componente e de módulo, prefixos de tipo, temas, abreviações, sufixo de tipo, variáveis de rascunho, constantes enumeradas e possui ainda uma tabela de identificadores de tipos primários, tabela de abreviações e palavras padronizadas, tabela de verbos identificadores de funções e métodos, e de sufixos de tipo padronizado. O padrão para escolha de nomes e tem como principais objetivos: a) uniformizar a forma de escolher nomes ao desenvolver ou manter programas redigidos em C ou C++;

26 19 b) tornar a criação de novos nomes independente do redator do programa; c) facilitar a lembrança e o entendimento dos nomes dos elementos, reduzindo a necessidade de consulta a documentação complementar; d) facilitar a verificação do correto uso dos elementos do programa; e) facilitar a localização do documento e a correspondente seção, contendo a especificação e a declaração completa do elemento denominado.

27 20 4 DESENVOLVIMENTO DO SOFTWARE Este capítulo trata sobre o software desenvolvido, suas definições, especificações e implementação e descreve também sobre o funcionamento passo a passo do software. 4.1 ANÁLISE DO PROGRAMA FONTE O estudo do padrão de composição de módulos não gerou nenhuma implementação no software aqui proposto, pois ele relata como deve ser nomeado arquivos escritos em C e C++, como deve-se declarar módulos de definição e implementação, e como organizar as declarações e implementações, tornando difícil a reestruturação do código. O estudo do padrão geral gerou a implementação de mensagens de avisos, de recomendações e de erro no software implementado. Como por exemplo a utilização de comandos não recomendados e não permitidos, que para não alterar o fluxo e a integridade do programa a ser reestruturado, estão gerando mensagens para o usuário. Muitas das regras contidas no padrão de estilo foram utilizadas para a implementação do software aqui proposto, devido o estilo de programação do programador ser mais previsível do que regras e recomendações de outros padrões aqui estabelecidos. O estudo do padrão para escolha de nomes não gerou nenhuma implementação para o software aqui proposto, pois não se sabe sobre o escopo do programa ou o que uma função ou procedimento deverá fazer, tornando a reestruturação de nomes muito complexa ou mesmo impossível. Para o desenvolvimento do software, seguiu-se a mesma linha da análise de código fonte feito por compiladores. No processo de compilação, a análise compõe-se de três fases ([ZSC1999]):

28 21 a) Análise linear, na qual o programa fonte é percorrido e o analisador extrai os elementos básicos da linguagem chamados tokens. Os tokens são seqüências de caracteres com sentido coletivo. b) Análise hierárquica, na qual os tokens são agrupados hierarquicamente em coleções aninhadas. c) Análise semântica, na qual certos testes são efetuados para se certificar que os componentes do programa estão agrupados de uma forma correta. O analisador linear ou léxico é comumente chamado scanner e o processo de análise léxica, portanto, é chamado scanning. Na análise léxica, o programa fonte é percorrido e o analisador extrai os elementos básicos da linguagem chamados tokens. Os tokens são as palavras que formam a linguagem. Por exemplo, na linguagem C++ alguns tokens seriam if, while,, }, =, identificadores, constantes, etc. O analisador léxico é chamado por demanda pelo analisador sintático, como será visto mais adiante. A cada vez que o léxico for chamado, devolve um token válido da linguagem. Ocasionalmente, quando detectar um símbolo não reconhecido, deve ser capaz de retornar o erro apropriado ([ZSC1999]). O analisador léxico lê as linhas e procura os tokens definidos. No exemplo abaixo o token que esta sendo procurado é o, ao ser encontrado na linha ele é inserido da lista de tokens: int Pos = Linha.Find(""); if (Pos!= -1) CToken token; token.posicaoinicial = Pos + 2; token.posicaofinal = token.posicaoinicial + 1; token.tokentype = iniciot; token.numlinha = NumLinha; token.acumulo = 0; token.tokenname = ""; LexicalAnalyser.AddToken(token); } Segundo [ZSC1999] o analisador hierárquico ou sintático é comumente chamado de parser e, portanto, o processo de análise sintática é chamado de parsing. Na análise sintática, os tokens são agrupados em uma estrutura de árvore chamada árvore sintática que expressa a

29 22 ordem em que esses elementos devem ser avaliados, e essa árvore deve expressar a precedência (ordem em que operações devem ser feitas, por exemplo, '*' antes de '+') e a associatividade (ordem em que operações devem ser feitas, considerando a mesma precedência) dos operadores de uma expressão da linguagem. Se um token não pode ser encaixado nessa árvore sintática, então ocorre um erro sintático, significando que o programa fonte está incorreto, pois não corresponde à definição da linguagem que o compilador deve reconhecer. Portanto, deve-se entender o analisador sintático como um reconhecedor de linguagens. O analisador hierárquico percorre os tokens encontrados e conforme o tipo faz o tratamento adequado. No exemplo abaixo o token que esta sendo analisado é o if, onde é verificado o próximo caracter, se for um abre parênteses coloca um espaço: for (int i=0; i<qtdtokens; i++) if (Token->TokenType == ift) //verifica se proximo caracter = ( if (Fonte.GetAt(Token->PosicaoFinal) == '(') Fonte.Insert(Token->PosicaoFinal," "); } } } 4.2 DEFINIÇÕES DO SOFTWARE O software desenvolvido efetua uma análise sobre os tokens coletados e gera as seguintes análises no código fonte em C++: 1) Análise que gera avisos: neste tipo de análise o software irá avisar ao usuário sobre comandos não permitidos, e construções que não estão de acordo com algum padrão estabelecido; 2) Análise que gera modificações: neste tipo de análise o software irá copiar o texto do código fonte em C++ e irá modifica-lo de acordo com os padrões estabelecidos.

30 23 O software irá fazer as consistências com relação à Análise que gera avisos, e irá gerar as seguintes mensagens: 1) Verificar a existência do comando goto e recomendar não utilizar; 2) Verificar a existência do comando? e recomendar não utilizar; 3) Verificar a existência do comando continue e recomendar não utilizar; 4) Verificar a existência do comando friend e recomendar não utilizar; 5) Verificar a existência do comando malloc e recomendar utilizar o comando new; 6) Verificar a existência do comando realloc e recomenda utilizar o comando new; 7) Verificar a existência do comando free e recomenda utilizar o comando delete; 8) Verificar a inexistência do comando break no final do bloco do comando case e recomenda colocar o comando; 9) Verificar a inexistência do comando default no final do bloco do comando switch e recomenda colocar o comando; 10) Verificar a inexistência do comando else final em um bloco dos comandos if e else if e recomenda colocar o comando; 11) Verificar no bloco do comando case se o tamanho do bloco for maior que 5 linhas, e então recomendar a criação de função; 12) Verificar o tamanho da linha é maior que 100 caracteres e recomendar dividir a linha. 13) Verificar em expressões a existência de atribuições (ex.: vtc[ i++ ] = A), e recomendar não utilizar.

31 24 O software irá fazer as consistências com relação à Análise que gera modificações, e irá gerar as seguintes alterações: 1) Fazer o alinhamento do texto do código fonte em C++ de acordo com o valor o tamanho da indentação informado antes da reestruturação; 2) Verificar se cada variável está declarada em um linha individual, senão colocar cada variável em linha individual; 3) Na declaração de variáveis, separar o comando *, indicador de tipo ponteiro, do nome da variável e do tipo da variável; 4) Nas estruturas de controle (if, for, while, switch,...), verificar se antes do abre parênteses da condição existe um espaço, caso não existe separar colocando um espaço. 5) Nas expressões de condição, quando haver operadores lógicos (, &&), inserir uma nova linha na condição após os operadores; 6) Alinhar os delimitadores de inicio e fim de bloco (, }) com o texto do código fonte em C++; 7) Todos as estruturas de controle devem ser seguidos de um início de bloco e posteriormente de final de bloco; 8) Os delimitadores de início e fim de bloco (, }) devem estar em uma linha só para eles. 4.3 ESPECIFICAÇÕES DO SOFTWARE O software foi especificado utilizando a análise orientada à objeto e mais especificamente usou-se a UML (Unified Modeling Language), com suporte da ferramenta CASE Rational Rose.

32 25 Para o software foi elaborado o diagrama de Casos de Uso apresentado na figura 2. Além disso, foi elaborado também o diagrama de Classes da figura 3: FIGURA 2 - DIAGRAMA DE CASOS DE USO Uma breve descrição dos Casos de Uso pode ser vista a seguir: a) Selecionar Arquivo - o usuário seleciona o arquivo de código fonte em C++ para fazer a análise; b) Efetuar Reestruturação o usuário inicia o processo de reestruturação do código fonte em C++, informando o tamanho da indentação do documento; c) Análise dos Resultados ou usuário analisa e efetua as devidas alterações sugeridas pelas mensagens geradas pelo software. Na figura 3 segue o diagrama de Classes:

33 26 FIGURA 3 DIAGRAMA DE CLASSES A seguir é apresentada na tabela a descrição das funções das classes do software: Classe Função Descrição CMainDoc OnFileOpen Abre o arquivo de código fonte em C++ CMainDoc OnFileClose Fecha o arquivo de código fonte em C++ aberto CMainDoc OnArquivoSalvar Salva o arquivo reestruturado CMainDoc OnArquivoReestruturar Efetua a reestruturação do arquivo de código fonte em C++ aberto CMainDoc ProcuraTokens Procura por tokens no arquivo de código fonte aberto e armazena em uma lista CMainDoc OrdenaListaToken Ordena a lista de tokens armazenados

34 27 CMainDoc AnalisaToken Faz a análise e alteração no código fonte em C++, conforme padrões estabelecidos CMainDoc AlinhaTexto Faz o alinhamento do código fonte em C++ CLexicalAnalyser AddToken CLexicalAnalyser NextToken CLexicalAnalyser GetCurrentToken CLexicalAnalyser ClearAllTokens Adiciona um token na lista de tokens Retorna o índice do próximo token Retorna o índice do token corrente Limpa a lista de tokens CToken gettokenname Retorna o nome do token corrente CToken gettokentype Retorna o tipo do token corrente CTCCLib LeLinha Lê a linha sem comentários do arquivo aberto para a reestruturação CTCCLib LeLinhaInteira Lê a linha inteira do arquivo aberto para a reestruturação CTCCLib StrNoSpcEsq Tira os espaços a esquerda da linha lida CTCCLib StrNoTabEsq Tira as tabulações a esquerda da linha lida CDlgMensagens OnInitDialog Função de inicialização da classe CDlgMensagens CarregaMenagens Joga as mensagens geradas para a tela CDlgMensagens OnDblClkDscAvisos Função que trata o clique duplo na tela de mensagens CdlgIdentação GetTamanho Função que retorna o tamanho da indentação informado CdlgIdentação OnOk Função que finaliza a classe retornando sucesso de execução CdlgIdentação OnCancel Função que finaliza a classe retornando não sucesso de execução CdlgIdentação OnInitDialog Função de inicialização da classe

35 28 Para facilitar o entendimento do Caso de Uso: Efetuar Reestruturação, foi elaborado o diagrama de sequência apresentado na figura 4: FIGURA 4 DIAGRAMA DE SEQUÊNCIA 4.4 ESTRUTURA DO SOFTWARE O software foi implementado na linguagem de programação C++ utilizando a ferramenta Microsoft Visual C++ versão 6.0. O software foi desenvolvido utilizando basicamente três classes, onde o funcionamento básico de cada uma delas são: a) classe CToken classe da estrutura onde são armazenados os tokens encontrados no arquivo de código fonte em C++;

36 29 b) classe CLexicalAnalyser classe que gerencia e armazena os tokens em uma estrutura de lista; c) classe CMainDoc classe que efetua todas as operações referentes ao arquivo que está sendo aberto e o arquivo gerado após a reestruturação, além das operações de procurar, ordenar e analisar o tokens coletados, e também alinhar o texto do código fonte informado; As outras classes restantes são apenas classes auxiliares. Na figura 5 segue o fluxograma do software. FIGURA 5 - FLUXOGRAMA DO FUNCIONAMENTO DO SOFTWARE O funcionamento do software atende os seguintes passos. Primeiro é aberto um arquivo de código fonte em C++ através do menu Arquivo Abrir. Depois é feita a reestruturação do código através das opções do menu Efetuar Reestruturação, onde é aberta

37 30 uma tela para informar o tamanho de alinhamento do texto do código fonte. Após informar o tamanho, aparecerá na tela o código fonte reestruturado proposto. A função de reestruturação do arquivo fonte realiza as seguintes tarefas: a) leitura do arquivo origem onde o arquivo é lido linha a linha e armazenado em um buffer; b) procura, separação e armazenamento dos tokens onde o tokens são identificados e armazenados na estrutura de lista; c) ordenação dos tokens após o armazenamento de todos os tokens, a lista com os tokens e ordenada pela posição do token no arquivo; d) analisa, gera mensagens e reestrutura o arquivo aberto verifica os tokens, armazena as mensagens e avisos em uma lista e altera ou reestrutura o buffer do arquivo aberto conforme padrões e recomendações estabelecidos para os tokens; e) alinha o texto do arquivo aberto armazenado no buffer alinha o texto conforme valor de indentação informado antes da reestruturação; f) grava o arquivo de destino gera e grava o arquivo de saída; g) mostra o arquivo reestruturado e as mensagens geradas coloca o arquivo reestruturado para a tela, e mostra as mensagens e avisos gerados pela reestruturação.

38 FUNCIONAMENTO DO SOFTWARE Ao iniciar o programa, será apresentado a tela principal do programa ao usuário, como demonstra a figura 6: FIGURA 6 TELA PRINCIPAL DO SOFTWARE Para iniciar o usuário deverá abrir um arquivo que contenha um programa fonte em C++, para isso ele deverá selecionar a opção Arquivo e posteriormente Abrir, o que irá abrir uma janela conforme figura 7:

39 32 FIGURA 7 TELA DE ABERTURA DE ARQUIVOS PARA REESTRUTURAÇÃO Após selecionar e abrir um arquivo, ele aparecerá na tela principal, conforme figura 8: FIGURA 8 TELA PRINCIPAL COM UM ARQUIVO FONTE EM C++ ABERTO

40 33 Após ter o arquivo aberto, o usuário poderá fazer a reestruturação do mesmo, clicando no menu em Efetuar e posteriormente Reestruturação, o que abrirá a uma tela pedindo para informar um tamanho de indentação do código fonte conforme Figura 9: FIGURA 9 TELA PARA INFORMAR O TAMANHO DE INDENTAÇÃO DO CÓDIGO FONTE Após informar o tamanho da indentação e clicar em OK o programa irá reestruturar o código fonte aberto. Se no código fonte houver comandos não permitidos ou outra condição que gere mensagens, irá abrir a tela de mensagens. Clicando duas vezes sobre a mensagem, o software irá posicionar o cursor na linha em que ocorreu o erro ou advertência. A tela de mensagens segue conforme a figuras 10 e 11. FIGURA 10 TELA DE MENSAGENS SOBRE A REESTRUTURAÇÃO DO CÓDIGO FONTE

41 34 FIGURA 11 TELA DE MENSAGENS POSICIONANDO NA LINHA COM O PROBLEMA A reestruturação apresentará um código fonte reestruturado na janela ao lado do original aberto, com todas as alterações e ajustes por ele estabelecidos. Veja que a figura 12 mostra as principais reestruturações efetuadas pelo software, mostrando o código original, o código reestruturado e comentários sobre a mudança.

42 FIGURA 12 TELA DO SOFTWARE COM EXEMPLO DE CÓDIGO FONTE ANTES E DEPOIS DA REESTRUTURAÇÃO 35

43 36 5 CONCLUSÃO Este capítulo apresenta as conclusões do trabalho. As principais limitações e sugestões para futuros trabalhos também são citadas neste capítulo. 5.1 CONSIDERAÇÕES FINAIS Os padrões utilizados para efetuar a reestruturação são de grande valia, pois tornam o código fonte mais legível, aumentando a qualidade do software e conseqüentemente diminuindo os futuros custos com a manutenção dos mesmos. O padrão geral e o padrão de estilo são importantes e por isso foram explorados na implementação do software, gerando alterações no código fonte em linguagem C++ e gerando mensagens de avisos, de recomendações e de erro no software implementado. O padrão de composição de módulos e o padrão para escolha de nomes não geraram nenhuma implementação no software. Pois as regras do padrão de composição de módulos tratam de como os arquivos de código-fonte em C++ devem ser nomeado e o que eles devem conter, e as regras do padrão para escolha de nomes tratam sobre o formato para a elaboração de nomes. Como as duas regras possuem muitas variáveis, podendo existir inúmeros estilos para uma mesma regra, a empresa ou o programador deve adotar um estilo que mais lhe agrada, o que dificulta a análise e reestruturação dos mesmos. No padrão geral foram utilizadas as regras e recomendações para o tratamento de expressões e de comandos, com o intuito de reduzir a freqüência de erros e defeitos mais corriqueiros em programação. O padrão de estilo foram utilizadas as regras e recomendações sobre margem esquerda, estilo de declarações, de expressões, de atribuições, de blocos e de estruturas de controle, com o intuito de uniformizar o estilo de programação, facilitando a compreensão, manuseio e modificação de programas escritos por outros.

44 37 Uma das constatações feitas durante o trabalho é que a utilização de tokens para a construção de um analisador léxico nesta ferramenta tornou o programa mais veloz. O código fonte fica mais legível e consequentemente de fácil manutenção. Os objetivos do trabalho foram alcançados visto que a ferramenta permite analisar e reestruturar código-fonte de programas feitos na linguagem C++, a partir de padrões de legibilidade estudados na bibliografia, como o padrão geral e o padrão de estilo que foram melhor atendidos pela ferramenta desenvolvida. 5.2 LIMITAÇÕES E SUGESTÕES Uma das limitações encontradas foi que o padrão para escolha de nomes e o padrão de composição de módulos possuem regras e/ou recomendações que não puderam ser implementadas, devido à complexidade das estruturas que as envolviam, ou mesmo a grande diversidade de definições existentes para o comando. Como exemplo os padrões para escolha de nome, que tratam de uma estrutura para o nome, que contém componente ou módulo, prefixo do tipo, tema e sufixo do tipo, e que estes componentes ainda são opcionais, dificultando ainda mais a verificação e validação do código. E os padrões para composição de módulos que estabelecem regras para o descrição da extensão de arquivos que contém códigofonte em C++, e também de uma seqüência de declarações e definições dentro de um arquivo de código-fonte em C++ que devem ser seguidos. Uma sugestão para futuros trabalhos seria a implementação de novas regras, padrões e recomendações para enriquecer a padronização e reestruturação de código fonte em C++. Ou ainda fazer a análise e reestruturação de código fonte de outras linguagens bastante utilizadas no mercado. Outra sugestão seria tornar este software mais flexível, permitindo habilitar e desabilitar determinados padrões de acordo com a necessidade do usuário

45 38 ANEXOS ANEXO 1 PADRÃO DE COMPOSIÇÃO DE MÓDULOS ARQUIVOS EM GERAL 1) Utilize os seguintes nomes de extensão de arquivos: a) C para módulos de implementação escritos em C. b) H para módulos de definição escritos em C. c) CPP para módulos de implementação escritos em C++. d) HPP para módulos de definição escritos em C++. 2) Cada módulo será composto pelo menos por dois arquivos, um contendo o módulo de definição e outro contendo o correspondente módulo de implementação. Módulos definição de arquivos devem conter controles para evitar a inclusão duplicada ao compilar um módulo. Deve ser utilizado o esquema de código a seguir: Comentário cabeçalho do arquivo #if!defined( Nome-arquivo_MOD) #define Nome-arquivo_MOD Corpo do arquivo #endif Comentário fim de arquivo Comentário cabeçalho do arquivo é o comentário padrão identificando o arquivo. O formato deste comentário deve ser especificado pela organização. Nome-arquivo é o nome do arquivo (sem a extensão) contendo o módulo de definição ou a tabela de constantes. O nome do arquivo será seguido da seqüência de caracteres _MOD, assegurando a unicidade do nome. Este nome será definido quando da primeira inclusão e nunca será excluído. Corpo do arquivo é o código do módulo de definição ou do arquivo de definição.

46 39 Comentário fim do arquivo é o comentário padrão de final de arquivo especificado pela organização. MÓDULOS DE DEFINIÇÃO Inicie o código do corpo do modulo de definição com o seguinte esquema de código: //Controle de escopo do arquivo de definição #if defined (Nome-arquivo_OWN) #define Nome-arquivo_EXT #else #define Nome-arquivo_EXT extern #endif Declare cada variável global externa da seguinte forma: Nome-arquivo_EXT variável global externa Declare a inicialização de variáveis externas, utilizando código com a organização a seguir. Atente para o fato que o código a seguir inclui o caractere ";" do final da declaração. Declaração-da-variável #if defined (Nome-arquivo_EXT) = inicialização; #else ; #endif 1) Ao final do código do módulo de definição coloque o código: #undef Nome-arquivo_EXT 2) Organize os módulos de implementação e de definição da seguinte forma: a) Cabeçalho do módulo; b) Se necessário, inclua o arquivo contendo as declarações não padronizadas segundo o padrão ANSI requeridas pelo ambiente de desenvolvimento. Este arquivo deve viabilizar a compilação do programa utilizando a chave de controle de código ANSI ligada; c) Inclusões requeridas pelas bibliotecas do compilador; d) Inclusão do modulo de definição próprio; e) Inclusões dos módulos de definição dos módulos servidores requeridos;

47 40 f) Inclusões dos arquivos de definição requeridas; g) Corpo do modulo de implementação ou de definição; h) Comentário de final do módulo. 3) Inclua somente os arquivos que forem efetivamente necessários. 4) Módulos de definição devem conter exclusivamente declarações. 5) Módulos de definição devem conter também o código executável de funções inline e de macros, mas somente se necessários para que módulos cliente possam ser compilados. Funções inline e macros cujo escopo se restrinja ao modulo sendo compilado, devem estar no respectivo modulo de implementação. Exemplo de módulo de definição /******************************************************** /* Modulo de definição: Modulo exemplo /* Nome do arquivo: EXEMP.H /*******************************************************/ #if!defined (EXEMP_MOD) #define EXEMP_MOD // Controle de escopo do arquivo de definição #if defined (EXEMP_OWN) #define EXEMP_EXT #else #define EXEMP_EXT extern #endif /******* Tipo de dados exportado pelo módulo *******/ typedef struct int UmInt; int OutroInt; } EX_tpMeuTipo; /* note que a declaração de tipos não e afetada pelas regras estabelecidas */ /****** Estruturas de dados exportada pelo modulo ******/ /* Estrutura de dados : Vetor inicializado */ EXEMP_EXT int EX_vtNum[ ] #if defined (EXEMP_OWN) = 1, 2, 3, 4, 5 }; #else ; #endif #undef EXEMP_EXT #endif /********** Fim da definição: modulo ***********/

Ferramenta de apoio a. fonte em linguagem C++ baseado em padrões de legibilidade

Ferramenta de apoio a. fonte em linguagem C++ baseado em padrões de legibilidade Ferramenta de apoio a reestruturação de código c fonte em linguagem C++ baseado em padrões de legibilidade Denis Alberto Dalmolin Orientador: Everaldo Artur Grahl Roteiro de Apresentação Introdução A Linguagem

Leia mais

Apêndice 1. Padrão de composição de módulos

Apêndice 1. Padrão de composição de módulos Padrão de composição de módulos - 1 Apêndice 1. Padrão de composição de módulos O presente padrão tem por objetivos: Assegurar a existência de definições de interfaces entre módulos; Assegurar a consistência

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

Programação I A Linguagem C. Prof. Carlos Alberto

Programação I A Linguagem C. Prof. Carlos Alberto Programação I A Linguagem C Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada

Leia mais

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO Introdução Criada em 1972, por Dennis Ritchie; Centro de Pesquisas da Bell Laboratories; Para utilização no S.O. UNIX; C é uma linguagem

Leia mais

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. 1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras

Leia mais

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

#include <stdio.h> Void main() { printf( Cheguei!\n); } INTRODUÇÃO A LINGUAGEM C #include Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C ANTES DO C ERA A LINGUAGEM B B foi essencialmente uma simplificação da linguagem BCPL. B só tinha um tipo de dado, que

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada

Leia mais

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@gmail.com

Leia mais

Linguagens de Programação

Linguagens de Programação O estudante estuda muito. Regras: 7 9 12 14. . Regras: 2 4 . Regras: 1 Representar através de uma árvore de derivação. 77 O estudante estuda muito.

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas

Leia mais

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano O C++ foi inicialmente desenvolvido por Bjarne Stroustrup durante a década de 1980 com o objetivo de melhorar a linguagem de programação C, mantendo a compatibilidade com esta linguagem. Exemplos de Aplicações

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Variáveis primitivas e Controle de fluxo

Variáveis primitivas e Controle de fluxo Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

Implementação da programação modular II

Implementação da programação modular II Implementação da programação modular II - 1 Implementação da programação modular II Aula 11 Agenda Declaração e definição de dados Os conceitos relacionados com a ligação de programas Os elementos essenciais

Leia mais

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES Linguagem C - Introdução Linguagens de Máquina Representação numérica Difícil utilização e compreensão Específica para cada máquina Linguagens Simbólicas(Assembly)

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Linguagem de programação C 3.1. Conceitos

Leia mais

Linguagem de Programação C

Linguagem de Programação C Linguagem de Programação C Aula 08 Diogo Pinheiro Fernandes Pedrosa Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais 13 de novembro de 2009 Introdução O que é uma linguagem

Leia mais

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado

Leia mais

A Linguagem C. A forma de um programa em C

A Linguagem C. A forma de um programa em C A Linguagem C Criada em 1972 por D. M. Ritchie e K. Thompson. Tornou-se uma das mais importantes e populares, principalmente pela portabilidade e flexibilidade. Foi projetada para o desenvolvimento de

Leia mais

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Conceitos de Linguagens de Programação - Características. Paavo Soeiro Conceitos de Linguagens de Programação - Características Paavo Soeiro Motivação Para que possa escolher uma linguagem apropriada ao problema. Melhorar o entendimento da linguagem utilizada. Facilitar o

Leia mais

6 Alguns conceitos e comandos em programação

6 Alguns conceitos e comandos em programação 6 Alguns conceitos e comandos em programação 6.1 Diretivas Diretivas são instruções que permitem ao programador efetuar algum tipo de modificação à compilação, sendo analisadas e executadas pelo pré-compilador,

Leia mais

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU Aula 5 Oficina de Programação Introdução ao C Profa. Elaine Faria UFU - 2017 Linguagem de Programação Para que o computador consiga ler um programa e entender o que fazer, este programa deve ser escrito

Leia mais

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa Computação Eletrônica Tipos de dados, constantes, variáveis, operadores e expressões Prof: Luciano Barbosa Site da disciplina: www.cin.ufpe.br/~if165/ Recapitulando num cubo = n * n * n cubo Algoritmo

Leia mais

4. Constantes. Constantes pré-definidas

4. Constantes. Constantes pré-definidas 4. Constantes Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações.

Leia mais

Tratamento dos Erros de Sintaxe. Adriano Maranhão

Tratamento dos Erros de Sintaxe. Adriano Maranhão Tratamento dos Erros de Sintaxe Adriano Maranhão Introdução Se um compilador tivesse que processar somente programas corretos, seu projeto e sua implementação seriam grandemente simplificados. Mas os programadores

Leia mais

Fundamentos de Programação. Linguagem C++ Introdução, identificadores, tipos de dados. Prof. Bruno E. G. Gomes IFRN

Fundamentos de Programação. Linguagem C++ Introdução, identificadores, tipos de dados. Prof. Bruno E. G. Gomes IFRN Fundamentos de Programação Linguagem C++ Introdução, identificadores, tipos de dados Prof. Bruno E. G. Gomes IFRN 1 Linguagem de Programação Constituída por símbolos e por regras para combinar esses símbolos

Leia mais

Introdução à Programação Aula 04. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Introdução à Programação Aula 04. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação Introdução à Programação Aula 04 Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação QUAL LINGUAGEM IREMOS ESTUDAR? 2 Introdução à Programação Linguagens

Leia mais

Revisão C++ - Parte 1

Revisão C++ - Parte 1 Revisão C++ - Parte 1 Prof. Gustavo Leitão Campus Natal Central Disciplina Programação para Ambiente de Redes 5/3/2010 Objetivo da Aula 5/3/2010 5/3/2010 OBJETIVO DA AULA Revisar os principais comandos

Leia mais

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores VARIÁVEIS E TIPOS DE DADOS

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores VARIÁVEIS E TIPOS DE DADOS Linguagem C Introdução à Programação C Introdução à Ciência da Computação I Prof. Denis F. Wolf Origem de C está associada ao sistema Unix Histórico: 1970: Ken Thompson desenvolve B, baseada em BCPL, para

Leia mais

Slides trabalhados durante a quinta aula

Slides trabalhados durante a quinta aula Slides trabalhados durante a quinta aula prática Estruturas de Controle de Fluxo 3. Laços de repetição (continuação) Exercício: Construa um algoritmo, representando-o através de um pseudocódigo e de um

Leia mais

Ambiente de desenvolvimento

Ambiente de desenvolvimento Linguagem C Ambiente de desenvolvimento Um programa em C passa por seis fases até a execução: 1) Edição 2) Pré-processamento 3) Compilação 4) Linking 5) Carregamento 6) Execução Etapa 1: Criação do programa

Leia mais

Classes e Objetos. Sintaxe de classe em Java

Classes e Objetos. Sintaxe de classe em Java Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados

Leia mais

Conceitos Básicos de C

Conceitos Básicos de C Conceitos Básicos de C Bibliografia Problem Solving & Program design in C, Jeri R. Hanly e Elliot B. Kpffman, 3 a edição Data Structures and Algorithm Analysis in C, Mark Allen Weiss, 2 a edição, Addison-Wesley,

Leia mais

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1 INE5603 Introdução à POO Prof. A. G. Silva 28 de agosto de 2017 Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de 2017 1 / 1 Comandos de decisão simples e compostas Objetivos: Utilização de controles

Leia mais

A linguagem C (visão histórica)

A linguagem C (visão histórica) A linguagem C (visão histórica) A linguagem C é uma linguagem de programação desenvolvida no ínício dos anos 70 por Dennis Ritchie, que trabalhava nos laboratórios Bell e que também inciou em paralelo,

Leia mais

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período Programação I Aula 4 - Prof. Laura Silva de Assis Engenharia de Computação 2 o Período CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca UnED Petrópolis 2 o semestre - 2015 1 Sumário

Leia mais

Algoritmos II prof. Daniel Oliveira

Algoritmos II prof. Daniel Oliveira Algoritmos II prof. Daniel Oliveira Revisar conceitos abordados na disciplina anterior Abordar conceitos vistos com a linguagem C# Variáveis e listas Expressões Estruturas de controle do tipo condicional

Leia mais

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é

Leia mais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1 Entrada e saída: escrevendo na tela Veja uma comparação entre um programa Portugol e seu equivalente em C: Inicio Inteiro

Leia mais

Introdução à linguagem C

Introdução à linguagem C Introdução à linguagem C Luís Charneca luis.charneca@gmail.com Introdução ao C O C nasceu na década de 70. O seu inventor, Dennis Ritchie, implementou-o pela primeira vez usando um DEC PDP-11 correndo

Leia mais

Noçõ linguagem Java. Profs. Marcel Hugo e Jomi Fred Hübner. Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB

Noçõ linguagem Java. Profs. Marcel Hugo e Jomi Fred Hübner. Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB Noçõ ções básicas b da linguagem Java Profs. Marcel Hugo e Jomi Fred Hübner Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB Introduçã ção Origem Funcionamento Vantagens Linguagem

Leia mais

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes Introdução à Programação Introdução a Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Introdução Variáveis Tipos de dados Operadores e Expressões: Operadores

Leia mais

Linguagens de Programação. Marco A L Barbosa

Linguagens de Programação. Marco A L Barbosa Expressões e sentença de atribuição Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever

Leia mais

Linguagem C: Introdução

Linguagem C: Introdução Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais

Leia mais

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores Motivação Prof. Sérgio Faustino Compiladores Conhecimento das estruturas e algoritmos usados na implementação de linguagens: noções importantes sobre uso de memória, eficiência, etc. Aplicabilidade freqüente

Leia mais

Linguagem de Programação. Thiago Leite Francisco Barretto

Linguagem de Programação. Thiago Leite Francisco Barretto Linguagem de Programação Thiago Leite Francisco Barretto SCHILDT, H. C Completo e Total. 3ª Edição. São Paulo: Makron, 1997. Bibliografia Ementa

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

Regras de estilo para código fonte em C/C++

Regras de estilo para código fonte em C/C++ Regras de estilo para código fonte em C/C++ No processo de escrita de código fonte em uma linguagem de alto nível é interessante que o programador se preocupe não somente com a correção sintática e lógica

Leia mais

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES

LINGUAGEM C: VARIÁVEIS E EXPRESSÕES LINGUAGEM C: VARIÁVEIS E EXPRESSÕES Prof. André Backes LINGUAGENS DE PROGRAMAÇÃO Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve

Leia mais

Puca Huachi Vaz Penna

Puca Huachi Vaz Penna Aula 3 C++: variáveis e expressões aritméticas 2017/1 BCC201 Introdução à Computação Turmas 61, 62, 63, 64, 65 e 66, 32 e 33 Puca Huachi Vaz Penna Departamento de Computação Universidade Federal de Ouro

Leia mais

Tópicos em C. Eliade F. Lima

Tópicos em C. Eliade F. Lima Tópicos em C Eliade F. Lima maio/2010 Criada em 1972, por Dennis Ritchie, nos laboratórios Bell, para ser usada no sistema operacional UNIX. Linguagem de propósito geral, sendo adequada à programação estruturada.

Leia mais

Introdução à Linguagem C++

Introdução à Linguagem C++ Introdução à Linguagem C++ C++: Definição C++ C A Linguagem de Programação C++ pode ser definida como uma extensão da Linguagem C; Todo código de programação em Linguagem C pode a priori ser compilado

Leia mais

Conhecendo a Linguagem de Programação C

Conhecendo a Linguagem de Programação C Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Conhecendo a Linguagem de Programação C DCA0800 - Algoritmos e Lógica de Programação Heitor Medeiros 1 Como

Leia mais

PLANO DE UNIDADE DIDÁTICA- PUD

PLANO DE UNIDADE DIDÁTICA- PUD Professor: Marcus Vinícius Midena Ramos Coordenação: Ricardo Argenton Ramos Data: 03/08/2010 Página: 1 de 5 EMENTA: Conceitos básicos de linguagens. Histórico, classificação e principais aplicações de

Leia mais

Introdução e Conceitos

Introdução e Conceitos Introdução e Conceitos Aula 1 11/08/2017 diegoquirino@gmail.com 1 Agenda 1. Motivações: porque estudar linguagens de programação? 2. Breve Histórico sobre as Linguagens de Programação 3. Processos de Tradução

Leia mais

Programação: Vetores

Programação: Vetores Programação de Computadores I Aula 09 Programação: Vetores José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/62 Motivação Problema Faça um programa que leia

Leia mais

Introdução a Linguagem C

Introdução a Linguagem C Introdução a Linguagem C Rafael Silva Guimarães Instituto Federal do Espírito Santo rafaelg@ifes.edu.br http://rafaelguimaraes.net 22 de Dezembro de 2014 Rafael Silva Guimarães Introdução a Linguagem C

Leia mais

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação Programação em C Variáveis e Expressões DCA0800 Algoritmos e Lógica de Programação Heitor Medeiros Florencio

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

Métodos Computacionais

Métodos Computacionais Métodos Computacionais Objetivos da Disciplina e Introdução a Linguagem C Construções Básicas Objetivos da Disciplina Objetivo Geral Discutir técnicas de programação e estruturação de dados para o desenvolvimento

Leia mais

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias Introdução a Linguagem C GE4 Bio GE4Bio Grupo de Estudos

Leia mais

Expressões e sentença de atribuição

Expressões e sentença de atribuição Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Introdução à Linguagem C

Introdução à Linguagem C Engenharia de CONTROLE e AUTOMAÇÃO Introdução à Linguagem C Aula 02 DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria beltrame@mail.ufsm.br

Leia mais

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo Algoritmos e Estruturas de Dados I IEC012 Linguagem C - Guia de bolso - Prof. César Melo Histórico A linguagem C é uma linguagem de programação inventada na década de 1970 por Dennis Ritchie Brian Kennigaham.

Leia mais

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados Introdução à Programação Operadores, Expressões Aritméticas e Entrada/Saída de Dados Programa em C #include int main main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa

Leia mais

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1 Linguagem C: Variáveis e Operadores Prof. Leonardo Barreto Campos Sumário Variáveis: Tipos de variáveis; Nome da variável; Palavras reservadas; A função printf(); A função scanf(); Variáveis locais; Variáveis

Leia mais

Introdução à Linguagem C Variáveis e Expressões

Introdução à Linguagem C Variáveis e Expressões INF1005: Programação 1 Introdução à Linguagem C Variáveis e Expressões 08/03/10 (c) Paula Rodrigues 1 Tópicos Principais Programando em C Funções Variáveis Define Operadores e Expressões Entrada e Saída

Leia mais

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues SEL0433 Aplicação de Microprocessadores I Revisão da Linguagem C Prof. Evandro L. L. Rodrigues Estrutura de um programa C Diretivas de pré processamento Declaração de variáveis globais Declaração de protótipos

Leia mais

Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C

Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C Linguagem C Algoritmos e Lógica de Programação Reinaldo Gomes reinaldo@cefet-al.br Introdução Pré-processador Variáveis Operadores Introdução: Histórico Linguagem criada por Dennis Ritchie em 1972 Em 1973

Leia mais

Utilização da Linguagem C

Utilização da Linguagem C Histórico Criada em 1972 por Dennis Ritchie Usada no desenvolvimento do sistema operacional Unix no Bell Labs C foi derivada da linguagem B, desenvolvida por Ken Thompson Linguagem procedural de alto nível

Leia mais

4. Estruturas Fundamentais de Programação em C

4. Estruturas Fundamentais de Programação em C 4. Estruturas Fundamentais de Programação em C 4.1. Imprimindo Mensagens e Valores no Monitor de Vídeo A biblioteca de entrada e saída (stdio.h) possui a função printf que imprime mensagens e valores diretamente

Leia mais

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação Algoritmos e Introdução à Programação Lógica e Linguagem de Programação Prof. José Honorato Ferreira Nunes honoratonunes@softwarelivre.org http://softwarelivre.org/zenorato/honoratonunes Linguagem C Prof.

Leia mais

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição Expressões e Instruções de Atribuição Cristiano Lehrer Introdução Expressões são o meio fundamental de especificar computações em uma linguagem de programação: Familiarização com as ordens de avaliação

Leia mais

Linguagem Java. Introdução. Rosemary Silveira Filgueiras Melo

Linguagem Java. Introdução. Rosemary Silveira Filgueiras Melo Linguagem Java Introdução Rosemary Silveira Filgueiras Melo rosesfmelo@hotmail.com 1 Tópicos abordados Histórico da Linguagem Caracterização da Linguagem Criação de Programa Java inicial Entrada e Saída

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

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador

Leia mais

Linguagem de Programação

Linguagem de Programação Linguagem de Programação Operadores de Condição if() / else if() / else{} / switch() Gil Eduardo de Andrade Introdução Operadores de condição permitem, ao programador, efetuar testes que determinam quais

Leia mais

Linguagem C Operadores

Linguagem C Operadores Linguagem C Operadores Objetivos Abordar os conceitos sobre os Operadores demonstrando o seu uso com exemplos para um melhor aprendizado. Pré-requisitos É necessário que o leitor tenha acompanhado o artigo

Leia mais

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 201 Departamento de Informática Centro Tecnológico

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 201 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Programação II Prof.ª Claudia Boeres (boeres@inf.ufes.br) CT IX - Sala 201 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Linguagem

Leia mais

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador; 1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e

Leia mais

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos Introdução Laboratório de Computação para Ciências Módulo II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Mestrado Profissional

Leia mais

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Introdução à Programação em C Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI Linguagem C Criada em 1972 para uso no LINUX; Sintaxe base para diversas outras (Java, JavaScript, PHP, C++,

Leia mais

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Linguagem de Programação C. Prof. Fabrício Olivetti de França Linguagem de Programação C Prof. Fabrício Olivetti de França Linguagem C 2 Linguagem C Imperativo e estruturado Pequeno conjunto de palavras-chaves, operadores, etc. Tipagem estática, porém fraca Permite

Leia mais

Laboratório de Programação II

Laboratório de Programação II Laboratório de Programação II Aula 02 Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br http://www.diemesleno.com.br Na aula passada vimos... Na aula passada vimos... 01 Introdução à linguagem C;

Leia mais

Linguagens de Programação I

Linguagens de Programação I Linguagens de Programação I Tema # 4 Operadores em C Susana M Iglesias FUNÇÕES ENTRADA-SAÍDA I/O printf(), utilizada para enviar dados ao dispositivo de saída padrão (stdout), scanf(), utilizada para ler

Leia mais

Capítulo 2 Operadores. A função scanf()

Capítulo 2 Operadores. A função scanf() Capítulo 2 Operadores A função scanf() A função scanf() é outra das funções de E/S implementadas em todos os compiladores e nos permite ler dados formatados da entrada padrão (teclado). Sintaxe: scanf(

Leia mais

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende Sub Rotinas Estrutura de Dados Prof. Kleber Rezende Considerações Iniciais Uma dos métodos mais comuns e amplamente utilizados em programação de computadores é o Top-Down. Nesta abordagem um problema é

Leia mais

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 206 Departamento de Informática Centro Tecnológico

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 206 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Programação II Prof.ª Claudia Boeres (boeres@inf.ufes.br) CT IX - Sala 206 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Linguagem

Leia mais

Linguagem C Operadora

Linguagem C Operadora Linguagem C Operadora Objetivos Abordar os conceitos sobre os Operadores demonstrando o seu uso com exemplos para um melhor aprendizado. Operadores Os operadores indicam ao compilador a necessidade de

Leia mais

Programação Estruturada Aula - Introdução a Linguagem C

Programação Estruturada Aula - Introdução a Linguagem C Programação Estruturada Aula - Introdução a Linguagem C Prof. Flávio Barros flavioifma@gmail.com www.flaviobarros.com.br 2 HISTÓRICO DA LINGUAGEM C HISTÓRICO DA LINGUAGEM C Como tudo iniciou... C iniciou

Leia mais

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO LÓGICA DE PROGRAMAÇÃO PROFª. M.Sc. JULIANA H Q BENACCHIO Primeiro programa em C #include int main() { int num1, num2, result; scanf("%d",&num1); scanf("%d",&num2); result = num1 + num2; printf("%d",

Leia mais

Conceitos básicos de programação

Conceitos básicos de programação Constantes class Exemplo { static void Main() { float fahr, celsius; int lower, upper, step; lower = 0; /* limite inferior da tabela de temperaturas */ upper = 300; /* limite superior */ step = 20; /*

Leia mais

Desenvolvido por: Juarez A. Muylaert Filho - Andréa T. Medeiros - Adriana S. Spallanzani -

Desenvolvido por: Juarez A. Muylaert Filho - Andréa T. Medeiros - Adriana S. Spallanzani - UAL é uma linguagem interpretada para descrição de algoritmos em Português. Tem por objetivo auxiliar o aprendizado do aluno iniciante em programação através da execução e visualização das etapas de um

Leia mais