Curso de aprofundamento na linguagem C

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Denise Guliato Faculdade de Computação – UFU
Centro Integrado de Tecnologia da Informação
Capítulo II – Algoritmos e Programas
Paulo Marques Hernâni Pedroso
Programação para Engenharia I
VHDL Linguagem de Descrição e Síntese de Circuitos Digitais
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Programação Básica em Java
Polimorfismo e Acoplamento Dinâmico
Templates Traduzido de:
Alocação Dinâmica de Memória
INF Computação Gráfica
Rafael Pinto Frederico Corrêa
Políticas Curso de aprofundamento em linguagem C.
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
Universidade Federal do Espírito Santo
Paradigmas da Programação
Curso de C/C++ Avançado
Linguagem C Strings.
Linguagem C Strings.
Programação Orientada para Objectos
Segurança em Aplicações 5. Melhores Práticas de Programação
Revisão da Linguagem C.
Classes e objetos P. O. O. Prof. Grace.
Iniciação à linguagem C++
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Especialização em Segurança da Informação Segurança em Aplicações 5. Melhores Práticas de Programação Márcio Aurélio Ribeiro Moreira
JAVA: Conceitos Iniciais
Introdução a linguagem Python
Aula prática 13 Orientação a Objetos – C++ Parte 1
Curso de Nivelamento LCG
JAVA Orientação a Objetos
JAVA Linguagem Ambiente de Desenvolvimento
Conceitos de Linguagem de Programação
CADEIA DE CARACTERES (Strings)
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 3 CoL, atividade Polimorfismo (late binding) Modificador final Modificador abstract Interfaces Herança múltipla Atribuição, Construtores, Destrutores,
Seminário 1: Revisão de C
Expressões e Instrução de Atribuição
Análise Léxica Primeira fase de um compilador
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Java Bytecode Software Básico Mitsuo Takaki.
Técnicas de Desenvolvimento de Programas
Orientação a Objetos Parte I
Programação orientada a objectos em C++
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Programação Orientada a Objetos - Java
Algumas notas sobre a linguagem de programação C
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
BOAS PRÁTICAS DE PROGRAMAÇÃO Semana da FEUP, Porto 27 de Outubro de 2008 #include // main int main()‏ { bool var; if(var == false)‏ // whatever printf(“I.
Linguagens de Programação
Metaprogramação Estática André Knabben Pricilla Padaratz.
Construtores e Destrutores
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Conceitos de OO em Java Parte I
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Módulo II Capítulo 1: Orientação a Objetos
Linguagem de Programação
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Estrutura de Dados Prof. André Cypriano M. Costa
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Transcrição da apresentação:

Curso de aprofundamento na linguagem C Módulos em C Curso de aprofundamento na linguagem C

Módulos Divisões lógicas de um programa Podem incluir estruturas de dados, funções, constantes e globais Facilitam a manutenção Compilação mais rápida Reuso de código

Módulos: convenções A main fica num módulo separado e apenas inclui os outros módulos Compostos por um arquivo .c e por um arquivo .h Porque 2 arquivos? O que poderia acontecer se fosse apenas um arquivo?

Header X Sources O que fica no cabeçalho? Structs e unions Tipos auxiliares (typedef) Constantes Macros Protótipos de funções Declarações de globais Declaração não é definição!

Header X Source O que fica no fonte? Definições de globais Implementações de funções descritas no header Funções euxiliares que não são exportadas

Propriedade dos Módulos Podem esconder certos símbolos para aplicar um nível de “information hiding” Podemos aplicar alguns conceitos de Orientação a Objetos na construção de módulos

Módulos X Classes Pode ser encarado como uma Classe Várias estruturas de C podem ter equivalências com os conceitos de OO

Equivalências O módulo todo seria uma classe, mas o objeto seria definido por uma struct Atributos agregados na struct Não existem atributos privados em estruturas Diminui o overhead Cuidado no acesso!

Equivalências Métodos: funções que alteram membros da struct Convenções: Devem receber como 1° parâmetro a struct Devem ter nome associado à struct Métodos estáticos: funções que não alteram membros da struct Podem ser definidos como funções normais

Equivalências Métodos privados: podem ser definidos apenas adicionando a palavra chave static Não pode ser visto por outros módulos Visibilidade restrita ao arquivo fonte

Equivalências Atributos Estáticos: variáveis globais Perigo no acesso concorrente Podem ter caráter privado se definidas como static

Equivalências Herança e Polimorfismo Atributos na mesma ordem dos pais Utilização de macros Casts Polimorfismo forçado

Padrões de codificação Importante para adoção da divisão baseada em objetos Ausência implica em: Duplicação de variáveis globais/funções Tempo de produção do programador diminuído

Padrões de codificação Exemplo de notação Adição de prefixos ao nome de globais e funções que são referentes a um determinado módulo ou struct Exemplo: double conta_creditar(Conta *c, double v); Pode ser combinada com algum outro padrão da escolha do usuário Notação húngara Padrão Java de codificação Padrão Linux

Padrões de codificação Construtores e destrutores Incentivam o uso de funções Concentram o processo de alocar e liberar memória, evitando memory leak Exemplo padrões de construtores: Alocação externa void init_conta(Conta *c, int numero, double v); Alocação interna Conta *create_conta(int numero, double v);

Padrões de codificação Destrutores void destroy_conta(Conta *c);

Preprocessador C Executado antes de qualquer processo de compilação ou verificação de tipo Comando identificados pelo prefixo “#” Ferramenta cpp utilizada em conjunto com o gcc Pode ser utilizada em conjunto com outros tipos de arquivo, mas é otimizada para arquivos C (comentários e estilo de programação)

#include Inclui declarações de outros arquivos no arquivo atual Substituição da diretiva #include pelo conteúdo literal do arquivo (copia e cola) Parâmetros entre <> ou “” Deve receber APENAS arquivos de cabeçalho

#define Macros Substituídas pelo preprocessador antes da compilação Constantes Substituídas pelo preprocessador antes da compilação Erros de semântica em Macros Exemplo SQR

#if, #ifdef, #ifndef Decisões de precompilação Código interno da diretiva é adicionado ao programa caso a condição seja satisfeita Código multiplataforma Uso de bibliotecas Construção de headers

#if, #ifdef, #ifndef Utilizados em conjunto com as diretivas #else #elif #endif #if e #elif Expressão como parâmetro Não existem tipos Operadores resultam em inteiros (expressões C)

#if, #ifdef, #ifndef #ifdef e #ifndef Macros como parâmetro Equivalentes aos #if defined #if !defined Exemplo de utilização Arquivos de cabeçalho

#pragma Configuração de opções do compilador Específico para cada compilador Exemplos GCC: #pragma GCC poison [name1 name2...] #pragma GCC dependency “arquivo” [comentário]

#pragma Exemplos VC++ #pragma deprecated(nome1, nome2, …) #pragma hdrstop #pragma once

Comandos # e ## Utilizados normalmente dentro de macros # Prefixo que converte um parâmetro em string. O valor do parâmetro não é utilizado, e sim apenas o nome #define STR(x) #x

Comandos # e ## ## Funde dois tokens A ## B resulta em AB struct command { char *name; void (*function) (void); }; struct command commands[] = { "quit", quit_command }, { "help", help_command }, ... #define COMMAND(NAME) { #NAME, NAME ## _command } struct command commands[] = { COMMAND (quit), COMMAND (help), ... };

Macros pré-definidas __LINE__ __FILE__ __cplusplus __DATE__ ...

#error e #warning Emitem mensagens de erro antes da compilação #error Emite mensagem e aborta compilação #warning Apenas emite mensagem