sexta-feira, setembro 23, 2005

Como aprender a programar com wxWidgets

A seguir está uma resposta de Edward Ream para uma questão comum, "Qual é o melhor modo de aprender wxWidgets [e C++]?"

Data: domingo, 04 de junho de 2000 14:37:06 -0500
De: "Edward K. Ream"
Para: wx-users@wxwidgets.org
Assunto: Re: [wx-users] Como aprender a usar wx-windows
Reply-To: wx-users@wxwidgets.org

> Lendo o artigo sobre wxpython no Linux Journal e, tendo usado wxclips
> eu me interessei pelo wxwindows como uma interface de desenvolvimento. Entretanto, a
> experiência de programação que eu obtive é ultrapassada, and from a former generation (For-> tran). Eu gostaria de refrescar minha experiência e começar com C++.
> Será que o wx-windows é um passo muito grande para eu dar?

Eu também sou novato com wxWidgets, mas eu gostaria de responder a esta questão do mesmo modo. Nos últimos dois anos eu aprendi dois frameworks similares similares (Caixa Amarela da Apple, ou seja, NextStep/OpenStep e C++ Builder/Delphi da Borland) e neste último ano eu me tornei um entusiasta do C++ após 20 anos usando o C.

Sobre o C++.
O maior Ah pra mim foi que a complexidade do C++ na prática não importa. O que _realmente_ importa é que o C++ permite que você faça coisas simples de modo simples, mais simples que o C. Com um sistema como o wxWidgets você estará criando objetos e então utilizando os objetos e seus métodos.

Assim, não tenha medo do C++: você estará usando apenas a ponta do iceberg.
Besides the C++ A linguagem de programação, de Bjarne Stroustrup, o guia "oficial" do C++, Eu recomendo fortemente Inside the C++ Object Model, de Stanley B. Lippman. (Lipmann foi um dos C++ honchos na Bell Labs.) Este livro irá ensiná-lo o que _não_ fazer, bem como porque tudo no C++ é do jeito que é. Se você está confuso sobre qualquer coisa no C++, o livro do Lippman é a solução.

Sobre os frameworks de aplicações.
Frameworks de Aplicativos, tais como o wxWidgets, são organizados ao redor de um conjunto de classes cooperativas. Veja classe principal do Aplicativo, wxApp, algumas classes de frames e painel, classes gráficas, classes de menus, classes de controle, etc. Em geral, fazer qualquer coisa em um framwork envolve criar um objeto de um tipo específico, então fazer algo com o objeto.

Por exemplo, suponha que você quer criar uma barra de menu. Uma barra de menu é composta de um objeto barra de menu simples do tipo (classe) wxMenuBar que contém objetos menu do tipo wxMenu. Cada menu contém objetos itens de menu do tipo wxMenuitem.

Assim, você cria o objeto barra de menu, então cria todos os objetos menu (criando os objetos itens do menu deste modo) e finalmente "conecta" os objetos do menu à barra de menu usando uma chamada ao método wxMenuBar::Append.

Como uma visão geral eu olharia na seção "Alphabetical class reference" do manual de referência. Eu acho a versão HTML a mais fácil de usar: você pode navegar muito rapidamente através dela. este é o modo como você deve ler esta (imensa) referência:


  1. Obtenha uma visão geral de todos os tipos de classe envolvidos. Os nomes das classes irão de dizer muito sobre o que cada uma faz. Abra algumas das classes, em particular a wxApp (o objeto principal do aplicativo), wxFrame, wxControl (a classe base para todos os controles) e um ou dosi controles, como o wxButton.

  2. Quando estiver escrutinando a classe pela primeira de muitas vezes, leia as notas e rapidamente varra a lista de métodos da classe para obter uma idéia geral sobre quais tipos de operação podem ser feitos com os objetos daquela classe. Você não está procurando por detalhes neste estágio, apenas por um panorama. Em particular, quais classes existem e como que elas trabalham em conjunto.
  3. Preste atenção nas classes das quais uma classe é derivada. Por exemplo, um botão (um objeto do tipo wxButton) é derivado das classes wxControl, wxWindow, wxEvtHandler e wxObject.
    O que isto significa? isto significa que um botão _é_ um controle, e um botão _é_ uma janela (window), e um botão _é_ um tratador de eventos (event handler) e um botão _é_ um objeto.
    Assim, você deve entender as classes pai de um objeto para entendê-lo. por exemplo, se b é um botão voc pode invocar b.m para qualquer método m das classes wxControl, wxWindow, wxEvtHandler ou wxObject Você não está limitado apenas aos métodos de wxButton! Esta é uma das chaves da programação orientada à objetos.


Mais algumas dicas:
Leia alguns códigos de exemplo. Você verá que quase nada da linguagem C++ está realmente sendo utilizada; Há apenas a criação sem fim de objetos e então a chamada dos métodos daqueles objetos.

Aprenda o máximo que você puder da classe String; após utilizar uma boa classe String, você nunca mais vai querer usar as funções de string do C. wxWidgets possui outras classes utilitárias muito interessantes.

A classe de aplicação, wxApp, contém o laço de eventos principal. Aprenda sobre a manipulação de eventos e a tabela de eventos (ler alguns códigos de exemplo irá ajudar). Quase tudo neste tipo de framework de aplicação acontece como resultado de um evento e o seu programa essencialmente não faz nada além de responder aos eventos. Ter um laço de eventos escritos para você é o maior benefício.

Eu espero que isto ajude. Talvez nós possamos trabalhar juntos no aprendizado do wxWidgets. Por favor, sinta-se à vontade para me perguntar qualquer questão que você possa ter.

Se eu tiver feito qualquer ?? neste post eu espero que os especialistas em wxWidgets gentilmente me corrijam.

Edward
--------------------------------------------------------------------
Edward K. Ream email: edream@tds.net
Leo: Literate Editor with Outlines
Leo: http://personalpages.tds.net/~edream/front.html
--------------------------------------------------------------------

Quer saber mais? Leia o livro do Julian Smart, principal desenvolvedor do wxWidgets.

Nota
Este artigo foi traduzido. A versão original encontra-se aqui: http://www.wxwidgets.org/technote/tn0008.htm

Nenhum comentário: