Compartilhar via


Introdução

 

Introdução

Refatoração Brent
Wise Owl Consulting

Outubro de 2003

Sumário

Sobre o que este livro se trata
    Modelo de aplicativo "Longhorn"
    Computação e segurança confiáveis
    Armazenamento avançado e acesso a dados
    Comunicação e colaboração
    Apresentação avançada e mídia
O que você encontrará neste livro

Como desenvolvedor de software de muitos, muitos anos, escrevi programas para várias plataformas e sistemas operacionais, todos com suas vantagens e desvantagens. Em geral, a maioria das plataformas e sistemas operacionais eram semelhantes aos seus antecessores com melhorias incrementais.

Até o momento, o próprio Microsoft® Windows® evoluiu dessa maneira. Inicialmente, escrever um aplicativo do Windows significava programação para a API do Microsoft Win32®. (Na verdade, era a API do Win16 ao mesmo tempo, mas elas são conceitualmente as mesmas.) A Microsoft projetou a API do Win32 como uma API de procedimento simples que pode ser chamada por programas C. Ao mesmo tempo, o livro do Charles Petzold Programming Windows, que introduziu essa API, era necessário ler para qualquer desenvolvedor de aplicativos do Windows.

O bom da API do Win32 é que ela permite que você faça praticamente tudo o que quiser. (A coisa menos agradável é que você praticamente deve fazer tudo o que quiser.) Você recebe a primeira rachadura em todas as mensagens do Windows e pode responder aos eventos que eles sinalizam de qualquer maneira apropriada (ou inadequada). Você pode modificar a memória — a memória do seu próprio processo ou até mesmo a memória de outro processo — como desejar, permitindo a segurança. Você pode desenhar uma janela da maneira que quiser. Seu trabalho é simplesmente obter os bits corretos para a tela nos locais corretos nos horários adequados.

O design do Windows em si é, na verdade, bastante orientado a objetos. Você manipula objetos de janela, usa canetas gráficas e assim por diante. No entanto, você executa essas operações chamando as APIs corretas (dos milhares disponíveis) na ordem adequada e passando os tipos de dados adequados, principalmente sem ajuda do compilador quando você erra.

Quando a Microsoft lançou o Windows pela primeira vez e por alguns anos depois, os desenvolvedores de software normalmente escreviam aplicativos monolíticos e isolados. Os desenvolvedores não tinham componentes para compor aplicativos e nenhum mecanismo com suporte para composição; além disso, os aplicativos não tentaram se comunicar com outros aplicativos no mesmo sistema, muito menos com um aplicativo em um computador diferente.

Em 1993, a Microsoft introduziu o COM (Component Object Model). A Microsoft projetou COM como uma tentativa de resolver os dois problemas a seguir. O COM introduziu um padrão binário para que os componentes, produzidos por diferentes compiladores de linguagem de origem, pudessem interoperar usando definições de interface imutáveis. O protocolo de rede DCOM (Distributed COM) permitiu que esses componentes interajam entre os limites do processo e do computador.

Muitas das APIs do Windows que a Microsoft introduziu após 1993 são APIs baseadas em COM. Dois exemplos são as APIs de extensões do Microsoft DirectX® e shell. Hoje, o Windows tem mais de 10.000 APIs projetadas por muitos desenvolvedores diferentes em muitas equipes diferentes com objetivos diferentes. Como resultado, o Windows expõe algumas das APIs como pontos de entrada de linguagem C simples em uma DLL (biblioteca de vínculo dinâmico). Ele expõe outras APIs como um conjunto de interfaces COM complexas e interagindo. Há outras APIs que você acessa usando outras tecnologias.

Na prática, você, o desenvolvedor, deseja que um sistema operacional proteja você da maior parte dessa complexidade na maioria das vezes. Portanto, muitas equipes diferentes, dentro e fora da Microsoft, desenvolveram várias bibliotecas de estrutura para simplificar o desenvolvimento de aplicativos. Algumas bibliotecas de estrutura populares são o MFC (Microsoft Foundation Classes), a ATL (Biblioteca de Modelos do Microsoft ActiveX), a biblioteca no Microsoft Visual Basic®, a OWL (Biblioteca do Windows de Objetos) do Borland e, sem dúvida, muitas outras.

O MFC, por exemplo, tenta encapsular as várias idiossincrasias da API win32 com um conjunto consistente e orientado a objetos de classes C++. Quando a linguagem de programação de sua escolha é C++ e as bibliotecas MFC dão suporte direto ao que você deseja fazer, seu trabalho é fácil. No entanto, quando você quer algo um pouco fora do mainstream, você está principalmente por conta própria novamente e, de fato, em pior forma do que antes, porque agora você tem que descobrir como usar as APIs win32, além de fazer seu trabalho interoperar com as classes MFC existentes.

A ATL permite que você escreva objetos COM extremamente eficientes e, em menor grau, aplicativos do Windows usando classes obscuras e (para muitos desenvolvedores) baseadas em modelo C++ mal compreendidas. Não é muito difícil dizer que você poderia facilmente acabar com objetos altamente eficientes que ninguém poderia entender.

A equipe do Visual Basic da Microsoft adotou uma abordagem diferente. Eles encapsularam o acesso à API do Win32 em uma linguagem e biblioteca fáceis de aprender e usar, mas às custas da remoção da funcionalidade e das opções. O Visual Basic torna extremamente simples produzir componentes para aplicativos e aplicativos que usam esses componentes. No entanto, o Visual Basic não permite que você conclua o acesso a tudo o que a API do Win32 oferece. Às vezes, o desenvolvedor do Visual Basic simplesmente não pode realizar uma tarefa devido a restrições impostas pelo ambiente de desenvolvimento escolhido.

No início da década de 1990, a World Wide Web decolou. Os computadores começaram a se conectar cada vez mais. Inicialmente, um navegador da Web simplesmente renderizava HTML estático e navegar na Web era muito parecido com olhar para uma página de revista.

Quando a Microsoft lançou o Internet Explorer 4 em 1997, outras possibilidades surgiram. Os desenvolvedores podem criar arquivos HTML que contêm script mais marcação. Objetos no modelo de objeto HTML ganharam comportamentos e você pode escrever scripts que responderam a eventos e forneceram comportamento personalizado. As páginas HTML agora podem reagir a eventos de usuário no cliente e responder muito mais rapidamente do que os aplicativos baseados na Web anteriores que exigiam uma viagem de ida e volta para o servidor para cada atualização de tela.

Uma grande vantagem dos aplicativos Web era que você poderia implantar facilmente o aplicativo simplesmente copiando um conjunto de arquivos para um servidor. Na próxima vez que um cliente navegou até o aplicativo, ela interagiu com a versão mais recente.

Outra grande vantagem dos aplicativos Web foi o suporte interno para integração de mídia avançada. O layout de página baseado em fluxo e o suporte para várias fontes, elementos gráficos e conteúdo multimídia é muito mais fácil de fornecer por meio de um aplicativo Web do que é atualmente por meio de um aplicativo Win32, independentemente da estrutura que você usa.

No geral, no entanto, ainda é difícil escrever aplicativos Web hoje em dia porque o suporte à linguagem de programação e à biblioteca para esses aplicativos é limitado. A depuração de aplicativos Web geralmente é um pesadelo. Em muitos aspectos, a experiência do usuário cliente ainda não é tão rica quanto a fornecida por aplicativos cliente com base na API win32 devido ao conjunto limitado de controles disponíveis para aplicativos Web.

No final da década de 1990, um desenvolvedor do Windows muitas vezes tinha que se especializar. Você era um programador de API do Win32 e poderia escrever qualquer tipo de aplicativo cliente lentamente. Como alternativa, você era um desenvolvedor do Visual Basic e poderia escrever aplicativos de interface do usuário baseados em formulário e relativamente avançados rapidamente, mas não conseguia escrever determinados outros tipos de aplicativos. Um desenvolvedor do MFC percorreu um pouco esses dois extremos, embora, na prática, você precisa ser um desenvolvedor de C++ proficiente que estava familiarizado com a API Win32 para ser um bom desenvolvedor de MFC. Os desenvolvedores de objetos COM e ATL eram frequentemente os encanadores de um sistema e forneceram componentes para esses outros desenvolvedores reutilizarem.

Em 2000, a Microsoft introduziu o .NET. A definição do que exatamente é .NET é diferente dependendo de quem você perguntar. Na minha opinião, o .NET é uma plataforma moderna de desenvolvimento de software para produção, mais rapidamente do que se poderia anteriormente, corrigir e proteger aplicativos do Windows que usam as tecnologias mais recentes, como XML e serviços Web, ao mesmo tempo em que permitem o acesso ao seu código de herança.

O .NET em geral e o código gerenciado, em particular, fornecem uma série de benefícios para o desenvolvedor de software:

  • Um modelo de objeto orientado a objeto, independente de linguagem e fortemente tipado.
  • Redução de conflitos entre diferentes versões de componentes.
  • Número reduzido de bugs e falhas de segurança devido a erros comuns de programação. Por exemplo, não há mais estouros de buffer e não há mais erros de gerenciamento de memória.
  • Uma única estrutura e um conjunto de bibliotecas que todos os desenvolvedores podem usar. As bibliotecas de classes .NET Framework encapsulam as APIs win32 mais comumente usadas, além de várias APIs adicionais fornecidas por muitos SDKs em um pacote unificado.
  • Abstrações mais altas do que estavam disponíveis anteriormente.

De certa forma, o .NET é simplesmente uma nova estrutura independente de linguagem orientada a objeto que encapsula muitos aspectos das APIs do Win32. Pessoalmente, prefiro pensar no .NET como um substituto de última geração para as APIs do Win32 — incompleto ainda, mas se tornando mais completo ao longo do tempo.

Por exemplo, o .NET versão 1.0 fornece classes de desenvolvimento de aplicativos cliente orientadas a objeto e baseadas em formulário. Você pode pensar nisso como simplesmente wrappers sobre as APIs básicas de janela do Win32. No entanto, o .NET também fornece classes ASP.NET que encapsulam o desenvolvimento de aplicativos Web e HTML mais a geração de comportamento. Essas classes, na verdade, estendem a API do Windows e não são realmente um wrapper para nada nas APIs do Win32. . O suporte avançado do NET para serviços Web e XML em geral são mais dois exemplos de novas funcionalidades fornecidas com .NET em vez de wrappers simples em torno da funcionalidade existente do Win32.

Sobre o que este livro se trata

Este livro se concentra nos recursos do Microsoft "Longhorn" para o desenvolvedor. Do ponto de vista de um desenvolvedor, "Longhorn" fornece novas funcionalidades que podemos categorizar amplamente em cinco áreas:

Modelo de aplicativo "Longhorn"

"Longhorn" define aplicativos de maneiras novas e mais poderosas.

  • AS APIs "Longhorn" são classes gerenciadas que lidam com grande parte da manutenção da programação e reduzem a carga de trabalho do desenvolvedor. Todos os compiladores e ferramentas de desenvolvedor de terceiros que dão suporte ao CLR (Common Language Runtime) do .NET dão suporte automaticamente às novas APIs "Longhorn".
  • O modelo de aplicativo "Longhorn" dá suporte a aplicativos de navegação tradicionais baseados em formulário e novos baseados em página. O suporte à navegação baseado em página do aplicativo é fornecido pelo sistema operacional.
  • Um novo modelo de segurança e privacidade "Longhorn", que é o resultado de uma combinação de APIs gerenciadas e identidade digital, fornece segurança do aplicativo desde o início do processo de desenvolvimento. Aplicativos e componentes "Longhorn" são confiáveis devido ao uso de código gerenciado.
  • As APIs "Longhorn" representam os melhores conceitos de desenvolvimento de uma variedade de tecnologias contemporâneas. Em muitos aspectos, o desenvolvedor não está mais restrito por decisões de design tomadas há mais de uma década.
  • Gerenciamento automático de estado do aplicativo e retenção para facilitar o desenvolvimento de aplicativos.
  • A tecnologia de implantação clickOnce dá suporte a recursos de implantação sofisticados, como instalação em Arquivos de Programas, controle de versão, instalação lado a lado e Download do Drizzle.
  • As interfaces do usuário indutivas levam os usuários por meio de uma tarefa.
  • Os recursos de acessibilidade e automação são integrados à plataforma. Seus aplicativos ganham esse suporte automaticamente.

Computação e segurança confiáveis

"Longhorn" baseia a segurança de um aplicativo no modelo cas (segurança de acesso ao código) do Common Language Runtime, mas com extensões significativas.

  • "Longhorn" reconhece que alguns aplicativos são totalmente confiáveis e outros têm apenas confiança parcial. Os aplicativos que participam totalmente do modelo de segurança "Longhorn" terão acesso total aos recursos do "Longhorn". Os aplicativos que participam parcialmente do modelo terão alguns benefícios, embora com restrições.
  • "Longhorn" fornece um ambiente de runtime ultrassegure, código gerenciado, chamado SEE (Ambiente de Execução Segura), que protege o usuário contra comportamentos de aplicativo "inválidos".
  • O Gerenciador de Confiança fornece um sistema de pontuação para aplicativos "Longhorn" que determina um nível sugerido de confiança que os usuários podem conceder ao aplicativo.
  • O "Longhorn" fornece uma Central de Confiabilidade de segurança que permite que um usuário gerencie hot fixes e acesse atualizações do Windows. Além disso, um Assistente de Segurança informa ao usuário sobre riscos e violações de segurança.
  • O Digital Rights Management faz parte do código gerenciado, oferecendo forte proteção para propriedade intelectual. Isso permite o armazenamento seguro e a transmissão de propriedade intelectual anteriormente vulnerável no ambiente "Longhorn".
  • "Longhorn" identifica exclusivamente usuários e computadores usando assinaturas digitais. Quando combinado com uma autoridade de assinatura para verificação, o "Longhorn" pode identificar com segurança e confiabilidade usuários individuais em cenários de computação.

Armazenamento avançado e acesso a dados

"Longhorn" fornece armazenamento e acesso de dados de aplicativo significativamente aprimorados por meio de um novo sistema de arquivos.

  • O novo ADO.NET fornece acesso a dados aprimorado.
  • Esquemas comuns para informações diárias, como contatos, organizações, endereços e muito mais, permitem o acesso de informações compartilhadas por aplicativos, o sistema operacional e o shell. Na verdade, a nova interface do usuário do shell é um dos usuários mais pesados do novo sistema de armazenamento.
  • Um aplicativo pode anexar metadados adicionais a objetos no sistema de arquivos, o que permite uma pesquisa e recuperação mais rápidas de objetos de arquivo do que é possível com um sistema de arquivos tradicional.
  • As alterações em objetos no ambiente "Longhorn" são propagadas automaticamente para outras instâncias desses objetos usando a associação dinâmica de dados.

Comunicação e colaboração

Os aplicativos "Longhorn" agora têm uma rica variedade de recursos de comunicação e colaboração.

  • Recursos como sessões e canais fornecem serviços de colaboração avançados aos participantes.
  • Os recursos de comunicação e colaboração podem operar com segurança por meio de firewalls e NAT (Conversão de Endereços de Rede), permitindo a passagem de limites corporativos.
  • A comunicação padronizada com base em serviços Web permite que aplicativos herdados e novos participem da colaboração.
  • Os recursos de comunicação baseados em servidor/par podem operar em infraestrutura centralizada ou diretamente para clientes de usuário.
  • O suporte à presença virtual permite que os usuários colaborem com outras pessoas por meio de recursos semelhantes a mensagens instantâneas (notificação comum, convite e assim por diante).
  • A segurança integrada é parte integrante desses recursos.
  • O suporte à Extensibilidade do Shell, como verbos ** colaborativos (uso de um cliente de chat padrão e assim por diante), pode ser identificado para usar ferramentas familiares na comunicação em tempo real "Longhorn".
  • Controles comuns, como o novo controle seletor de Pessoas, fornecem suporte a aplicativos de alto nível para aplicativos de comunicação.

Apresentação avançada e mídia

Os desenvolvedores podem produzir aplicativos com mais facilidade fornecendo interfaces de usuário avançadas usando a apresentação e os serviços de mídia disponíveis no "Longhorn".

  • "Longhorn" fornece ao desenvolvedor classes gráficas avançadas que fornecem animação, efeitos e imagens visualmente interessantes que exploram a aceleração de hardware.
  • Elementos gráficos vetoriais declarativos e dinâmicos avançados permitem apresentação flexível e dimensionamento para dispositivos de saída de alta resolução, salvando recursos porque os gráficos são gerados de uma linguagem descritiva.
  • Animações facilmente aplicadas melhoram a usabilidade e a continuidade da interface do usuário.
  • O suporte a gráficos usa placas de vídeo DirectX/3D aceleradas por hardware para criar um ambiente mais imersivo e fluido.
  • Seu aplicativo pode integrar perfeitamente todas as formas de interface do usuário: imagens, vídeo, áudio, elementos gráficos vetoriais, controles, texto e assim por diante.
  • Um novo modelo de layout permite a exibição de rich text e mídia devido a uma estrutura que ajusta automaticamente a paginação, a posição e assim por diante ao tamanho da tela.
  • Novos serviços de texto, como a inclusão de renderização de subpixel (ClearType), permitem uma GUI visualmente envolvente em qualquer computador com um acelerador 3D independente de possíveis resoluções de tela.
  • Você pode mesclar diferentes partes de dados em contêineres, que podem ser movidos pela interface do usuário.
  • Transformações condicionais de dados com base no tipo, no valor ou em outras regras proporcionam às ferramentas do desenvolvedor para criar uma interface do usuário mais fácil.
  • Uma ampla plataforma multimídia permite uma reprodução sem falhas de áudio e vídeo; experiências A/V distribuídas entre computadores e dispositivos eletrônicos de consumo; codecs de áudio e vídeo de alta qualidade; alto desempenho para captura e edição de conteúdo em tempo real e de alta definição; serviços avançados de metadados de CD, DVD e televisão.

O que você encontrará neste livro

Cada um desses tópicos pode preencher facilmente um livro por conta própria. Portanto, não vou descrever todas as várias APIs em "Longhorn". Também não vou me aprofundar em uma descrição detalhada de cada tecnologia. Isso não é uma API ou um livro de referência. Tenho certeza de que não vai demorar muito até que você possa encontrar muitas cópias ligeiramente editadas e regurgitadas da documentação disponível nas livrarias.

O que vou fazer é mostrar como começar a desenvolver para "Longhorn". No mínimo, você deve ler os Capítulos 1 e 2 porque eles abrangem os conceitos básicos absolutos que você precisa saber para desenvolver aplicativos para a plataforma "Longhorn".

No Capítulo 1, discuto o novo modelo de aplicativo. Não passe Go. Não colete $200. Você realmente precisa ler o Capítulo 1 ou você vai ter um go to jail cartão no correio. Também apresento uma nova linguagem de marcação/programação no Capítulo 1. Seja você um desenvolvedor VB.NET, um desenvolvedor de C# ou um dos desenvolvedores míticos COBOL.NET, você precisará aprender essa nova linguagem de marcação/programação. Leia o Capítulo 1: o modelo de aplicativo "Longhorn". Não estou brincando. Na verdade, vá fazer isso agora e volte. Eu vou esperar.

Ok, agora que você leu o Capítulo 1 e está animado para criar seus próprios aplicativos, provavelmente deve ler o Capítulo 2. Nele, mostro como compilar, implantar e executar um aplicativo "Longhorn". Então o Capítulo 2 também é importante, mas não há necessidade de correr para ele. É um capítulo muito paciente e esperará que você termine esta introdução.

Os capítulos restantes apresentam as várias tecnologias a que aludi nesta introdução. O capítulo 3 é uma introdução fantástica à criação de interfaces do usuário usando a nova linguagem de marcação e oferece uma variante de seu poder. O capítulo 4 apresenta as novas APIs do sistema de arquivos e provavelmente fará com que você abandone as APIs do sistema de arquivos Win32.

No Capítulo 5, mostro como usar a associação de dados para mover dados de praticamente qualquer objeto .NET para sua interface do usuário e voltar novamente sem escrever nenhum código de procedimento. Mostro como criar aplicativos de comunicação avançados, seguros e confiáveis no Capítulo 6. Por fim, o último capítulo discute algumas diretrizes para a criação de aplicativos móveis modernos e conectados.

Obrigado por sair até o fim desta longa introdução. Agora é hora de você ler o Capítulo 2. (Você foi ler o Capítulo 1 anteriormente, não foi?) Divirta-se com "Longhorn". Eu certamente tenho!

Prossiga para o Capítulo 1: o modelo de aplicativo "Longhorn"

Refatoração Brent

Brent Rector é presidente e fundador da Wise Owl Consulting (www.wiseowl.com), e tem mais de três décadas de experiência em desenvolvimento de software. O Brent projetou e implementou sistemas operacionais, bem como novas linguagens de programação de computador e seus compiladores. O Brent começou a desenvolver aplicativos do Windows usando o Windows 1x beta em 1985 e está envolvido no desenvolvimento do Windows desde então. Ele é o autor e coautor de vários livros de programação do Windows, incluindo AtL Internals e Win32 Programming. O Brent também é o autor de Demeanor para .NET, o principal ofuscador de código para aplicativos .NET.

© Microsoft Corporation 2003. Todos os direitos reservados.

IntelliSense, Microsoft, MSDN, MS-DOS, Visual Basic .NET e Visual Studio .NET são marcas registradas ou marcas comerciais da Microsoft Corporation no Estados Unidos e/ou em outros países. Outros nomes de produtos e empresas mencionados aqui podem ser marcas comerciais de seus respectivos proprietários.