Técnicas1 Paradigmas e Ferramentas de Engenharia de Software Parte I Técnicas de Programação em C++

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Curso de aprofundamento na linguagem C
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
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:
Paulo Marques Hernâni Pedroso
Classes C++ Class nome da classe { private: membros privados
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
PHPOO Erick Souza. Conceitos de Orientação a Objetos Objeto é um conceito ou item(concreto ou abstrato). Software orientado a objetos Uma classe é uma.
Interação entre objetos
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
Uma Introdução.
Orientação a Objetos: Encapsulamento e Classificação
Programação Básica em Java
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
INF Computação Gráfica
Sobrecarga de Operadores
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
1 Professor Rogério B. de Andrade - Aula 001- Dez/2008 Técnicas e Linguagem de Programação.
7 Abstração Genérica Unidades genéricas e instanciação.
Centro Integrado de Tecnologia da Informação
Aula 12 Biblioteca padrão do C++ O que é? Composição
A linguagem C#.
Revisão da Linguagem C.
Classes e objetos P. O. O. Prof. Grace.
Curso de extensão em Desenvolvimento Web
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
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Aula prática 13 Orientação a Objetos – C++ Parte 1
Técnicas1 Técnicas para organizar operações. Técnicas2 Técnicas para organizar operações: Estruturas que contribuem para aumentar a robustez, a confiabilidade,
Linguagens de Programação
Linguagens Orientadas a Objeto
Conceitos de Linguagem de Programação
Caio Argolo Luiz Daud Jorge Roberto
Linguagem de Programação II
Aula 3 CoL, atividade Polimorfismo (late binding) Modificador final Modificador abstract Interfaces Herança múltipla Atribuição, Construtores, Destrutores,
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Estudo dos Conceitos e Paradigmas de Programação
Tipos Abstratos de Dados
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
GP - Generic Programming Thiago Robert Felipe Pompeo.
Generic Programming Daniel Terzella Leandro Amancio
PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof
Pilhas Profa. Nádia Félix.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada à Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos usando Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Herança e Arquitetura em camadas
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.
Bruno Inojosa MCP .NET Framework
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Jobson Ronan Padrões GoF Jobson Ronan
Módulo II Capítulo 1: Orientação a Objetos
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Técnicas1 Paradigmas e Ferramentas de Engenharia de Software Parte I Técnicas de Programação em C++

INPE Técnicas2 Objetivo zDiscutir técnicas de programação em C++ yRever as principais características da linguagem yDiscutir aspectos conceituais de projeto de classes zTemas apresentados yClasses x objetos yForma canônica normal de uma classe yTemplates e Ponteiros inteligentes yTécnicas de projeto de conjunto de classes

INPE Técnicas3 Referências zLivros básicos yEffective C++, S.Meyers yMore Effective C++, S.Meyers yAdvanced C++ Programming Styles and Idioms, J. Coplien zReferências adicionais yC++ FAQs, M. Cline and G.Lomow yC++ Strategies and Techniques, R. Murray yC++ Programming Style, T. Cargill

INPE Introdução4 Motivação zO que é C++ ? yUma melhoria da linguagem C com maior controle de tipos ? yUma linguagem para programação orientada-a-objetos ? yUma linguagem que incorpora avanços de engenharia de software nos anos recentes ? yUma linguagem que suporta múltiplos estilos de programação ? yUma linguagem que está em vistas de extinção e logo sera totalmente substituída por JAVA ?

INPE Técnicas5 Projeto de Classes zClasse yabstração - conceito fundamental em programação yclasse - expressão de abstração em C++ ydescreve as propriedades comuns dos objetos instanciados zCaracterísticas yclasses são tipos reais, são como int e float (Meyers). yprojetar uma classe envolve descreve todas as situações possíveis de seu uso. ya interface de cada classe deve ser completa e mínima.

INPE Técnicas6 Projeto de Classes: Componentes zconstrutores e destrutores yconstrutor de cópia yoperador = (atribuição) zfunções da classe ymembros da classe yfunções amigas (friends) yfunções globais que utilizam a classe zparâmetros das funções yreferências x ponteiros

INPE Técnicas7 Forma Canônica Normal class Exemp { public: Exemp(); // construtor virtual ~Exemp(); // virtual se classe base protected: // Dados que meus filhos precisam private: // Meus dados pessoais Exemp (const Exemp& rhs) {} // construtor de copia Exemp& operator= (const Exempl& rhs) {}// atribuicao }

INPE Técnicas8 Projeto de Classes class String { private: char *data_; public: String ( const char* value ) { if (value) { data_ = new char[strlen(value) + 1]; strcpy ( data_, value) } elsedata_ = new char[1]; *data_ = \0; } ~String() { delete [] data_;} } yquais os problemas desta classe ?

INPE Técnicas9 Operadores Implícitos em C++ zC++: implementação default do construtor de cópia e do operador= ( cópia membro-a-membro) zExemplo: String a (Adeus); String b (Mundo Cruel); String c; c = b = a; // E agora ??? a data AdeusMundo Cruel data b a AdeusMundo Cruel data b ANTES DEPOIS

INPE Técnicas10 Operadores Implícitos em C++ zRegra: yImplemente o construtor de cópia e o operador= para todas as classes com alocação dinâmica String::String ( const String& rhs ) { if ( rhs.data_ ) data_ = new char [ strlen (rhs) + 1 ]; strcpy ( data_, rhs.data_ ); else data_ = 0; }

INPE Técnicas11 Operadores Implícitos em C++ zOperador= yLembre de checar sobre auto-referência yRetorne uma referência ao objeto String& String::operator= (const String& rhs) { if ( this == &rhs ) return *this; if ( rhs.data_ ) delete [] data_; data_ = new char [ strlen (rhs) + 1 ]; strcpy ( data_, rhs.data_ ); else data_ = 0; return *this; }

INPE Técnicas12 Operadores Implícitos em C++ zOperador = yExemplo: string a (Adeus Mundo Cruel); // Auto-referencia ( requer teste do operador = ) a = a ; string b,c,d; // Cadeias ( requerem retorno de referencia) b = c = d = a; // Compilador implementa // b.operator= (c.operator= (d.operator = (a))));

INPE Técnicas13 Funções de classe: Alternativas zmembros da classe yfunções amigas yfunções globais yfunções estáticas

INPE Técnicas14 Referências x ponteiros zReferências em C++ ynome alternativo para um objeto string collor = Fernando Collor; string& cassado = collor; // aponta para o mesmo endereco zUsos de referências ypassagem de parâmetros em métodos : evita instanciacao void Exemp::Metodo (const C1& obj1, const C2& obj2 ); yretorno de valores (e.g. dados de classe) class Aluno { private: string nome_; public: string& Nome() const { return nome_; }

INPE Técnicas15 Referências x Ponteiros zDiferências semânticas em passagem de parâmetros zPassagem por referência ymantém a propriedade do objeto zPassagem por ponteiro ytransmite o direito de propriedade do objeto zex: class Aluno { private: string nome_; public: string& Nome() const { return nome_; } char* Nome() { return nome_; }

INPE Técnicas16 Referências x Ponteiros zRegras ypasse e retorne parâmetros por referência constante sempre que possível yretorne valores (e não referências) quando criar objetos zex: class Complex { private: double real_, im_; public: Complex& operator + ( const Compl& lhs, const Compl& rhs ) { Complex result ( lhs.real_ + rhs.real_, lhs.im_ + rhs.im_ ); return result; }

INPE Técnicas17 Tipos parametrizados (templates) zImplementam estruturas de dados e algoritmos genéricos (independentes dos tipos de objetos) zCódigo gerado em tempo de compilação zFerramentas extremamente poderosas de programação zDefinição template class Stack { private: // detalhes omitidos… public: Stack(); bool IsEmpty(); void Push ( const T& obj); T Pop(); }

INPE Técnicas18 Tipos parametrizados (templates) zImplementação template void Stack::Push ( const T& obj ) { myList_.push_front ( obj ); } template T Stack::Pop () { return myList_.top ( obj ); zUso Stack pilhaDeInteiros; Stack pilhaDeNomes;

INPE Técnicas19 Tipos Parametrizados (templates) zSTL - Standard Template Library yparte do padrão C++ (aprovado em 1997) yelementos da STL: componentes, iteradores e algoritmos zComponentes yorganizações de coleções de objetos list, set, stack, map, multiset, multimap zIteradores yponteiros que percorrem os componentes zAlgoritmos yfunções que são aplicáveis aos componentes find, erase, sort, merge, push, pop

INPE Técnicas20 Tipos Parametrizados (templates) Ponteiros Inteligentes - auto_ptr yobjetos projetados para funcionar como ponteiros ymaior funcionalidade zControle sobre comportamento de ponteiros yconstrução e destruição - elimina vazamento de recursos ycópia e atribuição ydereferenciamento - decisão sobre o acesso ao ponteiro verdadeiro zUso: ytradicional Canvas* c = new Canvas; yinteligente auto_ptr canvObj = new Canvas;

INPE Técnicas21 Projeto de Classes: Alternativas zComo construir um conjunto de classes ? zAlternativas de projeto de classes yUsar diferentes parâmetros nos construtores yEstabelecer hierarquia de classes (herança ou IS_A) yFazer composição de classes (HAS_A) yParametrizar tipos (uso de templates) zQuando usar cada uma destas técnicas ?

INPE Técnicas22 Projeto de Classes: Recomendações zPrograme para uma interface, nunca para uma implementação (GoF) zDerive, sempre que possível, de classes abstratas (Myers, Struostrup) zPrefira agregação de objetos à herança (GoF) zParametrize algoritmos e estruturas genéricas com templates (Stepanov)

INPE Técnicas23 Classes: Herança x Composição zHerança yexpressar interfaces comuns e comportamento diferente yclasses base definem parte do comportamento das classes derivadas ydefinida em tempo de compilação yherança quebra o princípio da modularidade ysolução: herdar de classes base abstratas e procurar não estender a interface zComposição ydefinida em tempo de execução yrequer o respeito a modularidade ypermite o uso de delegação

INPE Técnicas24 Classes: Herança x Tipos Parametrizados zTemplates yexpressam nomes e estruturas de implementação comuns ydefinidos em tempo de execução template class Image { public: Image ( int nlin, int ncols, const string& fileName ); ~Image (); T& operator() (int lin, int col){ return ptrMemory_ [ lin*nLines_ + col ]; } private: T* ptrMemory_; int nLines_, nCols_; string fileName_; }