440 likes | 607 Views
Plataforma de Desenvolvimento de Software. Camille Furtado. Fabio Heuseler. Rafael Lychowski. O que wxWindows?. Conjunto de bibliotecas que permite que aplicações C++ sejam compiladas e rodem em diferentes tipos de computadores, com mínima mudança no código fonte.
E N D
Plataforma de Desenvolvimento de Software Camille Furtado Fabio Heuseler Rafael Lychowski
O que wxWindows? • Conjunto de bibliotecas que permite que aplicações C++ sejam compiladas e rodem em diferentes tipos de computadores, com mínima mudança no código fonte. • É uma API fácil e de simples uso, basta “linkar” com a biblioteca apropriada da plataforma desejada e a aplicação adotará a aparência da plataforma. • Oferece help on line, programação para rede, multithreading, suporte a banco de dados, e muito mais
O que é wxWindows? (2) • Visto que provê uma série de funcionalidades built-in, as quais poderão ou não ser usadas pela aplicação, wxWindows é um framework. • Dentre algumas de suas vantagens podemos citar: • Free (gratuito para download) • Open source (código aberto) • Simplicidade de programação • Suporte a uma grande faixa de compiladores C++
Fabricante – Informaçãoes gerais • Criado por Julian Smart (líder do projeto) a partir de 1992 no Artificial Intelligence Applications Institute, University of Edinburgh e posteriormente liberado pela instituição para livre desenvolvimento e distribuição • Julian declara no site de sua empresa de consultoria AnthemionSoftware, que esta é a fabricante e proprietária do framework, já que o produto é “free” e “open source”
Fabricante – Informaçãoes gerais (2) • Julian estava elaborando uma ferramenta meta-CASE chamada Hardy que precisava rodar em Windows e em workstations X-based Unix. • As ferramentas existentes compatíveis com várias plataformas eram muito caras para um projeto experimental “caseiro”, então a única alternativa era construir uma. • O grupo responsável pelo projeto (núcleo e acessórios “open source”) trabalha em uma relação de cooperação semelhante a que existe no desenvolvimento da maioria das outras aplicações de código aberto
Fabricante – Desenvolvedores • O grupo que desenvolve o núcleo do framework (i.e., as versões para cada plataforma) é formado por 19 pessoas: • Os principais membros do grupo são: • Julian Smart (o criador): entre várias outras coisas, contribuiu com o mxWSW • Stefan Csomor: wxMac • Vadim Zeitlin: wxUniversal e várias outras contribuições • Robert Roebling: wxGTK • Robin Paul Dunn: wxPython
Fabricantes – Desenvolvedores (2) • Ao longo da história do projeto, várias dezenas de pessoas contribuíram para aumentar a portabilidade do framework, tornando-o mais eficiente nas várias plataformas e criando novas bibliotecas, componentes e ferramentas auxiliares para o uso do framework.
Fabricante – Retorno Financeiro • O retorno financeiro é dado através de: • Venda do wxWindows em CD-ROM, com material adicional (bibliotecas, manuais, etc) • Venda de softwares desenvolvidos para uso com o wxWindows (e.g., DialogBlocks) • Venda de serviços de consultoria e suporte para o uso do wxWindows • Divulgação do nome dos desenvolvedores e suas empresas.
Fabricante –Suporte Técnico • Os principais desenvolvedores do wxWindows possuem consultorias independentes que prestam (vendem) serviços de suporte aos usuários do framework • Uma alternativa ao suporte pago é a lista de discussão oficial do projeto, utilizada pela maioria da comunidade de usuários e pelos próprios desenvolvedores do projeto para identificarem erros no framework e corrigi-los.
Diagrama do framework • Cada elemento da interface GUI (janela, botão, ...) do framework do wxWindow é um “wrapper” em torno do elemento GUI do próprio sistema.
Diagrama do wxUniversal • Uma biblioteca para criação de janelas independente do Sistema Operacional • Com a criação das janelas independente do SO, o wxUniversal permite utilizar qualquer “look and feel” em qualquer plataforma
Linguagens de mais alto nível • O wxWindows está sendo importado para ser usado com algumas linguagens de mais alto nível
Qualidades do framework • A importância do uso de uma biblioteca de classes independente de plataforma não pode ser subestimada, uma vez que o desenvolvimento GUI consome muito tempo, além do risco de tornar seu código não reutilizável ou obsoleto se estiver direcionado a uma plataforma de pouco uso ou que se torne obsotela
Características de plataforma • Disponível para as plataformas mais populares (Windows, Unix, Solaris...) • Trabalha com a maioria dos compiladores C++ e Phyton • Mais de 1000 páginas de documentação (inclusive on-line) • API orientada a objeto de fácil uso • Sistema de eventos flexível • Chamadas gráficas (linhas, retângulos, polylines, ...) • Construção de layouts
Características de plataforma (2) • Lista avançada de classes de controle (Toolbar, notebook, tree control) • Suporte MDI (Multiple Document Interface) • Pode ser usado para criar bibliotecas dinâmicas (no Windows e Unix) • Suporte de Rede • Suporte para processamento de imagens independente da plataforma • Manipula muitos formatos de arquivos (BMP, GIF, PCX, JPEG, XPM, PNM,...)
Alguns compiladores compatíveis • Compiladores MS-Windows • Visual C++ 1.5, 4.0., 5.0 e 6.0 ( versão .NET sendo avaliada) • Borland C++ 4.5 e 5.0 • Borland C++ 4.5 e 5.0 • Borland C++ Builder 1.0 e 3.0 • Watcom C++ 10.6 (Win32) • Cygwin b20 • Mingw32 • Metrowerks CodeWarrior 4
Alguns compiladores compatíveis (2) • Unix • Grande parte dos compiladores C++, incluindo GNU C++ (EGCS 1.1.1 ou citados anteriormente)
Produtos acessório • As bibliotecas e ferramentas distribuídas junto com o wxWindows: • Helpview Helpview é um programa para exibir arquivos HTML do wxWindows. Pode usar classes wxWindows HTML Help de dentro da aplicação. • Tex2RTF Distribuído com wxWindows para converter manuais LaTeX em HTML, MS HTMLHelp, wxHTML Help, RTF, and Windows Help RTF. • Helpgen Helpgen pega C++ arquivos header e gera arquivos de documentação para Tex2RTF, usando comentários apropriados (JavaDoc).
Produtos Acessório (2) • Dialog Editor Permite criação de caixas de diálogos, produzindo arquivos WXR. • Object Graphics Library OGL define API para aplicações que precisam mostrar objetos conectados por linhas que podem ser movidas e interagem. • Frame Layout library Sofisticadas facilidades de “drag and drop”.
Produtos acessório (3) • Net library É uma coleção de classes de rede, para mail e web. • Animate library Permite carregar GIFs animadas, entre outros formatos,e exibí-los. • Canvas library • MMedia library Dá suporte a funcionalidades de multimídia. • Styled Text Control library Biblioteca para edição de texto sensível à sintaxe. • Plot Biblioteca de impressão
Produtos Relacionados • IDEs e Editores de Caixas de Diálogo: • wxDesigner http://www.roebling.de/ Ferramenta comercial para criação de caixas de diálogos para wxWindows de modo rápido e fácil.Permite editar caracteríticas de componentes em alto nível tais como suporte a copy/cut/paste, undo/redo infinitos. Testes rápidos e seguro. • DialogBlocks http://www.anthemion.co.uk/dialogblocks DialogBlocks editor de caixas de diálogo comercial para wxWindows que suporta C++ and XRC • Dev-C++ http://www.bloodshed.net IDE Windows para trabalhar MinGW, trabalha bem com wxWindows
Produtos Relacionados (2) • MinGW Developer Studio http://parinya.homeip.net/ MinGW Developer Studio é uma IDE C/C++ simples para MinGW, escrito usando wxWindows e MinGW. Usa GNU C/C++ e GNU gdb • wxWorkshop http://wxworkshop.sourceforge.net/ IDE para wxWindows escrito com wxWindows. • wxHatch http://biolpc22.york.ac.uk/wx/wxhatch/help/ Gerador de código for wxWindows • VisualWx http://visualwx.altervista.org/ Ferramenta de desenho de forms para wxWindows
Produtos Relacionados (3) • SlickEdit http://www.slickedit.com IDE para Linux • CodeForge http://www.codeforge.com IDE para Linux • Anjuta http://anjuta.sourceforge.net IDE para Linux
Categorias de Classes • Managed windows: wxFrame, wxDialog, wxMDIChildFrame... • Miscellaneous windows: wxPanel, wxScrolledWindows, wxGrid... • Common dialogs: wxDialog, wxFileDialog, wxFontDialog, wxPrintDialog... • Controls: wxControl, wxButton, wxCheckBox, wxComboBox... • Menus: wxMenu, wxMenuBar e wxMenuItem. • Window layout: wxSizer, wxGridSizer, wxBoxSizer... • Device contexts: wxDC, wxClientDC, wxScreenDC... • Graphics device interface: wxColour, wxBitmap, wxBrush, wxIcon... • Events: wxActivateEvent, wxCalendarEvent... • Data structures: wxList, wxDate, wxString...
Categorias de classes (2) • Run-time class information system: wxClassInfo, RTTI macros... • Networking classes: wxSocketBase, wxSocketClient, wxFTP, wxHTTP... • Document/view framework: wxDocument, wxView, wxDocTemplate... • Printing framework: wxPrinter, wxPreviewFrame, wxPageSetupDialog... • File related classes: wxDir, wxFileName, wxFile, wxFFile... • Threading classes: wxThread, wxMutex, wxSemaphore... • HTML classes: wxHtmlWindow, wxHtmlParser... • XML-based resource system classes: wxXmlResource, wxXmlResourceHandler
Algumas das principais classes • wxObject: todas as classes do wxWindows derivam desta classe. Provê algumas abstrações para serem implementadas por classes mais especializadas (Dump, GetClassInfo...). • wxEvtHandler: tem a finalidade de receber informações do sistema de janelas. Todas as classes relativas a janelas e controles (wxWindow, wxDialog, wxButton...) são derivadas desta classe. • wxWindow: classe genérica para todos os elementos de janela. Quando um wxWindow é destruído todos os elementos ligados nele são destruídos antes. • wxDialog: uma janela de dialogo. • wxFileDialog: uma janela de dialogo especializada em abrir arquivos.
Classes, macros e recursos auxiliares • wxString:Mais seguro e conveniente que o uso de char*. Além de possuir métodos que substituem funções como strcpy , strcmp, etc. • wxWindows resource files: Usar .xrc (wxWindows resource files) para mainpular objetos de interface sem impacto no código fonte. • wxDebugContext: Usar para checar memória corrompida e desperdiçada. Possui operações de rastreamento da memória. Pode gerar estatísticas de comportamento da memória de sua aplicação.
Classes, macros e recursos auxiliares (2) • wxASSERT: pode-se usar sentenças assertivas para assegurar a preservação de invariantes de classe e para implementar avaliações de pré-condições e de pós-condições de um “desenho por contrato”. Caso alguma condição seja contrariada, a macro exibe mensagem apropriada.. ex: void MyClass::MyFunction(wxObject* object) { wxASSERT_MSG( (object != NULL), "object should not be NULL in MyFunction!" ); Permite que continue execução ou aborta o programa. • Wxlog: classe para geração de log de execução. • wxLogDebug e wxLogTrace: macros de depuração e funções de log, para gerar informação de depuração em arquivo
Subst. do uso de polimorfismo por tabela de evento • Solução adotada no MFC da Microsoft, com nome de “Message Map”. • Tabelas de eventos ligam uma mensagem à um método de uma classe que manipula este evento. Ou seja, as funções são chamadas “estaticamente” e não através dos ponteiros de tabelas de funções virtuais (polimorfismo). • Pelo polimorfismo, haveria dentro do código de cada aplicação, ponteiros para funções virtuais que não serviriam para nada, pois a maioria dos eventos disparados por controles não precisam ser tratados pela aplicação... • O número de ponteiros inúteis na aplicação seria proporcional ao número de controles GUI da aplicação... • Detalhes de implementação do polimorfismo dependem do compilador. Porém, a diferença de performance, em relação a solução por tabela de eventos, é inevitável !
wxInputStream wxOutputStream wxFileInputStream wxFileOutputStream wxFileStream Casos de herança múltipla • As classes wxFileStream e wxFFileStream são exemplos de classes geradas através de herança múltipla:
Particularidades C++ no wxWindows • Templates: wxWindows não faz uso de templates, uma vez que é considerado um mecanismo não portável • RTTI: wxWindows não faz uso de informação de tipo em tempo de execução já que wxWindows prove seu próprio sistema de informação de tipo em tempo de execução, implementado com macros.( Gerar log's e depuração). • Tipo NULL: alguns compiladores definem NULL para ser 0L, já que nenhuma conversão é permitida para ponteiros. Por causa disso, todos as ocorrências de NULL usam uma conversão explícita tal como: wxWindow *my_window = (wxWindow*) NULL; • É recomendado inserir isso em todo código wxWindow para tornar o código um pouco mais portável.
Particularidades C++ no wxWindows (2) • Headers Pré-compilados: alguns compiladores, tais como Borland C++ e Microsoft C++, suportam headers pré-compilado. Poupa tempo de compilação. O próprio wxWindows pode ser pré compilado. Desvantagem é que a alteração em um arquivo header obriga a recompilação de outros arquivos( no caso do wxWindows, ele todo deve ser recompilado uma vez que tudo inclui o "wx.h").
wxWindows X Eiffel • Dificuldade de comparação • wxWindows é um conjunto de bibliotecas • Eiffel é uma linguagem de programação OO • Vamos focar nossa comparação na capacidade de desenvolvimento em múltiplas plataformas
wxWindows • wxWindows permite desenvolver no Windows 95/98/ME, Windows NT/2K/XP, Linux/Unix com o GTK+ toolkit e MacOS • Então, você não tem que se preocupar que o seu investimento em desenvolvimento se tornará obsoleto pela necessidade de outra plataforma. • Se você quiser, pode inclusive compilar aplicações Windows sem deixar seu ambiente Linux.
Eiffel • Você poderá desenvolver sua aplicação uma úniva vez e poderá compilar aonde quiser • Crie aplicações (incluindo GUIs) que irão rodar de forma idêntica no Linux, Unix e Windows utilizando Eiffel e suas bibliotecas de Multi-Plataformas
Instalação • Depois de “dezipar” e fazer o processo normal de instalação usando setup.exe, a biblioteca precisa ser construída • Usando makefiles • Usando projeto VC e arquivos workspace (%wxwin%\src\wxvc.ds?) • O help normalmente é encontrado no %wxwin%\docs • Para “rebuild all” para “debug” e “release” configure o “wxvc”
Exemplo de aplicação simples Exemplo: A aplicação Oi e Tchau. Aplicação exibe uma mensagem em um statusbar com a mensagem "Oi e Tchau!!" Cada aplicação wxWindow precisa de um objeto derivado de wxApp e sobrecarrega o método OnInit() para iniciar a aplicação. Pode-se, por exemplo, criar a janela principal da sua aplicação neste método.O arquivo de definição "OiTChau.h" poderia ser o seguinte: #ifndef _OI_TCHAU_H #define _OI_TCHAU_H class OiTchau : public wxApp { public: virtual bool OnInit(); }; DECLARE_APP(OiTchau) #endif _OI_TCHAU_H Para janela principal usaremos a classe wxFrame. Esta classe prove uma janela que seu tamanho e posição pode ser alterado pelo usuário.
Exemplo de aplicação simples Exemplo: A aplicação Oi e Tchau. A implementação da aplicação no arquivo "OiTchau.cpp" poderia ser a seguinte: #include "wx/wxprec.h" #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "OiTchau.h" IMPLEMENT_APP(OiTchau) bool OiTchau::OnInit() { wxFrame *frame = new wxFrame((wxFrame*) NULL, -1, "Aplicação OiTchau"); frame->CreateStatusBar(); frame->SetStatusText("Oi e Tchau!!!"); frame->Show(TRUE); SetTopWindow(frame); return true; } DECLARE_APP e IMPLEMENT_APP são macros que dependendo da plataforma, cria a funçãp main( ) ou WinMain( ), entre outras coisas.
Compilando com o “Borland Command line tools” Pré-Requisitos: Instalação do wxWindows: Executar setup.exe. Pré-compilação do wxWindows: (opicional) Através de um makefile que vem com o wxWindows. ( detalhes install.txt, na documentação) Desenvolve-se a aplicação e compila-se usando um makefile ou não. Foi compilado um dos demos, um jogo, usando um makefile. Comentários: O passo de pré-compilação demora uns 10 a 15 minutos. Não houve nenhum problema durante a instalação e pré-compilação da biblioteca. Depois desses dois passos o wxWindows mostrou-se pronto para uso, não apresentando nenhum problema durante a compila- ção do demo.
Compilando com o GCC e AutoTools (Linux, Mingw, etc.) • O processo de compilação do wxWindows com gcc é extremamente simples com o auxílio do autoconf e do automake. Basta executar os comandos “configure; make; make install” no diretório principal da distribuição. • Cada programa demonstração deve ser compilado de forma semelhante porém separadamente.
Links • Site Oficial: www.wxwindows.org • Lista de discussão wxWindows & Dev-C++: g.yi.org/Forum/list.php?f=13 • Empresa de Julian Smart: www.anthemion.co.uk/