Apostila Curso de Extensão MFC – Básico PROF: ANDRÉ BERNA...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 2 ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 3 !" facilidade para d...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 4A comunicação de objetos oc...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 5 !" tudo que é percep...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 6pelo usuário que contém o m...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 7 A classe envolve, ass...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 82.3 Estrutura Generalizaçã...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 92.6 Conexão de Mensagens ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 102.9 Notação para Diagrama ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 11 Não faz sentido usa...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 12 ~CNomeClasse ( ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 13{ instrucoes;}; ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 14 ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 15Todas as mensagens têm doi...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 161.5 Bibliotecas de Vínculo...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 172.1 O processo de const...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 18workspace (com a extens...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 192.2 O Editor de Recursos -...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 20sobre uma variável, o debu...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 212.9 The Source Browser ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 22 !" By word - Quan...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 23 A biblioteca Micros...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 24como pela maioria de fabri...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 25 !" Suporte total ao...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 26 !" Improved MFC O...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 27 Uma estrutura de a...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 28CMyFrame::CMyFrame(){ ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 29A função CMyFrame::OnPaint...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 307 Documents e Views ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 31 ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 32 A série é um caminh...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 33 ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 34 NOTA: Para o exemplo ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 35 Figura ...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 36Passo 6 ( para programas S...
Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 37Quando o botão Ok do diálo...
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
Poo apostila visual c
of 155

Poo apostila visual c

Orientação a Objeto
Published on: Mar 4, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Poo apostila visual c

  • 1. Apostila Curso de Extensão MFC – Básico PROF: ANDRÉ BERNARDI andrebernardi@hotmail.com.br Copyright © 1999 por André Bernardi.Todos os direitos reservados. Nenhuma parte do conteúdo dessa apostila pode ser reproduzida ou transmitida sob qualquer forma sem a permissão direta do autor.
  • 2. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 2 Capítulo 01 Introdução1.1 Um pouco de História Nos anos 60 é lançado a Simula-67 que apresentou pela primeira vez os conceitos declasses, rotinas correlatas e subclasses. Na década de 70 a Seros-PARC cria a Smalltak até hoje considerada a mais pura dasLPOO. No final da década de 80 aparece a C++, uma linguagem híbrida. Já a o Visual C++surgiu no início da década de 90. Orientação a Objetos é o maior avanço em software destes últimos anos. É umaforma mais natural de se analisar o mundo. Ela nos permite construir sistemas melhores e,além disso, de maneira mais fácil. Será a mais importante das tecnologias emergentes naárea de software nos anos 90. As técnicas estruturadas que, sem dúvida, atualmente são as mais populares nacomunidade de informática, obtiveram grande aceitação desde que foram lançadas no finaldos anos 70. Contudo a medida que foram sendo utilizadas, a decomposição funcionalmostrou-se inadequada em situações de sistemas complexos e principalmente paraprofissionais iniciantes. Os aperfeiçoamentos introduzidos em 1984, por Sthephen M e JohnF Palmer e, mais tarde, complementados por Stephen Mellor e Paul Ward, para sistemas emtempo real, ajudaram a análise estruturada a se tornar mais eficiente. Contudo os sistemascriados com as técnicas estruturadas ainda são difíceis de serem incrementados com novasfunções e as alterações em funções já existentes, muitas vezes, provocam sérios problemasem outras partes do software. Na prática de programação orientada a objetos estaremos atentos em nossosprogramas para pontos como: !" Compatibilidade, portabilidade. !" Segurança. !" Reusabilidade. !" Facilidade de integração. !" Facilidade de extensão. !" Eficiência.1.2 Reutilização A reutilização está baseada na padronização a qual é adotada há longa data em todaa indústria moderna, seja no projeto de carros, televisores, computadores, etc. Apadronização traz inúmeras vantagens, entre elas podemos citar a seguintes: !" as peças padrões são mais baratas; !" são mais confiáveis; !" geralmente são mais fáceis de serem consertadas ou substituídas. Na informática a reutilização de códigos ainda é praticada em escala muito reduzidae decorrente da iniciativa isolada de alguns programadores e projetistas. São vários osmotivos para isso, entre eles: !" existência de uma Biblioteca e de um Sistema de Catálogo;Prof. André Bernardi Capítulo 0
  • 3. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 3 !" facilidade para documentação; !" sistemática rigorosa para testes; !" novas técnicas para especificação de sistemas tendo em vista a reutilização de módulos; !" linguagem, ferramentas e ambientes de desenvolvimento que estimulem a adoção, em larga escala, de tais métodos dentro das empresas; !" criação de novos geradores de sistemas que operem solucionando e combinando módulos padrões e que satisfaçam as necessidades específicas das aplicações; !" mudança administrativas e gerenciais nas empresas de modo a apoiarem e estimularem os criadores de módulos padrões.1.3 Vantagens da Orientação a Objetos A Orientação a Objetos traz vários benefícios no desenvolvimento e manutenção desoftware. Para melhor compreensão dessas vantagens vamos dividi-las em dois grupos. Noprimeiro, que chamaremos de "Vantagens Diretas" colocamos aquelas que representamconseqüências diretas da adoção da Orientação a Objetos e , no segundo grupo, as"Vantagens Reais", estarão aquelas que são de fato o que procuramos com essa tecnologia.Vantagens Diretas: !" maior facilidade para reutilização de código e por conseqüência do projeto; !" possibilidade do desenvolvedor trabalhar em um nível mais elevado de abstração; !" utilização de um único padrão conceitual durante todo o processo de criação de software; !" maior adequação à arquitetura cliente/servidor; !" maior facilidade de comunicação com os usuários e com outros profissionais de informática.Vantagens Reais: !" ciclo de vida mais longo para os sistemas; !" desenvolvimento acelerado de sistemas; !" possibilidade de se construir sistema muito mais complexos, pela incorporação de funções prontas; !" menor custo para desenvolvimento e manutenção de sistemas;1.4 Princípios da Orientação a ObjetosAbstração - Consiste na concentração nos aspectos essenciais. Preserva a liberdade dese tomar decisões evitando, tanto quanto possível comprometimentos prematuros comdetalhes. - É o processo pelo qual a mente ou a inteligência compreende o objeto, suascaracterísticas e suas funcionalidade.Agregação - é o relacionamento "parte-todo" ou "uma-parte-de" no qual os objetos querepresentam os componentes de alguma coisa são associados a um objeto que representa aestrutura inteira.Comportamento - é como um objeto age e reage, em termos de mudança de seu estado eenvio de mensagem. externamente visível e comprovada atividade.Encapsulamento - Também chamado de ocultamento de informações, é o resultado deocultar os detalhes de implementação de um objeto.É o termo formal que descreve a junção de métodos e dados dentro de um objeto demaneira que o acesso aos dados seja permitido somente por meio dos próprios métodos doobjeto. Nenhuma outra parte do programa pode operar diretamente em um dado do objeto.Prof. André Bernardi Capítulo 0
  • 4. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 4A comunicação de objetos ocorre exclusivamente por meio de mensagens explícitas.Também definido como um processo de "esconder" a complexidade interna de uma classepara suportar ou reforçar a abstração.Estado - são resultados cumulativos do comportamento do objeto - uma das possíveiscondições na qual o objeto existe, caracterizada pelas quantidades que são distintas deoutras quantidades.Em qualquer ponto do tempo, o estado do objeto abraça todas as (usualmente estática)propriedades do objeto mais os atuais (normalmente dinâmico) valores dessa propriedade.Herança - um método de derivar novas classes a partir de outras previamente existentes.A classe derivada herda a descrição de cada uma das classes bases, permitindo suaextensão através da adição de novas variáveis e funções membro e usar funções virtuais.É o compartilhamento de similitudes entre componentes preservando as diferenças.Representa generalização e especialização, tornando explícitos os atributos ecomportamentos comuns em uma hierarquia de classes.É o mecanismo através do qual os atributos e o comportamento dos objetos de uma classesão assumidos pelos objetos de outra classe.É uma relação entre uma super-classe e suas sub-classes, isto é, o mecanismo pelo qualelementos mais específicos incorporam estrutura e comportamento de elementos maisgerais relacionados.Há duas formas de se descobrir heranças: - Generalização - EspecializaçãoMensagem - é uma operação que um objeto executa sobre outro. Os termos mensagem,método e operação são usualmente intercambiáveis. Representa uma ação a ser praticadapelo objeto.Exemplo: MenuPrincipal.Seleciona (Segunda Opção);Onde: MenuPrincipal = Objeto Seleciona = Método Segunda Opção = ParâmetroMódulo - É uma unidade de programa que contém declarações, expressas num vocabuláriode uma linguagem de programação particular, que forma a realização física de parte ou detodas as classes e objetos do projeto lógico do sistema.É uma unidade de códigos que serve como um bloco construído para uma estrutura física deum sistema.Composto das seguintes partes: Interface - É a visão externa de uma classe, objeto ou módulo, os quais enfatizam suas abstrações enquanto esconde suas estruturas e os segredos de seus comportamentos. Implementação - É a visão interna de uma classe, objeto ou módulo, incluindo os segredos de seu comportamento.Polimorfismo - Processos que executem funções semelhantes em componentes diferentesdevem ser chamados pelo mesmo nome.É a habilidade de duas ou mais classes responderem à mesma solicitação, cada uma a seumodo. Conceito de permitir uma única interface para múltiplas funções.Objeto é uma abstração encapsulada (qualquer coisa, real ou abstrata) que inclui:informações de estado (descrita por dados), um conjunto claramente definido de protocolosde acesso (mensagens que cada objeto responde) e possui um comportamento que seinteresse acompanhar ou que seja útil.Um objeto pode ser: uma pessoa, um material, uma instituição, um fato, um lugar, umconceito. !" tudo que é aprendido pelo conhecimento que não é o sujeito do conhecimento. !" tudo que é manipulável e/ou manufaturáveis.Prof. André Bernardi Capítulo 0
  • 5. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 5 !" tudo que é perceptível por qualquer sentido. !" tudo que é externo ao sujeito. !" um objeto tem estado, comportamento e identidade. !" a estrutura e comportamento de objetos similares são definidos em suas classes. !" os termos instâncias e objetos são intercambiáveis. Dois objetos exatamente iguais em atributos, relacionamentos e funções podem serdiferenciados através de seu identificador ÚNICO,Exemplo: o número da matrícula do EMPREGADO, o CPF etc.Tipos de Objetos: !" Concretos (pessoa, lápis, carro, relógio etc.) !" Intangíveis (hora, idéia, organização, projeto etc.) !" Papel (médico, paciente, professor, aluno etc.) !" Relacional (casamento, parceira, propriedade etc.) !" Evento (venda, admissão, pane_no_sistema etc.) !" De Interface (janela, ícone, string de caracteres etc.)O comportamento de um objeto é implementado por meio de métodos que podem ser dosseguintes tipos: !" Relativos ao ciclo de vida; !" Recuperadores; !" Relativos à administração de armazenamento;Instância - Os objetos são instâncias de uma classe. As propriedades de qualquerinstância (objeto) são determinadas pela descrição da classe à qual pertence.Subclasse - É um subconjunto de objetos pertencentes a uma classe que têm em comumem relação aos demais objetos desta classe: - dados adicionais e/ou, - operaçõesadicionais.Classe e Objetos - É um conjunto de objetos que são descritos pelos mesmos dados epossuem o mesmo comportamento. !" conjunto de objetos que compartilham uma estrutura e um comportamento comum. !" o termo classe e type são usualmente (mas não sempre) intercambiáveis uma classe tem conceito ligeiramente diferente de um tipo, no qual ela enfatiza a classificação da estrutura e comportamento. !" uma classe é um tipo definido pelo usuário que contém o molde, a especificação para os objetos, assim como o tipo inteiro contém o molde para as variáveis declaradas como inteiros. !" a classe envolve, associa funções e dados controlando o acesso a estes. !" definir classe implica em especificar os seus atributos (dados) e suas funções (métodos).As interfaces de uma classe ou objetos são representadas através de seus métodos e desuas funcionalidades. Em resumo, objetos são instâncias de classes que respondem mensagens deacordo com métodos determinados pelo protocolo de descrição de classes .Os objetostambém têm variáveis de estado definidas no protocolo de descrição de classe quepodem ter valores iguais ou diferentes nas várias instâncias da classe.1.5 Classes e Objetos Classes e Objetos estão intimamente relacionados, porém não são iguais. Uma Classecontém informação de como o objeto deverá se parecer e se comportar. É um tipo definidoProf. André Bernardi Capítulo 0
  • 6. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 6pelo usuário que contém o molde, a especificação para os objetos, assim como o tipo inteirocontém o molde para as variáveis declaradas como inteiros. Um primeiro exemplo desse relacionamento pode ser: !" entenda o esquema elétrico e o layout de um telefone como aproximadamente uma classe; !" o objeto, ou instância de uma classe, seria o telefone. Uma classe determina as características de um objeto: propriedades, eventos emétodos relacionados. Propriedades: Um objeto tem certas propriedades, ou atributos. Para o exemplo acima, um telefonepossui cor e tamanho. Quando um telefone é colocado em sua casa ou escritório, ele teráuma certa posição sobre uma mesa. O receptor pode estar no ou fora do gancho. Objetos criados com o Visual C++, contém certas características que sãodeterminadas pela classe em que o objeto está baseado. Estas propriedades podem serfixadas a em seu desenvolvimento ou em tempo de execução. Por exemplo um check box,poderá conter as seguintes propriedades, descritas na tabela abaixo: Propriedade Descrição Titulo Um texto descritivo antes do check box Habilitado Quando o check box puder ser selecionado pelo usuário. Esquerda Alinhamento a esquerda do check box Visível Quando o check box está visível na janela Eventos: Cada objeto reconhece e pode responder a certas ações chamadas eventos. Umevento é uma atividade específica e pré determinada, iniciada tanto pelo usuário quantopelo sistema. Na maioria dos casos eventos são gerados pela interação do usuário. Porexemplo, para o telefone, um evento é disparado toda vez que o usuário retira o fone dogancho. Eventos são gerados quando o usuário pressiona um botão para discar, etc. Na programação para Windows, uma ação do usuário que pode provocar o disparo deum evento pode ser um click ou movimento do mouse, ou pressionar uma tecla do teclado.Quando um erro ocorre ao inicializar um objeto um evento do sistema é disparado. A tabela a seguir mostra alguns eventos relacionados com o check box. Evento Descrição Click do mouse Usuário pressiona o check box GotFocus Usuário seleciona o check box por um click ou tab. LostFocus Usuário seleciona outro controle Métodos: Métodos são funções que estão associadas aos objetos. Suas chamadas são feitasatravés de mensagens. Um método pode estar relacionado a um Evento. Exemplo se forescrito um método para responder ao evento de click do mouse, este será chamado todavez que o botão do mouse for pressionado. Métodos podem existir independente deeventos, estes métodos são chamados explicitamente dentro do código. A tabela a seguir mostra alguns métodos relacionados com o check box. Método Descrição Atualizar O valor do check box é atualizado para refletir as alterações que possam Ter ocorrido na base de dados subjacente. SetFocus O foco atual é passado ao check box como resultado de um usuário pressionar a tecla TAB até o check box ser selecionado.Prof. André Bernardi Capítulo 0
  • 7. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 7 A classe envolve, associa, funções e dados, controlando o acesso a estes, definí-laimplica em especificar os seus atributos (dados) e suas funções membro (métodos). Exemplos: 1. Um programa que utiliza uma interface controladora de um motor elétrico provavelmente definiria a classe motor. Os atributos desta classe seriam: temperatura, velocidade, tensão aplicada. Estes provavelmente seriam representados na classe por tipos como float ou long . As funções membro desta classe seriam funções para alterar a velocidade, ler a temperatura, etc. 2. Um programa editor de textos definiria a classe parágrafo que teria como um de seus atributos uma string ou um vetor de strings, e como funções membro, funções que operam sobre estas strings. Quando um novo parágrafo é digitado no texto, o editor cria a partir da classe parágrafo um objeto contendo as informações particulares do novo texto. Isto se chama instanciação ou criação do objeto. 3. Um programa de controle de vendas definirias as classes Cliente, Venda, Produto, Fatura, Vendedor. As classes de Cliente e Venda teriam os seguintes dados e métodos: Classe Atributos Métodos id_cliente Incluir nome_cliente Alterar Cliente endereco Excluir pessoa_autorizada Consultar Status id_cliente registrar id_vendedor calcular_comissão Venda data_venda calcular_fatura produto2 Notação utilizada para Análise de Projeto Baseado em Objetos.2.1 Classe CLASSE ATRIBUTOS Representa uma Classe abstrata SERVIÇOS2.2 Classe & Objeto CLASSE & OBJETO ATRIBUTOS Retângulo mais interno representa a Classe ( molde para os objetos ). O retângulo mais externo representa os objetos da classe. Uma classe e seus objetos. SERVIÇOSProf. André Bernardi Capítulo 0
  • 8. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 82.3 Estrutura Generalização - Especialização (Gen-Spec) Objeto generalizador: apresenta GENERALIZAÇÃO características comuns a todos os objetos especializados Objetos especializados: apresentam, além das características do objeto generalizador (atributos e serviços), novas características que podem incluir novos atributos e redefinição de serviço ESPECIALIZAÇÃO ESPECIALIZAÇÃO2.4 Estrutura Todo - Parte TODO Objeto Todo ( 1-n ) Cada Todo é composto por 1 ou mais partes 1-n 1-n Objetos Parte 1 1 ( 1 ) Cada parte pertence a um único Todo PARTE PARTE2.5 Conexões de Ocorrência Objetos associados entre si. Uma conexão de ocorrência é um mapeamento do domínio do OBJETO 1 OBJETO 2 problema que um objeto precisa ter com outros objetos, para cumprir suas responsabilidades. n 1 A numeração ao lado do objeto representa o número de ocorrências do objeto que participam da associação.Prof. André Bernardi Capítulo 0
  • 9. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 92.6 Conexão de Mensagens OBJETO EMISSOR OBJETO RECEPTOR SEVIÇO2 SERVIÇO1 Um emissor envia uma mensagem para um receptor para a realização SEVIÇO2 de um processamento. SERVIÇO12.7 Assunto1 ASSUNTO 12 ASSUNTO 2Notação para Assunto, quebrada1 1 2 21 1 2 2Notação para Assunto, expandida (quando é mostrada com outras camadas).2.8 Notação para Diagrama de Estado do Objeto Estado TransiçãoProf. André Bernardi Capítulo 0
  • 10. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 102.9 Notação para Diagrama de Serviço3 Descrição de protocolos de classe3.1 Especificando uma classe Suponha um programa que controla um motor elétrico através de uma saída serial(como exemplo da seção 1.5). A velocidade do motor é proporcional a tensão aplicada, eesta proporcional aos bits que vão para saída serial e passando por um conversor digitalanalógico. Vamos abstrair todos estes detalhes por enquanto e modelar somente a interface domotor como uma classe, a pergunta é que funções e que dados membro deve ter nossaclasse, e que argumentos e valores de retorno devem ter essas funções membro:Representação da velocidade: A velocidade do motor será representada por um atributo, ou dado membro, inteiro(int). Usaremos a faixa de bits que precisarmos, caso o valor de bits necessário não possaser fornecido pelo tipo, usaremos então o tipo long, isto depende do conversor digitalanalógico utilizado e do compilador.Representação da saída serial: O motor precisa conhecer a sua saída serial, a sua ligação com o "motor do mundoreal". Suponha uma representação em hexadecimal do atributo endereço de porta serial,um possível nome para o atributo: enderecomotor. Não se preocupe em saber como usar arepresentação hexadecimal.Alteração do valor da velocidade: Internamente o usuário da classe motor pode desejar alterar a velocidade, cria-seentão o método (em C++ função membro): void altera_velocidade(int novav); . O códigoanterior corresponde ao cabeçalho da função membro, ela é definida junto com a classemotor, associada a ela. O valor de retorno da função é void (valor vazio), poderia ser criadoum valor de retorno (int) que indicasse se o valor de velocidade era permitido e foi alteradoou não era permitido e portanto não foi alterado.Prof. André Bernardi Capítulo 0
  • 11. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 11 Não faz sentido usar, chamar, esta função membro separada de uma variável do tipomotor, mas então porque na lista de argumentos não se encontra um motor? Estepensamento reflete a maneira de associar dados e código (funções) das linguagensprocedurais. Em linguagens orientadas a objetos o código e os dados são ligados de formadiferente, a própria declaração de um tipo definido pelo usuário já engloba as declaraçõesdas funções inerentes a este tipo. Note que não fornecemos o código da função, isto não é importante, por hora apreocupação é com a interface definida pela classe: suas funções membro e dados membro.Apenas pense que sua interface deve ser flexível de modo a não apresentar entraves para acriação do código que seria feita numa outra etapa. Nesta etapa teríamos que imaginar queo valor numérico da velocidade deve ir para o conversor onde irá se transformar numadiferença de potencial a ser aplicada nos terminais do motor, etc.3.2 Componentes de uma descrição de classe Uma descrição de classe é composta por três elementos: 1. Declarações de campos de dados 2. Protótipos para funções membros 3. Definições das funções membros Existem muitas opções com relação ao lugar em que podemos colocar as váriaspartes de uma descrição de classe. Uma maneira simples é incluir todas as três partesacima em um único arquivo de cabeçalho. Uma segunda alternativa é colocar os campos dedados e os protótipos em um arquivo de cabeçalho e colocar as definições das funções emum ou mais arquivos de compilação. Uma terceira opção é incluir a descrição completa daclasse em um único arquivo que também contenha o programa executável. Esta últimaescolha é indesejável quando outros usuários forem utilizar esta classe, o que geralmenteacontece. Uma descrição de classe formal começa com a palavra reservada class (seguida deum abre chaves { ) e termina com um fecha chaves e um ponto e virgula. ( }; ) conforme oexemplo abaixo. A descrição de classe tem três seções cada uma delas contendo campo de dados efunções membros. As três seções são: privada ( private: ), protegida ( protected: ) epública ( public: ). Os dados e as funções membros, na seção privada podem ser acessadosapenas pelo protocolo da descrição de classe. Os dados e as funções membros na seçãopública podem ser acessados pelo código de qualquer arquivo usuário que “inclua” adescrição de classe. As variáveis (objetos) declaradas como do tipo classe têm acesso diretoapenas à seção pública de suas descrições de classe. A categoria protegida tem aplicação nouso de classes derivadas (Herança).Exemplo de Sintaxe para Descrição de Classeclass CNomeClasse{private: tipo m_dados1; tipoRetorno funcao1( lista parametros );protected: tipo m_dados2; tipoRetorno funcao2( lista parametros );public: CNomeClasse ( lista parametros a); // Construtor 1 CNomeClasse ( lista parametros b); // Construtor 2 CNomeClasse ( void ); // Construtor sem parametrosProf. André Bernardi Capítulo 0
  • 12. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 12 ~CNomeClasse ( void ); // Destrutor tipo m_dados3; tipoRetorno funcao3( lista parametros ) { instrucoes };}; Os construtores são identificados como funções membros cujos nomes são iguais aonome da classe. A listagem acima mostra três construtores para a classe CNomeClasse . Asobrecarga do nome do construtor precisa satisfazer as mesmas exigências das outrasfunções, isto é, as listas de parâmetros precisam ser diferentes. Um construtor pode teruma lista de parâmetros void. Os construtores podem fornecer valores default para um oumais de seus parâmetros. A função membro ~CNomeClasse é um destrutor. Ela precisa ter uma lista deparâmetros void. Pode ter um corpo de código executável se necessário. Na listagem,apenas protótipos são fornecidos para o Construtor1, Construtor2, Construtor3, destrutor,funcao1 e funcao2. Tanto protótipos como definições são fornecidos para funcao3. Quando adefinição de uma função membro está incluida na descrição de classe, ela é tratada comocódigo inline. As restrições de implementação geral pedem que o código inline não contenhanenhuma construção de controle, exceto if ( como por exemplo do, for, while, break,continue, goto, switch). Recomenda-se que o código inline seja usado com ponderação eapenas no caso de implementações relativamente simples de funções membros. Os detalhes relativos às definições de Construtor1, Construtor2, Construtor3,destrutor, funcao1 e funcao2, são fornecidos fora da descrição formal da classe. Elespecisam então ser identificados com suas classes, conforme indica a listagem abaixo. Estesdetalhes podem estar contidos no mesmo arquivo da descrição formal da classe ou em umoutro arquivo. Se forem implementados em um outro arquivo, o arquivo cabeçalho precisaestar “incluido”, como mostra a listagem abaixo. As definições isoladas de funções sãoidentificadas com a classe apropriada colocando-se o qualificador CNomeClasse:: antes donome de cada função. Definições Externas para Funções Membros de uma Descrição de Classe// Conteúdo do arquivo para definições externas de funções membros#include “NomeClasse.h”tipoRetorno CNomeClasse::funcao1( lista parametros ){ instrucoes;};tipoRetorno CNomeClasse::funcao2( lista parametros ){ instrucoes;};CNomeClasse::CNomeClasse ( lista parametros a) // Construtor 1{ instrucoes;};CNomeClasse::CNomeClasse ( lista parametros b) // Construtor 2{ instrucoes;};CNomeClasse::CNomeClasse ( void ) // Construtor sem parametros{ instrucoes;};CNomeClasse::~CNomeClasse ( void ) // DestrutorProf. André Bernardi Capítulo 0
  • 13. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 13{ instrucoes;}; Se alguém tentar incluir campos de dados no arquivo externo que é parte de umadescrição de classe, ocorrerá um erro. Todas as declarações precisam estar na descriçãoformal da classe. Apenas as definições das funções membros e membros de dados estáticospodem ser externas à descrição formal da classe.Prof. André Bernardi Capítulo 0
  • 14. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 14 Capítulo 1 Microsoft Windows e Visual C++ Muito já foi escrito sobre a aceitação de Microsoft Windows e os benefícios de suainterface gráfica com o usuário (GUI). Esta introdução resume o modelo de programaçãoWindows (Win32 em particular) e mostra como os componentes do Visual C++ trabalhamem conjunto para lhe ajudar a escrever aplicações para Windows. No decorrer do capítulo,você aprenderá algumas coisas novas sobre o Windows.1 O Modelo de programação do Windows Não importa que ferramentas de desenvolvimento você usa, a programação paraWindows é diferente de velho-estilo de programação orientado a grupo ou orientado atransação. Para iniciar é preciso saber alguns fundamentos do Windows. Como umaarmação de referência, nós usaremos o famoso modelo de programação do MS-DOS. Atémesmo se você não programa atualmente para MS-DOS claro, você está provavelmentefamiliarizado com isto.1.1 Processamento de Mensagens Quando você escreve uma aplicação MS-DOS, baseada em C, a única exigênciaabsoluta é a existência de uma função chamada main. O sistema operacional chama mainquando o usuário roda o programa, e daquele ponto em diante pode-se usar qualquerestrutura de programação que desejar. Se seu programa precisa adquirir entradas doteclado via usuário ou ainda usar serviços do sistema operacional, é possível chamar asfunções apropriadas, como getchar, ou talvez usar uma biblioteca de funções demanipulação de caracteres. Quando o sistema operacional Windows inicia um programa, chama a funçãoWinMain do programa. Em algum lugar de sua aplicação tem que ter WinMain que executaalgumas tarefas específicas. Sua tarefa mais importante é criar a janela principal daaplicação que tem que ter seu próprio código para processar mensagens que o Windowsenvia. Uma diferença essencial entre um programa escrito para o MS-DOS e um programaescritos para Windows é que um programa baseado em MS-DOS chama o sistemaoperacional para adquirir as entradas do usuário, mas um programa baseado em Windows oprocessa as entradas do usuário por mensagens do sistema operacional. NOTE: Muitos ambientes de desenvolvimento para Windows, inclusive Microsoft Visual C++ versão 5.0 com a Microsoft Foundation Class (MFC) versão 4.21, simplifica a programação ocultando a função WinMain e estruturando o processo de manipulação de mensagens. Quando você usa a biblioteca MFC, você precisa não escreva uma função WinMain mas é essencial que você entenda o vínculo entre o sistema operacional e seus programas. A maioria das mensagens do Windows são estritamente definidas e aplicam-se atodos os programas. Por exemplo, a mensagem WM_CREATE é enviada quando uma janelaestá sendo criada, a mensagem WM_LBUTTONDOWN é enviada quando o usuário aperta obotão esquerdo do mouse, a mensagem WM_CHAR é enviada quando o usuário digita umcaractere, e a mensagem de WM_CLOSE é enviada quando o usuário fecha uma janela.Prof. André Bernardi Capítulo 1
  • 15. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 15Todas as mensagens têm dois parâmetros de 32-bit que carregam informações como ascoordenadas do cursor, código da tecla, e assim por adiante. Windows envia mensagens deWM_COMMAND à janela apropriada em resposta para seleções do usuário no menu,pressiona um botão em um diálogo, etc. Os parâmetros da mensagem Command variam edependendo layout do menu da janela. Você pode definir suas próprias mensagens que seuprograma pode enviar a qualquer janela no desktop. Estas mensagens definidas pelousuário na verdade fazem com que o C++ se pareça um pouco como Smalltalk. Não se preocupe ainda como estas mensagens são conectadas a seu código. Isso é otrabalho da Estrutura de Aplicação (Application Framework). Entretanto, esteja atento que oprocessamento de mensagens do Windows impõe muitas exigências na estrutura de seuprograma. Não tente forçar seu programa Windows para ele se parecer com seusprogramas velhos de MS-DOS. Estude os exemplos neste curso, bem como os exemplos doVisual C++ e então estrá preparado para iniciar em sua nova filosofia.1.2 Interface de Dispositivos de Gráficos do Windows (GDI) Muitos programas de MS-DOS escreveram diretamente à memória de vídeo e a portade impressora. A desvantagem desta técnica era a necessidade de prover driver de softwarepara toda placa de vídeo e todo modelo de impressora. Windows introduziu uma camada deabstração chamada a Interface de Dispositivo de Gráficos (GDI). Windows provê o driver devídeo, assim seu programa não precisa saber o tipo de placa de vídeo e impressora de seusistema. Ao invés de acessar diretamente o hardware, seu programa chama funções da GDIque referencia uma estrutura de dados chamada um contexto de dispositivo. Windowsmapeia a estrutura de contexto de dispositivo para um dispositivo físico que reconhece asinstruções de entrada/saída apropriadas. A GDI é quase tão rápida quanto o acesso diretode vídeo, e permite a diferentes aplicações escritas para Windows compartilhar a exibiçãona tela.1.3 Programação Baseada em Recursos Quando você programa para Windows, você armazena dados em um arquivo derecurso que usa vários formatos estabelecidos. O linker combina este arquivo de recursobinário com a saída do compilador de C++ para gerar um programa executável. Arquivos derecurso podem incluir bitmaps, ícones, definições de menu, layouts de caixas de diálogo, estrings. Podem ainda incluir formatos de recurso personalizado definidos pelo própriousuário. Você usa um editor de texto para editar um programa, mas você geralmente usaferramentas WYSIWYG (What You See Is What You Get - o que você vê é o que vocêadquire) para editar recursos. Se você está dispondo uma caixa de diálogo, por exemplo,que você seleciona elementos (botões, caixas de lista, e 50 adiante) de um array de íconeschamado Control Palette, e você posiciona e classifica segundo o tamanho os elementoscom o mouse. O ambiente de desenvolvimento integrado para Visual C++, MicrosoftDeveloper Studio 97, tem os editores de recursos gráficos para todos os formatos derecurso padrões.1.4 Gerenciamento de Memória A cada versão nova do Windows, o gerenciamento de memória se torna mais fácil.Se você ouviu falar histórias de horror de travar handles de memória, thunks, eburgermaster, não se preocupe. Isso é tudo passado. Hoje simplesmente você aloca amemória que você precisa e o Windows cuida dos detalhes.Prof. André Bernardi Capítulo 1
  • 16. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 161.5 Bibliotecas de Vínculo Dinâmico (DLL’s) No ambiente MS-DOS, todos os módulos do programa são vinculados(linked)estaticamente durante o processo de construção (build). Windows permite o vínculodinâmico, por meio de bibliotecas especificamente construídas que podem ser lidas evinculadas em tempo de execução do programa. Essas bibliotecas de vínculodinâmico(DLL’s) podem ser compartilhadas por múltiplos programas, o que permiteeconomizar memória e espaço em disco. A modularidade de um programa é reforçadaatravés do uso do Vinculo Dinâmico, pois as DLL’s podem ser testadas e compiladasseparadamente. Os desenvolvedores de MFC tiveram sucesso combinando todas as classes quecompõe a estrutura das aplicações em algumas DLLs. Isto significa que você pode vincularestática ou dinamicamente as classes da estrutura das aplicação em seu aplicativo.1.6 A Interface de Programação de Aplicações Win32 (API) Antigos programadores em Windows escreviam aplicativos em C para a interface deprogramação Win16 (API). Hoje, para escrever aplicativos 32-bit, é necessário utilizar anova Win32 API, ainda que direta ou indiretamente. Muitas funções Win16 teem suasequivalentes em Win32, mas muitos dos parâmetros são diferentes, por exemploparâmetros de 16 bits foram substituídos por parâmetros de 32 bits. A Win32 API oferecemuitas funções novas, incluindo funções de manipulação de disk I/O, que eramformalmente manipuladas por funções chamadas do MS-DOS. Com a versão de 16-bit doVisual C++, programadores com MFC estão bem separados destas diferenças de API porqueeles escreveram no padrão da MFC que foi projetado para trabalhar com Win16 ou Win32.2 Os Componentes do Visual C++ Microsoft Visual C++ se comporta como dois aplicativos Windows dedesenvolvimento de sistemas completos em um só produto. É possível criar programas paraWindows utilizando a linguagem C através da Win32 API. A programação em linguagem CWin32 é descrita no livro de Charles Petzold Programming Windows 95 (Microsoft Press,1996). Você pode usar muitas ferramentas do Developer Studio e de Visual C++, inclusiveos editores de recurso, para tornar a programação de baixo nível Win32 mais fácil. Visual C++ ainda inclue a ActiveX Template Library (ATL), que pode ser utilizadapara desenvolver controles ActiveX controls para a Internet. A programação utilizando aATL não é igual a programação Win32 em C nem a programação usando a MFC, e não seráabordada neste curso. Este curso não é sobre linguagem C, programação Win32, ou programação ATL.Trata sobre programação C++ dentro da estrutura das aplicações da biblioteca MFC que éparte do Visual C++. Serão utilizadas as classes C++ que estão documentadas dentro daMicrosoft Foundation Class Reference and será possível utilizar de ferramentas específicasdo Visual C++ para a estrutura das aplicações, como o AppWizard e o ClassWizard. NOTA: O uso da interface da MFC não impede que sejam utilizadas função da API diretamente. De fato muitas vezes é necessário utilizar as funções da API diretamente dentro de programas baseados na MFC. Um avaliação dos componentes do Visual C++, lhe ajudarão a adquirir seus portesantes de você comece com a estrutura das aplicações. A Figura 1 a seguir mostra umoverview do processo de construção(build) de um aplicativo no Visual C++.Prof. André Bernardi Capítulo 1
  • 17. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 172.1 O processo de construção e o Microsoft Developer Studio 97 Developer Studio é um ambiente de desenvolvimento integrado (IDE) que écompartilhado pelo Microsoft Visual C++, Microsoft Visual J++, Microsoft Visual Basic, euma série de outros produtos. Este IDE é uma ferramenta de desenvolvimento que estálonge do que foi o original Visual Workbench, que estava baseado no QuickC for Windows.Fazem parte do atual Developer Studio, Docking Windows, barras de ferramentasconfiguráveis, além de um editor que pode ser personalizado e utilizar macros. A ajudaonline para esse sistema (InfoViewer) trabalha como um Web browser. A Figura 2 a seguirmostra o Developer Studio em ação. Quem já foi usuário de versões anteriores do Visual C++ ou Borland IDE, jácompreende como o Developer Studio opera. Mas quem nunca utilizou uma dessasferramentas (IDEs), precisará saber o que é um projeto. Uma coleção de códigos fontesinterrelacionado que são compilados e linkados para criar um programa executávelbaseado no Windows ou uma DLL é um projeto. Arquivos fontes de cada projeto sãogeralmente armazenados em subdiretórios separados. Além disso , um projeto depende demuitos outros arquivos que não estão em seu subdiretório, tais como arquivos decabeçalhos (H), arquivos de bibliotecas (LIB). Programadores experientes estãofamiliarizados com makefiles. Um makefile armazena as opções de compilação e linker, bemcomo expressa o inter-relacionamento dos arquivos fontes. O programa make lê essesmakefile e chama o compilador, o montador, o compilador de recursos, e linker paraproduzir a saída final, que geralmente é um arquivo executável. O programa make usaregras de inferência interna para saber como chamar o compilador para criar um arquivoOBJ a partir de seu código fonte CPP. Developer Studio Compilação do Código Compilação de Recursos Arquivos de Arquivo de Arquivos cabeçalho do recurso (RC) fontes Windows Resource.h Arquivos de Bitmap, ícones, e Cabeçalhos outros recursos RunTime Compilador de Recursos Arquivos de Cabeçalhos MFC Arquivo RES Compilador Arquivos OBJ Bibliotecas do Executável Windows e da MFC Linker (EXE) Figura 1 – Processo de construção do Visual C++ Em um projeto do Visual C++ 5.0, não há makefile (com a extensão MAK) até quevocê especifique ao sistema para exportar um. Um arquivo de projeto no formato texto(com a extensão DSP) serve para o mesmo propósito. Um outro arquivo texto para oProf. André Bernardi Capítulo 1
  • 18. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 18workspace (com a extensão DSW) possui uma entrada para cada projeto que compõe esteworkspace. É possível ter vários projetos dentro de um mesmo workspace, porém todosexemplos deste curso terão apenas um projeto por workspace. Para trabalhar com umprojeto já existente, abra o arquivo com a extensão DSW dentro do Developer Studio e serápossível manipular este projeto.(editar compilar,etc.). Arquivos intermediários também são criados pelo Developer Studio. A tabela a seguircontém uma lista dos arquivos que são gerados pelo Developer Studio para cadaworkspace: Extensão Descrição APS Utilizado pelo Resouce View BSC Arquivo de informações do Browser CLW Utilizado pelo ClassWizard DSP Arquivo do Project* DSW Arquivo do Workspace* MAK makefile externo NCB Utilizado pelo ClassView OPT Armazena as configurações do workspace PLG Arquivo de log do Build * do not delete or edit in text editor. WizardBar Plataforma de Construção Código Fonte Janela WorkSpace Mensagens do Compilador e linker Figura 2 – Visual C++ e Developer StudioProf. André Bernardi Capítulo 1
  • 19. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 192.2 O Editor de Recursos - Workspace ResourceView Clicando-se na pasta ResourceView na janela Workspace do Visual C++, é possívelselecionar um recurso para a edição. A janela principal é anfitriã de um editor de recursodestinado a cada tipo de recurso selecionado. A janela pode hospedar um editor wysiwygpara menus e um potente editor gráfico para caixas de dialogo, e inclui ferramentas paraeditar ícones, bitmaps, e strings. O editor de diálogos permite ainda que sejam adicionadoscontroles ActiveX, controles padrões do Windows os novos Windows common controls. Usualmente, cada projeto contém um arquivo de recurso script (RC) no formatotexto, que descreve os menu, diálogos, string, e aceleradores do projeto. O arquivo RCpossui declarações #include para trazer recursos de outros subdiretórios. Estes recursosincluem itens específicos do projeto, como arquivos de bitmap (BMP) e de ícone (ICO), erecursos comum a todo programa em Visual C++ tal como strings de mensagem de erro. Aedição do arquivo RC fora do editor de recurso não é recomendada. Os editores de recursotambém podem processar arquivos EXE e DLL, assim pode-se utilizar o clipboard para“roubar” recursos, como bitmaps e ícones de outras aplicações do Windows.2.3 O Compilador C/C++ O compilador do Visual C++ pode processar tanto arquivos fontes em C e em C++.A linguagem é determinada pela extensão do arquivo do código fonte. Um extensão C indicaum código fonte em C, e CPP ou CXX indica um código fonte em C++. O compilador écompatível com todos padrões ANSI, incluindo as últimas recomendações de um grupo detrabalhos em bibliotecas C++, e também possui Microsoft extensions. Templates,exceptions e runtime type identification (RTTI) são plenamente suportados no Visual C++versão 5.0. A nova Standard Template Library (STL) é também incluída, embora não foiintegrado na MFC.2.4 O Compilador de Recursos O compilador de recursos do Visual C++ lê o arquivo script ASCII de recurso (RC)do editor de recursos e escreve um arquivo de recurso binário (RES) para o linker.2.5 O Linker O linker processa os arquivos OBJ e RES, produzidos pelo compilador C/C++ e ocompilador de recursos, e acessa os arquivos LIB para os códigos da MFC, runtime library, edo Windows. É responsável pela criação do arquivo executável EXE do projeto. A opção delink incremental minimiza o tempo de execução quando pequenas mudanças são feitas nosarquivos de códigos fontes. Os cabeçalhos dos arquivos da MFC contém blocos especiais#pragma (diretivas de compilação) que especificam os arquivos LIB que são necessários,assim você não tem que contar explicitamente para o linker quais bibliotecas ele deve ler.2.6 O Debugger Caso seu programa funcione da primeira vez, não é necessário usar o debugger.Todos nós poderiamos precisar dele de vez em quando. O debugger do Visual C++ temmelhorado continuamente, contudo não fixa de fato os bugs. O debugger trabalha juntocom o Developer Studio para assegurar que os breakpoints são armazenados em disco.Existem botões na barra de ferramentas para inserir e remover breakpoints e controlar aexecução passo a passo. A Figura 3 ilustra o debugger do Visual C++ em ação. Notar queas janelas Variables e Watch podem expandir um ponteiro de um objeto para mostrartodos seus membros das classes derivadas e base. Se o cursor do mouse for posicionadoProf. André Bernardi Capítulo 1
  • 20. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 20sobre uma variável, o debugger mostra seu valor em uma pequena janela (Tooltip). Paradebugar um programa, é necessário construí-lo (build) com as opção e de compilador elinker setadas para gerar informações de debug. Figura 3 – O Debugger em Ação2.7 AppWizard O gerador de código que cria todo o esqueleto de um aplicativo baseado emWindows é chamado de AppWizard. Os nomes das classes geradas, e de seus arquivos decódigo fonte, é baseado no que foi especificado em suas caixas de diálogo. O AppWizardserá utilizado exaustivamente por todo este curso, para gerar os programas de exemplo.Não confunda o AppWizard com os antigos geradores de código, que geravam todo o códigopara um aplicativo. O código gerado pelo AppWizard minimalista; a funcionalidade estádentro das classes bases da application Framework. O AppWizard permite que você inicializeuma aplicação nova rapidamente.2.8 ClassWizard ClassWizard é um programa (implementado como uma DLL) que está acessívelatravés do menu View do Developer Studio. O ClassWizard o alivia da maçante função demanter e gerar um código de classe no Visual C++. Se precisar de uma classe nova, deuma função virtual, ou uma nova função de manipulador de mensagem nova? OClassWizard escreve os protótipos, os corpos de função, e (se necessário) o código para unira mensagem do Windows para a função. ClassWizard pode atualizar códigos de classe jáescritos, assim pode-se evitar os problemas de manutenção comum a geradores de códigoordinários. Algumas características do ClassWizard estão disponíveis na WizardBar doDeveloper Studio, como mostrado na Figura 2.Prof. André Bernardi Capítulo 1
  • 21. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 212.9 The Source Browser Se você escreve uma aplicação do nada, você provavelmente tem um bom quadromental de seus arquivos de código fonte, classes, e funções membros. Se você assume umprograma de outra pessoa, você precisará de alguma ajuda. O Visual C++ Source Browser(o browser, resumidamente) permite que você examine (e edite) uma classe ou função deum aplicativo do ponto de vista da função em vez de do ponto de vista do arquivo. É um aferramentas “o inspetor” disponível par a as bibliotecas orientadas a objeto no Smalltalk. Obrowser permite os seguintes modos de pontos de vista: !" Definições de Referencias – você pode selecionar qualquer função, variável, tipo, classe ou macro e poderá ver onde ela está definida em seu projeto. !" Call Graph/Caller Graph – Para uma função selecionada é possível ver uma representação gráfica de quais funções a chamam e quais funções ela chama. !" Derived Class Graph/Base Class Graph – Mostra o diagrama gráfico de hierarquia de classes. Para uma classe selecionada é possível ver seus membros e os de sua classe base. A expansão da hierarquia pode ser controlada pelo mouse. !" File Outline – Para um arquivo selecionado, as classes, funções e membros de dados são mostradas onde são definidas e usadas em seu projeto. NOTA: Se simplesmente uma linha de código mudar de posição, em qualquer um dos códigos fontes que pertençam ao projeto, o banco de dados para o browser tem que ser regerado pelo Developer Studio, o que faz com que haja um aumento no tempo de compilação. Além do Browser, o Developer Studio tem a opção de utilizar a janela ClassView doWorkspace que não depende da geração de uma base de dados para o browser. Ela é umatree view com todas as classes do projeto, mostrando as funções membros e variáveismembros. Basta um duplo click em um de seus elementos, e o código fonte onde está adeclaração ficará visível imediatamente. A janela ClassView não contém informações sobrea hierarquia das classes que está disponível no browser.2.10 Ajuda Online Um modo completamente novo de ajuda online baseado em HTML foi incluído noDeveloper Studio 97. Cada tópico foi convertido em um documento HTML individual; e todosforam combinados em um arquivo InfoViewer title (IVT) com seu respectivo arquivo deInfoViewer index (IVI). A janela InfoView utiliza o código do Microsoft Internet Explorer 3.0,que trabalha como um Web browser já conhecido. Developer Studio pode acessar arquivosIVI do CD-ROM Visual C++ ou do disco rígido, e ainda pode acessar arquivos HTML naInternet. Quatro formas de acesso a ajuda online são permitidas no Developer Studio: !" By book – Quando é selecionado a opção Contents no menu Help do Developer Studio, a janela Workspace é trocada para o modo InfoView. Nela a documentação sobre Developer Studio, Visual C++, e Win32 SDK é organizada hierarquicamente por livros e capítulos. !" By topic - Quando é selecionado a opção Search no menu Help do Developer Studio e a pasta Index, uma palavra chave pode ser digitada e é possível visualizar os tópicos e artigos que incluem essa palavra.Prof. André Bernardi Capítulo 1
  • 22. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 22 !" By word - Quando é selecionado a opção Search no menu Help do Developer Studio e a pasta Query, é possível digitar uma combinação de palavras e ver os artigos que contém essas palavras. !" F1 help – Esse é o melhor amigo do programador. Movimente o cursor para dentro de uma a função, macro, ou nome de classe, e pressione a Tecla F1 e o help do sistema faz todo o trabalho. Se esse nome constar em mais de um arquivo de help, uma lista é mostrada para se selecionar o tópico desejado. Seja qual for o modo que o help online foi acessado, é possível copiar qualquer textode ajuda para o clipboard para inclusão em seu programa.2.11 Ferramentas de Diagnóstico O visual C++ contém várias ferramentas úteis para diagnóstico. SPYXX lhe dá umavisão da árvore dos processos de seu sistema, threads, e janelas. Também lhe deixa vermensagens e examina as janelas de aplicações correntes. Você achará útil por finalizarterefas errôneas que não estão visíveis na lista de tarefas Windows 95. O visual C++também inclui várias ferramentas para ActiveX, um programa de teste de controles ActiveX,o HCRTF compilador de help, gerenciador de biblioteca, viewers e editores de arquivosbinários, e outras ferramentas. Porém, a ferramenta DBWIN das versões de 16-bit do Visual C++, não existemmais. Essa tarefa foi incorporada pelo Developer Studio Debugger, e para ver as mensagensde depuração de seu programa é necessário executa-lo no modo Debug.2.12 A Galeria A galeria do Developer Studio permite que se compartilhem componentes desoftware entre diferentes projetos. A Galeria gerencia três tipos de módulos: !" ActiveX controls – quando é instalado um controle ActiveX (OCX - OLE control), uma entrada é feita dentro do Registro do Windows. Todos os controles ActiveX registrados aparecem na janela da Galeria, e podem ser selecionados em qualquer projeto. !" C++ source modules – quando uma nova classe é escrita, esse código pode ser adicionado na Galeria. Esse código pode ser selecionado e copiado nos outros projetos. Recursos também pode ser adicionados a Galeria. !" Componentes do Developer Studio - A Galeria contém ferramentas que podem ser usadas para adicionar características nos projetos. Tal ferramenta pode inserir novas classes, funções, membros de dados, e recursos em um projeto existente. Alguns componentes são fornecidos pela Microsoft (processamento de tempo Inativo, apoio de Paleta, e Splash Screen, por exemplo) como parte do Visual C++. Outros são fornecidos por outras firmas de Software. DICA: Se você decidir utilizar alguns dos componentes da Galeria Developer Studio, experimente primeiro em um projeto bobo para ver se é o que você realmente quer. Caso contrário, pode ser difícil de remover o código gerado de seu projeto regular. Todos os códigos gerados para a Galeria podem ser importados de um ou exportadospara um arquivo OCX. Estes arquivos fazem parte de um novo meio de distribuição ecompartilhamento para componentes do Visual C++.2.13 A Microsoft Foundation Class Library Versão 4.21Prof. André Bernardi Capítulo 1
  • 23. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 23 A biblioteca Microsoft Foundation Class versão 4.21 (a biblioteca MFC) é realmente oassunto desse curso. Ela define a estrutura dos aplicativos, item a ser amplamenteexplorado. A seção 3 contém um exemplo de código fonte e introduz alguns conceitosimportantes.2.14 A Microsoft ActiveX Template Library ATL é uma ferramenta, separada da MFC, designada para construir controlesActiveX. Os controles ActiveX podem ser criados tanto usando a MFC quanto a ATL, mascom a ATL os controles ficam menores e consequentemente mais rápidos de seremcarregados via Internet.3 Microsoft Foundation Class Library Application Framework (Overview) As próximas seções: !" Porque utilizar uma Estrutura de Aplicações? !" O que é uma Estrutura de Aplicações ? !" Mapeamento de Mensagens na MFC Library !" Documents e Viewso introduzem na estrutura das aplicações da biblioteca Microsoft Foundation Class versão4.2.1 (a MFC) e explica seus benefícios. Um primeiro exemplo é mostrado na página 27onde é possível introduzir parte da operacionalidade da MFC library na programação paraMicrosoft Windows e começar a entender o conceito de de estrutura de aplicação. Teoria émantida a um mínimo aqui, mas as seções sobre mapeamento de mensagens e emdocuments e views contem informações importantes que o ajudará com os exemplos quevirão a seguir.4 Porque utilizar uma Estrutura de Aplicações? Se você for desenvolver um aplicativo para o Windows, terá que escolher umambiente de desenvolvimento. Assumindo que opções não-C como Microsoft Visual Basic eBorland Delphi, foram rejeitadas, aqui estão algumas opções restantes: !" Programar em C com a Win32 API, !" Escrever sua prórpria biblioteca de classes em C++ para o Windows que utilize a Win32 API, !" Utilizar a estrutura de aplicações da MFC, !" Utilizar outra estrutura de aplicações baseada em Windows como a Object Windows Library (OWL) da Borland. Se você é a partir do zero, qualquer opção envolve uma curva de aprendizagemgrande. Se você já é um programador Win16 ou Win32, você ainda terá uma curva deaprendizagem com a MFC libray. Assim que benefícios podem justificar este esforço? Não quero parecer um pastor da Microsoft. Mas a MFC foi totalmente aceita pelomercado e até mesmo foi usado por outro publicador de compilador como Symantec. BemProf. André Bernardi Capítulo 1
  • 24. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 24como pela maioria de fabricantes de software profissionais do mercado como a Oracle,AutoDesk, entre outras. A própria Microsoft utiliza o Visual C++ para desenvolver seusaplicativos como por exemplo o pacote do Office e até mesmo o Internet Explorer. Aindaassim é uma boa idéia, navegar pelas características desta escolha de programação.A MFC Library é a Microsoft Windows API em C++. Assumindo a premissa que alinguagem C++ é agora um padrão para plataforma de desenvolvimento de aplicativosprofissionais, você teria que dizer que é natural para Windows ter uma interface deprogramação em C++. Que interface melhor há, do que aquela produzida pelo pessoal daMicrosoft, criador de Windows? Essa interface é a MFC library.Aplicativos que usam uma Application framework possuem uma estruturapadronizada. Qualquer programador que começa em um projeto grande desenvolve algumtipo de estrutura para o código. O problema é que a estrutura de cada programador édiferente, e é difícil para um membro novo do time aprender a estrutura se conformar aisto. A estrutura de aplicação da MFC library inclui sua forma própria para uma aplicação -uma que é aprovado em muitos ambientes de software e em muitos projetos. Se vocêescreve um programa para Windows que usa a MFC, você pode se aposentar seguramentepara uma ilha caribenha e saber que seus subordinados podem manter e aumentar seucódigo facilmente em casa. Não pense que a estrutura da MFC torna seus programas inflexíveis. Com a MFC, seuprograma pode chamar funções Win32 a qualquer hora a, assim você poder tirar proveitodo Windows.As ferramentas do Visual C++ reduzem a tarefa de codificar. O editor de recursos doDeveloper Studio, AppWizard, e ClassWizard reduzem significativamente o temponecessário para escrever código que é específico da sua aplicação. Por exemplo, o editor derecursos cria um arquivo de cabeçalho que contém valores constantes de #define para osidentificadores. AppWizard gera o esqueleto do código para sua aplicação inteira, eClassWizard gera protótipos e corpos de função para manipuladores de mensagem.A estrutura de aplicações da MFC Library é rica em características. A versão 1.0 daMFC library, continha todas as classes suportadas pelo Microsoft C/C++ versão 7.0,incluindo as seguintes características: !" Uma interface em C++ para a API do Windows API !" Classes de propósito geral (não específicas do Windows), incluindo !"Classes de Collection para listas, arrays, e maps !"Uma eficiente e útil classe para strings !"Classes para manipular horas e datas !"Classes de acesso a arquivos que permitem independência do sistema operacional !"Suporte a objetos de armazenamento e recuperação de dados em disco. !" Uma classe raiz comum a toda a hierarquia !" Suporte a aplicativos do tipo MDI (Multiple Document Interface) !" Algum suporte para OLE versão 1.0 A MFC library versão 2.0 classes (no Visual C++ 1.0) atualizou a versão 1.0 parapermitir o uso de muitas características comuns em programas baseados em Windows, alémde introduzir o conceito de Estrutura de Aplicações. A seguir a lista das mais importantescaracterísticas adicionadas:Prof. André Bernardi Capítulo 1
  • 25. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 25 !" Suporte total aos itens de menu File Open, Save, and Save As, além de permitir o uso da lista de mais recentes usados !" Suporte a Impressão e visualização de impressão !" Suporte para scrolling windows e splitter windows !" Suporte a barra de ferramentas e barra de status !" Acesso aos controles do Microsoft Visual Basic !" Suporte para help sensitivo ao contexto !" Suporte automático para processameto de dados em uma caixa de diálogo. !" Uma atualização para melhor suportar OLE 1.0 !" Suporte a DLL’sA MFC library 2.5 (no Visual C++ 1.5) contribuiu com o seguinte: !" Suporte a ODBC (Open Database Connectivity) que permite que seus aplicativos acessem dados armazenados com os formatos dos mais populares bancos de dados como o Microsoft Access, FoxPro, e Microsoft SQL Server !" Uma interface para OLE 2.01, que permite a edição de um objeto no local, linking, arrastar e soltar, e OLE Automation O Visual C++ 2.0 foi a primeira versão em 32-bit do produto, Que incluía suportepara Windows NT 3.5. Esta é a versão 3.0 da MFC library, que incluiu as seguintescaracterísticas: !" Suporte a Tab dialog (property sheet) !" Docking control bars implementadas dentro da MFC !" Suporte a thin-frame windows !" Em anexo a ferramenta Control Development Kit (CDK) para construir controles OLE (OCX) para 16 e 32 bits, A versão 2.1 do Visual C++, que inclui a MFC 3.1, adicionou o seguinte: !" Suporte para os novos common controls do Microsoft Windows 95 (beta) !" Novos drivers de ODBC para integrar com a Access jet database engine !" Classe Winsock que permite a comunicação via TCP/IP A Microsoft decidiu pular a versão 3.0 do Visual C++ e ir diretamente a versão 4.0com o intuito de sincronizar a versão do Visual C++ com a versão da MFC. MFC 4.0 contémas seguintes características adicionais: !" New OLE-based Data Access Objects (DAO) classes for use with the Jet engine !" Use of the Windows 95 docking control bars instead of the MFC control bars !" Full support for the common Controls in the released version of Windows 95, with new tree view and richedit view classes !" New classes for thread synchronization !" OLE Control container support Visual C++ 4.2 (subscription) inclui a MFC 4.2. As seguintes características foramadicionadas: !" Winlnet classes !" ActiveX Documents server classes !" ActiveX synchronous and asynchronous moniker classes !" Enhanced MFC ActiveX Control classes, with features such as window less activation, optimized drawing code, and so forthProf. André Bernardi Capítulo 1
  • 26. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 26 !" Improved MFC ODBC support, including recordset bulk fetches and data transfer without binding A versão 5.0 do Visual C++ com a MFC 4.21, (com alguns bugs da 4.2 corrigidos).Dentre as principais caracteríticas adicionadas ao Visual C++ 5.0 estão: !" A redesigned IDE, Developer Studio 97, which includes an HTML-based online help system and integration with other languages, including Java !" The ActiveX Template Library (ATL) for efficient ActiveX Control construction for the Internet4.1 A curva de aprendizado Todos os benefícios listados acima soam muito bem, não? Você provavelmente estápensando "Você não adquire algo por nada". Sim, isso é verdade. Para usar a Estrutura dasAplicações efetivamente ela deve ser aprendida por completo, e isso leva tempo. Se vocêtem que aprender C++, Windows, e a MFC library (sem OLE) tudo ao mesmo tempo, levaráseis meses pelo menos antes de você se torne realmente produtivo. De maneirainteressante isso está perto do tempo de aprendizagem só do Win32 API. Como isso pode acontecer se a MFC library oferece muito? Em primeiro lugar, vocêpode evitar muitos detalhes de programação em linguagem C que programadores Win32são forçados a aprender. Uma estrutura de aplicações orientada a objeto, torna aprogramação para Windows mais fácil para se aprender, uma vez você entenda aprogramação orientada a objetos. A biblioteca de MFC não trará a programação Windows até as massas.Programadores de aplicações para Windows normalmente demandam salários mais altosque outros programadores e esta situação continuará. A curva de aprendizado da MFClibrary, junto com o poder da estrutura das aplicações, deveria assegurar queprogramadores em MFC library continuarão estando em forte demanda.5 O que é uma Estrutura de Aplicações ? Uma definição para estrutura das aplicações (application framework) é "uma coleçãointegrada de componentes de software orientado a objeto que oferece tudo que énecessário para a construção de um Aplicativo genérico". Está é uma definição muito útil,não? Se você realmente quer saber o que uma estrutura das aplicação é, você terá que lero resto desta apostila. O exemplo de Estrutura de Aplicação nesta seção é um bom ponto departida para este conhecimento.5.1 Uma Estrutura de Aplicações X uma biblioteca de Clases Uma das razões para a linguagem C++ ser popular que é ela pode ser “estendida”com bibliotecas de classe. Algumas bibliotecas de classe são entregues com compiladoresde C++ outras são vendidas através de firmas de software, e ainda outras sãodesenvolvidos em casa. Uma biblioteca de classe é um conjunto de classes de C++relacionadas que podem ser usadas em uma aplicação. Uma biblioteca de classes dematemática, por exemplo, poderia executar operações matemáticas comuns e umabiblioteca de classe de comunicações poderiam apoiar a transferência de dados em um linkserial. Às vezes você constrói objetos das classes providas; às vezes você deriva suaspróprias classes - tudo depende do design particular da biblioteca de classes.Prof. André Bernardi Capítulo 1
  • 27. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 27 Uma estrutura de aplicações é um super conjunto de bibliotecas de classes. Umabiblioteca ordinária é um conjunto isolado de classes projetada para ser incorporada emqualquer programa, mas uma Estrutura de Aplicações define a estrutura do programa. AMicrosoft não inventou o conceito de Estrutura de Aplicações. Surgiu no Mundo acadêmico,e a primeira versão comercial era foi a MacApp para o Apple da Macintosh. Desde que aMFC 2.0 foi introduzida, outras companhias, inclusive Borland, lançaram produtossemelhantes.5.2 Um exemplo de uma Estrutura de Aplicações O exemplo abaixo é um código fonte - não pseudocódigo mas código real que de fatocompila e roda com a MFC library. É o velho e bom "Hello world !”, com algumasmodificações. Está é a quantia mínima de código para um aplicativo Windows baseado naMFC library funcionar. Não é necessário entender todas linhas agora. Não perca tempodigitando este exemplo, espere pelos próximos capítulos onde você começará usando umaplicativo "real" usando a estrutura de aplicação. NOTA : Por convenção, as classes da MFC library iniciam com a letra C. A seguir está listado o código fonte dos arquivos para o cabeçalho e aimplementação do aplicativo MYAPP. As classes CMyApp e CMyFrame são derivadas dasclasses bases da MFC library. Arquivo de cabeçalho MyApp.h do aplicativo MYAPP:// application classclass CMyApp : public CWinApp{public: virtual BOOL InitInstance(); 1;};// frame window classclass CMyFrame: public CFramewnd{public: CMyFrame( );protected: // “afx_msg” indica que as próximas duas funções fazem parte // do sistema de controle de mensagens da MFC. afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnPaint();}; Este é o arquivo de implementação do primeiro exemplo.#include <afxwin.h> // biblioteca da MFC onde estão declaradas as classesbases#include “myapp.h”CMyApp theApp;BOOL CMyApp::InitInstance(){ m_pManWnd = new CMyFrame(); m_pManWnd->ShowWindow(m_nCmdShow); m_pManWnd->UpdateWindow(); return TRUE;}Prof. André Bernardi Capítulo 1
  • 28. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 28CMyFrame::CMyFrame(){ Create(NULL “Aplicativo MYAPP”) ;}CMyFrame::OnLButtonDown(UINT nFlags, CPoint point){ TRACE(“Entrando em CMyFrame::OnLButtonDown - %lx, %d, %dn”, (long) nFlags, point.x, point.y);}CMyFrame::OnPaint(){ CPaintDC dc(this); dc.TextOut(0,0,”Hello world!”);} Aqui estão alguns elementos desse programa:A função WinMain – Lembrar que o Windows requer que os aplicativos tenham a funçãoWinMain. Aqui WinMain não é visível porque está encapsulada dentro da estrutura dasaplicações.A classe CMyApp – Um objeto da classe CMyApp representa um aplicativo. O programadefine um objeto global do tipo CMyApp, theApp. A classe base CWinApp determina amaioria do comportamento de theApp.Inicialização do aplicativo – Quando o usuário inicializa o aplicativo, o Windows chama afunção WinMain interna da estrutura de aplicação, e WinMain procura pelo construtor doobjeto global do aplicativo da classe derivada de CWinApp. Não esquecer que numprograma em C++, objetos globais são construídos antes do programa principal serexecutado.A função membro CMyApp::lnitlnstance – Quando a função WinMain procura o objetoaplicativo, a função membro virtual InitInstance é chamada, que faz as chamadasnecessárias para construir e exibir a janela da mainframe do aplicativo. Você tem quesobrecarregar a InitInstance em sua classe derivada da aplicação porque o CWinApp que éa classe base não conhece que tipo de janela principal você quer chamar.A função membro CWinApp::Run – A função Run está encapsulada na classe base, masdespacha as mensagens da aplicação para suas janelas e assim mantém o funcionamentoda aplicação. WinMain chama Run depois que chama InitInstance.A classe CMyFrame – Um objeto da classe CMyFrame representa a janela da mainframedo aplicativo. Quando o construtor chama a função membro Create da classe baseCFrameWnd, o Windows cria a estrutura da janela e a application framework a vincula a umobjeto em C++. As funções ShowWindow e UpdateWindow, também membros da classebase, devem ser chamadas para exibir a janela.A função CMyFrame::OnLButtonDown - Isto é uma pré-estréia da capacidade demanipular mensagens da MFC. O evento pressionar o botão esquerdo do mouse é mapeado“map” para uma função membro de CMyFrame. Você aprenderá os detalhes das mensagenscoma a biblioteca MFC mais adiante. Por enquanto aceite que esta função é chamadaquando o usuário aperta o botão de esquerdo do mouse. A função invoca a macro TRACE daMFC para exibir uma mensagem na janela de depuração.Prof. André Bernardi Capítulo 1
  • 29. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 29A função CMyFrame::OnPaint- A estrutura das aplicações chama esta importante funçãomembro mapeada na classe CMyFrame toda vez que for necessário redesenhar a janela: aoinicializar o programa, ao redimensionar um janela e quando qualquer parte da janela forrevelada após estar sobre outra. A declaração de CPaintDC relaciona-se com a Interface deDispositivo de Gráficos (GDI) e é explicado em mais adiante. A função TextOut exibe “Hello,world!”.Finalização do Aplicativo- O usuário termina a aplicação fechando a janela da mainframe.Esta ação inicia uma sucessão de eventos que termina com a destruição do objetoCMyFrame, a saída de Run e a saída de WinMain, e a destruição do objeto CMyApp. Examine o código fonte do exemplo novamente. A maior parte da funcionalidade daaplicação está nas classes bases da MFC CWinApp e CFrameWnd. Ao escrever MYAPP, nósseguimos algumas regras simples de estrutura e escrevemos funções chaves em nossasclasses derivadas. C++ nos “deixa obter emprestado” muito código sem precisar copiar isto.Pense nisto como uma sociedade entre nós e a application framework. A applicationframework prove a estrutura, nós provemos o código que faz a aplicação ser unica. Agora você está começando a ver por que a application framework é mais do queuma biblioteca de classes. A application framework não faz só a estrutura de um aplicativo,mas também fornece mais que classes bases C++. Você já viu como a função encapsuladaWinMain trabalha. Outros elementos suportam o processamento de mensagem,diagnósticos, DLLs, e assim sucessivamente.6 Mapeamento de Mensagens na MFC Library Referindo-se à função membro OnLButtonDown do exemplo anterior. Você poderiapensar que OnLButtonDown seria um candidato ideal uma função virtual. Uma classe basejanela definiria funções virtuais para mensagens de evento de mouse e outras mensagenspadrões, e as classes derivadas da janela poderiam sobrecarregar as funções quandonecessário. Algumas bibliotecas de classe para Windows trabalham deste modo. A application framework da MFC library não utiliza funções virtuais para asmensagens do Windows. Ao invés disso, utilizam macros para “mapear” as mensagensespecificadas para funções membros das classe derivadas. Porque esta rejeição com asfunções virtuais? Suponha que a MFC usasse funções virtuais para as mensagens. A classeCWnd teria que declarar as funções virtuais para 110 mensagens. C++ requer uma tabelade dispacho para funções virtuais, chamada vtable, para classe derivada que for utilizada noprograma. Cada vtable precisa de uma entrada de 4-byte para cada função virtual, mesmoque as funções não são sobrecarregadas de fato na classe derivada. Assim, para cada tipode janela ou controle, a aplicação precisaria de uma tabela de 440-byte para apoiar osmanipuladores de mensagem virtuais. E sobre os manipuladores de mensagem para mensagens de comando de menu emensagens de click de botão? Estes não podem ser definidos estes como funções virtuaisem uma classe base de janela porque cada aplicação pode ter um conjunto diferente decomandos de menu e botões. O sistema de mapeamento de mensagens da MFC evitavtables grandes, e acomoda mensagens de comando específicas da aplicação em paralelocom as mensagens ordinárias do Windows. Também permite non-window classes, comoclasses de documento e a classe de aplicação, manipulem mensagens de comandos. MFCusa macros para conectar (“map”) mensagens do Windows para funções membros em C++.Nenhuma extensão para a linguagem C++ é necessária. Um manipulador de mensagem na MFC requer um protótipo de função, um corpo defunção, e uma entrada (chamada da macro) no mapa de mensagem. ClassWizard lhe ajudaa acrescentar os manipuladores de mensagem em suas classes. Você seleciona umidentificador de mensagem do Windows ID de um list box, e o assistente gera o código comos parâmetros e valores de retorno correto para a função.Prof. André Bernardi Capítulo 1
  • 30. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 307 Documents e Views O exemplo acima usou um objeto application e um objeto frame window. Muitosaplicativos baseados na MFC library serão mais complexos. Tipicamente, conterão além dasclasses application e frame, mais duas outras classes que representam o "document" e a"view". Esta arquitetura document-view é o coração da estrutura das aplicações e estábaseado nas classes de Model/View/Controller do mundo do Smalltalk. Um “document” é um objeto de dados que é manipulado pelo usuário em uma seçãode edição. É criado pelos comando do menu File New ou Open e são tipicamentearmazenados em arquivos. Uma “view” é um objeto janela que permite que o usuáriointeraja com o documento ao qual ela está associada. Em termos gerais, a arquitetura de document-view separa os dados, da visão pelousuário dos dados. Um benefício óbvio é visões múltiplas dos mesmos dados. Considere umdocumento que consiste no preço de um mês de citações acionárias armazenado em disco.Suponha que existam uma visão de tabela e uma visão gráfica dos dados. O usuárioatualiza valores na janela da tabela, e a janela do gráfico muda porque ambas as janelasexibem a mesma informação (mas em visões diferentes). Em aplicativos da MFC library, documents e views são representados por instânciasde classes C++. A classe base do document interage com menu File Open e File Save; a classe dedocument derivada faz a leitura e escrita dos dados do objeto de documento. (A estruturadas aplicações faz a maioria do trabalho de exibir o diálogo de abertura de Arquivos egravação de arquivos e abrindo, fechando, lendo, e escrevendo arquivos.) A classe baseview representa uma janela que é contida dentro de uma janela de frame; a classe de visãoderivada interage com sua classe de documento associada e faz a exibição da aplicação eimpressão. As classes view derivada e base manipulam as mensagens de Windows. A MFClibray organiza todas as interações entre documentos, views, frame-window, e o objetoapplication, principalmente por funções virtuais. Não pense que um objeto de documento deve ser associado com um arquivo dedisco que é lido completamente na memória. Se um "documento" real fosse um banco dedados, por exemplo, pode-se sobrecarregar as funções membro que servem para selecionaro documento a função que responde ao menu File Open para mostrar uma lista de bancosde dados em vez de uma lista de arquivos.Prof. André Bernardi Capítulo 1
  • 31. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 31 Capítulo 2 Iniciando com o AppWizard Neste Capítulo é abordado um dos componentes da arquitetura Document-View, aclasse view, que está intimamente relacionada com a janela. Por hora os outros trêscomponentes básicos da estrutura de um programa com a MFC não serão abordados. Isto será feito de forma prática demonstrando a utilização do AppWizard para criarum esqueleto de um programa Windows. É claro que estes exemplos desse capítulo não serão capazes de armazenar dados nodisco e não suportará múltiplas janelas, suportes estes que serão abordados nos próximoscapítulos. Como os recursos são uma parte importante de um programa para Windows, seráabordada uma introdução do uso da ResourceView, para visualizar e explorar o programa.Serão informadas ainda dicas de como melhorar o tempo de compilação e melhorar avelocidade de execução de ser programa.1 O que é uma View? Do ponto de vista de um usuário, uma view é uma janela que pode serredimensionada, arrastada, fechada do mesmo modo que qualquer outro programa doWindows. Na visão do programador, uma view é um objeto C++ de uma classe derivada daclasse CView que pertence a biblioteca MFC. Como qualquer outro objeto em C++, ela édeterminada por seus membros e herda as características de suas classes bases. Com o Visual C++, é possível criar aplicativos interessantes, simplesmente pela adiçãode códigos a classe derivada da CView, que é criada pelo gerador de código AppWizard. Como é de costume em um programa em C++ o código da classe view está divididoem dois arquivos, um arquivo de cabeçalho (H), e um arquivo de implementação (CPP).2 SDI x MDI Dois tipos de aplicativos distintos são suportados pela MFC: Single Document Interface(SDI) e Multiple Document Interface (MDI). Um aplicativo SDI, do ponto de vista do usuárioé apenas uma janela. Se este aplicativo depende de um arquivo em disco “document”,apenas um será suportado por este tipo de aplicativo. Exemplo NotePad. Um aplicativo MDI,suporta múltiplas janelas filhas, cada uma associada a um documento correspondente.Exemplo Word. Quando o AppWizard é executado, o tipo MDI é o padrão sugerido. Certifique-se demudar essa opção para criar os primeiros exemplos. O tipo MDI será abordado mais tarde.3 Exemplo Curso1a Nesta seção será abordado um exemplo completo de esqueleto de programa, bemcomo os passos necessários para sua criação utilizando o AppWizard. Este exemplo éapenas uma janela vazia com um menu e uma barra de ferramentas acoplada. Quando você criar o primeiro programa executável MFC , você usará o MFCAppWizard (versão de EXE) que o conduzirá por uma série de caixas de diálogo nas quaisvocê escolhe opções para a arquitetura, características, e funções de seu projeto.Prof. André Bernardi Capítulo 2
  • 32. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 32 A série é um caminho ramificado: você pode avançar pelos passos e pode fazermudanças às opções que você selecionou. Ajuda está disponível para toda opção no MFCAppWizard: click o botão direito do mouse no controle para mais informação sobre cadaopção.Passos para criar um programa MFC EXE usando a ferramenta AppWizard: 1. No menu File, click New e então clique na pasta de Projects. 2. Especifique o Nome de Projeto, Localização, Workspace, Dependência, e opções de Plataformas e então click duas vezes no ícone MFC AppWizard (exe). 3. Complete os passos do MFC AppWizard escolhendo as opções apropriadas para seu programa. 4. Prepare seu programa MFC para uso. (Criar o executável) Figura 4 – Diálogo de Tipos de novos projetos.3.1 O MFC AppWizard (versão de EXE): Passos O MFC AppWizard é uma série de caminho ramificado (Assistente) de 4 ou 6 passosque dependem da arquitetura que você selecione para seu programa. Você pode avançarpelos passos e pode fazer mudanças às opções que você selecionou. Ajuda está disponível para toda opção em cada passo: A seguir encontra-se umaexplicação passo a passo do MFC AppWizard.Passo 1 1- Escolha uma das três arquiteturas para seu programa: Single Document (SDI), Multiple Document (MDI), ou Dialog-Based. 2- Selecione um idioma para o texto de recurso e então click Next. 3- Se você selecionou uma arquitetura Dialog-Based, o Passo 2 se encontra na próxima seção.Prof. André Bernardi Capítulo 2
  • 33. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 33 Figura 5 – Passo 1 do MFC AppWizard. NOTA: Para o exemplo Curso1 selecione a opção SDI.Passo 2 ( para programas SDI ou MDI ) 1- Escolha uma das quatro opções de apoio de banco de dados para seu programa: None, Header file support, Database View (with file support) ou Database View (without file support). 2- Se você selecionou Database View support, click Data Source e escolha qualquer uma base de dados externa via ODBC ou um banco de dados DAO com o arquivo apropriado e uma tabela a ser utilizada. 3- Click Next. Figura 6 – Passo 2 do MFC AppWizard para SDI ou MDI.Prof. André Bernardi Capítulo 2
  • 34. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 34 NOTA: Para o exemplo Curso1, não selecione nenhum suporte a banco de dados, simplesmente aceite o padrão.Passo 3 ( para programas SDI ou MDI ) 1- Escolha a combinação de apoio de documento que você gostaria de incluir em seu programa e então click Next. Selecionando estas opções habilita-se os recursos de ActiveX e adiciona Automatização extra comanda ao menu da aplicação. 2- Click Next. Figura 7 – Passo 3 do MFC AppWizard para SDI ou MDI. NOTA: Para o exemplo Curso1, não selecione nenhum apoio a documento, simplesmente aceite o padrão.Passo 4 ( para programas SDI ou MDI ) 1- Escolha qual interface básica dos usuários caracteriza o que você quer para seu programa e o que WOSA apoiam para incluir. Veja Windows Sockets em MFC e MAPI Support em MFC para mais informações. 2- Se você quer modificar os nomes de arquivos e extensões que seu programa usará ou quer ajustar a estrutura da janela de interface com usuário para seu programa, click Advanced. 3- Click Next.Prof. André Bernardi Capítulo 2
  • 35. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 35 Figura 8 – Passo 4 do MFC AppWizard para SDI ou MDI. NOTA: Para o exemplo Curso1, simplesmente aceite o padrão.Passo 5 ( para programas SDI ou MDI ) 1- Escolha se você gostaria ou não que o AppWizard gere comentários no arquivo de fonte que o guiará para escrever seu programa. 2- Escolha se você gostaria de usar a biblioteca da MFC como uma DLL compartilhada ou linkada estaticamente. Figura 9 – Passo 5 do MFC AppWizard para SDI ou MDI.Esta característica só é possível nas versões Professional e Enterprise Edition.Prof. André Bernardi Capítulo 2
  • 36. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 36Passo 6 ( para programas SDI ou MDI ) 1- Se você quer mudar o nome de classe padrão, classe base, header ou nomes de arquivo de implementação providos pelo AppWizard, entre nos nomes novos. Para mudar a classe Base, selecione o classe View de seu programa. 2- Click Finish. Figura 10 – Passo 6 do MFC AppWizard para SDI ou MDI.Passo 7O AppWizard exibe uma tela com as informações sobre o programa que está acabando deser criado. Figura 11 – Tela de informações sobre novo projeto do MFC AppWizard.Prof. André Bernardi Capítulo 2
  • 37. Curso de Extensão Universitária – Visual C++, Microsoft Foundation Classes – Fundamentos 37Quando o botão Ok do diálogo da figura acima for pressionado, o AppWizard começa a criaro código fonte de seu novo projeto. Quando o AppWizard finalizar, visualize o sub-diretóriocriado para o projeto. Os seguintes arquivos são de interesse por enquanto: Arquivo Descrição Curso1.dsp Arquivo de projeto que permite ao Developer Studio construir seu aplicativo Curso1.dsw Arquivo de WorkSpace que contém um entrada para o projeto. Curso1.rc Arquivo script ASCII de recursos Curso1View.cpp Arquivo de implementação da classe View, que contém as funções membro da classe CCurso1View. Curso1View.h Arquivo de definição da classe View, que contém a descrição da classe CCurso1View Curso1.opt Arquivo binário que informa ao Developer Studio que arquivos foram abertos para o projeto e como suas janelas estão arranjadas. ReadMe.txt Arquivo texto que explica o propósito dos arquivos gerados. Resource.h Arquivo de cabeçalho que contém as constantes #define dos identificadores usados pelos recursos. A Figura 12 mostra a janela FileView do Workspace. Utilize esta janela para localizaros arquivos que compõe o projeto atual. Figura 12 –Janela FileView do Workspace3.2 Gerando o aplicativo do código gerado O AppWizard gera não apenas os códigos fontes para um esqueleto de programaWindows, como também cria os arquivos de projeto e workspace para o aplicativo. Dentrodo arquivo de projeto encontra-se todas as interdependência dos arquivos bem como asopções de compilação e link. Devido ao novo projeto tornar-se o atual para o DeveloperProf. André Bernardi Capítulo 2

Related Documents