A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Técnicas1 Paradigmas e Ferramentas de Engenharia de Software Parte I Técnicas de Programação em C++"— Transcrição da apresentação:

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

2 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

3 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

4 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 ?

5 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.

6 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

7 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 }

8 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 ?

9 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

10 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; }

11 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; }

12 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))));

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

14 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_; }

15 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_; }

16 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; }

17 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(); }

18 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;

19 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

20 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;

21 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 ?

22 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)

23 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

24 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_; }


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

Apresentações semelhantes


Anúncios Google