O índice da comunidade de programação TIOBE dá uma indicação da popularidade das linguagens de programação. O ranking (índice) é atualizado mensalmente e é baseado na qualificação de engenheiros no mundo inteiro, cursos e fornecedores. Google, MSN, Yahoo!, Wikipedia e YouTube são utilizados para calcular os votos. Observe que o índice TIOBE não é sobre a melhor linguagem de programação ou a línguagem em que a maioria das linhas de código têm sido escrito, mas é para verificar a popularidade das linguagens de programação.
O índice pode ser usado para verificar se suas habilidades de programação são ainda actualizados ou para tomar uma decisão estratégica sobre a linguagem de programação deve ser adotada quando começar a construir um novo sistema de software. A definição do índice TIOBE pode ser encontrada aqui.
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
5 de novembro de 2009
LUA - a linguagem brasileira
Lua é uma linguagem de programação poderosa, rápida e leve, projetada para estender aplicações.
Lua combina sintaxe simples para programação procedural com poderosas construções para descrição de dados baseadas em tabelas associativas e semântica extensível. Lua é tipada dinamicamente, é interpretada a partir de bytecodes para uma máquina virtual baseada em registradores, e tem gerenciamento automático de memória com coleta de lixo incremental. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida.
Lua é usada em muitas aplicações industriais (e.g., Adobe's Photoshop Lightroom), com ênfase em sistemas embutidos (e.g., o middleware Ginga para TV digital) e jogos (e.g., World of Warcraft). Lua é atualmente a linguagem de script mais usada em jogos. Lua tem um sólido manual de referência e existem vários livros sobre a linguagem. Várias versões de Lua foram lançadas e usadas em aplicações reais desde a sua criação em 1993.
Referência:
site oficial: http://www.lua.org/portugues.html
Lua combina sintaxe simples para programação procedural com poderosas construções para descrição de dados baseadas em tabelas associativas e semântica extensível. Lua é tipada dinamicamente, é interpretada a partir de bytecodes para uma máquina virtual baseada em registradores, e tem gerenciamento automático de memória com coleta de lixo incremental. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida.
Lua é usada em muitas aplicações industriais (e.g., Adobe's Photoshop Lightroom), com ênfase em sistemas embutidos (e.g., o middleware Ginga para TV digital) e jogos (e.g., World of Warcraft). Lua é atualmente a linguagem de script mais usada em jogos. Lua tem um sólido manual de referência e existem vários livros sobre a linguagem. Várias versões de Lua foram lançadas e usadas em aplicações reais desde a sua criação em 1993.
Lua é rápida
Lua tem uma merecida reputação de ótimo desempenho. Outras linguagens de script aspiram ser "tão rápidas quanto Lua". Vários benchmarks mostram Lua como a linguagem mais rápida dentre as linguagens de script interpretadas. Lua é rápida não só em programas específicos para benchmarks, mas no dia-a-dia também. Porções substanciais de aplicações grandes são escritas em Lua.Lua é portátil
Lua é distribuída via um pequeno pacote e compila sem modificações em todas as plataformas que têm um compilador ANSI/ISO C. Lua roda em todos os tipos de Unix e Windows, e também em dispositivos móveis (como computadores de mão e celulares que usam BREW, Symbian, Pocket PC, etc.) e em microprocessadores embutidos (como ARM e Rabbit) para aplicações como Lego MindStorms.Lua é embutível
Lua é uma engine rápida e pequena que você pode facilmente embutir na sua aplicação. Lua tem uma API simples e bem documentada que permite uma integração forte com código escrito em outras linguagens. É simples estender Lua com bibliotecas escritas em outras linguagens. Também é simples estender programas escritos em outras linguagens com Lua. Lua é usada para estender programas escritos não só em C e C++, mas também em Java, C#, Smalltalk, Fortran, Ada, e mesmo outras linguagens de script, como Perl and Ruby.Lua é poderosa (e simples)
Um conceito fundamental no projeto de Lua é fornecer meta-mecanismos para a implementação de construções, em vez de fornecer uma multidão de construções diretamente na linguagem. Por exemplo, embora Lua não seja uma linguagem puramente orientada a objetos, ela fornece meta-mecanismos para a implementação de classes e herança. Os meta-mecanismos de Lua trazem uma economia de conceitos e mantêm a linguagem pequena, ao mesmo tempo que permitem que a semântica seja estendida de maneiras não convencionais.Lua é pequena
Incluir Lua numa aplicação não aumenta quase nada o seu tamanho. O pacote de Lua 5.1.4, contendo o código fonte, documentação e exemplos, ocupa 212K comprimido e 860K descompactado. O fonte contém cerca de 17000 linhas de C. No Linux, o interpretador Lua contendo todas as bibliotecas padrões de Lua ocupa 153K e a biblioteca Lua ocupa 203K.Lua é livre
Lua é software livre de código aberto, distribuída sob uma licença muito liberal (a conhecida licença MIT). Lua pode ser usada para quaisquer propósitos, incluindo propósitos comerciais, sem qualquer custo ou burocracia. Basta fazer um download e usá-la.Lua tem importância global
O projeto e a evolução de Lua foram apresentados em junho de 2007 na HOPL III, a 3a Conferência da ACM sobre a História das Linguagens de Programação. Essa conferência ocorre a cada 15 anos (a primeira foi em 1978 e a segunda em 1993) e somente poucas linguagens são apresentadas a cada vez. A escolha de Lua para a HOPL III é um importante reconhecimento do seu impacto mundial. Lua é a única linguagem de programação de impacto desenvolvida fora do primeiro mundo, estando atualmente entre as 20 linguagens mais populares na Internet (segundo o índice TIOBE).Referência:
site oficial: http://www.lua.org/portugues.html
28 de outubro de 2009
Python a linguagem acadêmica americana
Como educador, pesquisador e autor de livros, regozija-me ver completo este trabalho. Python é uma linguagem de programação divertida e extremamente fácil de usar que tem ganho forte popularidade nestes últimos poucos anos. Desenvolvida dez anos atrás por Guido van Rossun, a sintaxe simples do Python e seu sentido geral são grandemente derivados do ABC, uma linguagem didática que foi desenvolvida nos anos 80.
Entretanto, Python também foi criado para solucionar problemas reais e tomou emprestado uma grande quantidade de características de linguagens de programação como C++, Java, Modula-3 e Scheme. Por causa disso, uma das mais notáveis características do Python é o grande apelo que tem junto a desenvolvedores profissionais de software, cientistas, pesquisadores, artistas e educadores.
A Despeito deste apelo do Python junto às mais variadas comunidades, você pode ainda estar pensando por que Python? Ou por que ensinar programação com Python? Responder à estas perguntas não é uma tarefa fácil, especialmente se a opinião pública está do lado de alternativas mais masoquistas como C++ e Java. Entretanto, eu acho que a resposta mais direta é que programar com Python é um bocado divertido e mais produtivo.
Quando ministro cursos de ciências da computação, o que desejo é cobrir conceitos importantes além de tornar a matéria interessante e os alunos participativos. Infelizmente, existe uma tendência entre os cursos introdutórios de programação a focar atenção demais em abstrações matemáticas, e de frustração entre os alunos com problemas enfadonhos e inoportunos relacionados a detalhes de sintaxe em baixo nível, compilação e a imposição de regras que aparentemente só um expert pode compreender (enforcement of seemingly arcane rules XXX). Embora alguma abstração e formalismo sejam importantes para engenheiros profissionais de software e estudantes que planejam continuar seus estudos em ciências da computação, escolher tal abordagem em um curso introdutório faz da ciência da computação algo entediante. Quando ministro um curso, não desejo uma sala cheia de alunos sem inspiração. Em vez disso, preferiria muito mais vê-los tentando solucionar problemas interessantes explorando idéias diferentes, trilhando caminhos não convencionais, quebrando regras, e aprendendo a partir de seus erros. Fazendo assim, não pretendo desperdiçar metade de um semestre tentando explicar problemas obscuros de sintaxe, mensagens ininteligíveis de compiladores ou as várias centenas de maneiras pelas quais um programa pode gerar uma falha geral de proteção.
Uma das razões pelas quais eu gosto de Python é que ele oferece um equilíbrio realmente bom entre o lado prático e o lado conceitual. Sendo Python interpretado, os iniciantes podem pegar a linguagem e começar a fazer coisas legais quase imediatamente sem se perderem em problemas de compilação e ligação (linking XXX). Além disso, Python vem com uma grande biblioteca de módulos que podem ser utilizados para fazer todo tipo de tarefa, desde a programação para a web até gráficos. Com tal enfoque prático temos uma bela maneira de alcançar o engajamento dos alunos e permitir que eles finalizem projetos significativos. Entretanto, Python também pode servir de excelente embasamento para a introdução de conceitos importantes em ciência da computação. Já que Python suporta plenamente procedimentos (procedures) e classes, os alunos podem ser gradualmente introduzidos a tópicos como abstração procedural, estruturas de dados, e programação orientada a objetos, todos aplicáveis em cursos posteriores de Java ou C++. Python ainda toma emprestado certas características de linguagens de programação funcionais e pode ser usado para introduzir conceitos cujos detalhes poderiam ser aprofundados em cursos de Scheme e Lisp.
Lendo o prefácio de Jeffrey, fiquei impressionado com seu comentário de que Python o fez ver um maior nível de sucesso e um menor nível de frustração, o que lhe permitiu progredir mais depressa com resultados melhores. Embora estes comentários refiram-se aos seus cursos introdutórios, eu às vezes uso Python exatamente pelas mesmas razões em cursos avançados de pós-graduação em ciência da computação na Universidade de Chicago. Nestes cursos, enfrento constantemente a assustadora tarefa de cobrir muitos tópicos difíceis em um rapidíssimo trimestre (quarter XXX) de nove semanas. Embora me seja possível inflingir um bocado de dor e sofrimento pelo uso de uma linguagem como C++, tenho percebido muitas vezes que este enfoque é contraproducente especialmente quando o curso é sobre um tópico não relacionado apenas com programar. Acho que usar Python me permite um melhor foco no tópico em questão, enquanto permite que os alunos completem projetos substanciais em classe.
Embora Python seja ainda uma linguagem jovem e em evolução, acredito que tem um futuro brilhante em educação. Este livro é um passo importante nessa direção.
David Beazley
Universidade de Chicago
Autor de Python Essencial Reference
Texto extraído da apresentação do livro:
Como pensar como um Cientista de Computação usando Python
Entretanto, Python também foi criado para solucionar problemas reais e tomou emprestado uma grande quantidade de características de linguagens de programação como C++, Java, Modula-3 e Scheme. Por causa disso, uma das mais notáveis características do Python é o grande apelo que tem junto a desenvolvedores profissionais de software, cientistas, pesquisadores, artistas e educadores.
A Despeito deste apelo do Python junto às mais variadas comunidades, você pode ainda estar pensando por que Python? Ou por que ensinar programação com Python? Responder à estas perguntas não é uma tarefa fácil, especialmente se a opinião pública está do lado de alternativas mais masoquistas como C++ e Java. Entretanto, eu acho que a resposta mais direta é que programar com Python é um bocado divertido e mais produtivo.
Quando ministro cursos de ciências da computação, o que desejo é cobrir conceitos importantes além de tornar a matéria interessante e os alunos participativos. Infelizmente, existe uma tendência entre os cursos introdutórios de programação a focar atenção demais em abstrações matemáticas, e de frustração entre os alunos com problemas enfadonhos e inoportunos relacionados a detalhes de sintaxe em baixo nível, compilação e a imposição de regras que aparentemente só um expert pode compreender (enforcement of seemingly arcane rules XXX). Embora alguma abstração e formalismo sejam importantes para engenheiros profissionais de software e estudantes que planejam continuar seus estudos em ciências da computação, escolher tal abordagem em um curso introdutório faz da ciência da computação algo entediante. Quando ministro um curso, não desejo uma sala cheia de alunos sem inspiração. Em vez disso, preferiria muito mais vê-los tentando solucionar problemas interessantes explorando idéias diferentes, trilhando caminhos não convencionais, quebrando regras, e aprendendo a partir de seus erros. Fazendo assim, não pretendo desperdiçar metade de um semestre tentando explicar problemas obscuros de sintaxe, mensagens ininteligíveis de compiladores ou as várias centenas de maneiras pelas quais um programa pode gerar uma falha geral de proteção.
Uma das razões pelas quais eu gosto de Python é que ele oferece um equilíbrio realmente bom entre o lado prático e o lado conceitual. Sendo Python interpretado, os iniciantes podem pegar a linguagem e começar a fazer coisas legais quase imediatamente sem se perderem em problemas de compilação e ligação (linking XXX). Além disso, Python vem com uma grande biblioteca de módulos que podem ser utilizados para fazer todo tipo de tarefa, desde a programação para a web até gráficos. Com tal enfoque prático temos uma bela maneira de alcançar o engajamento dos alunos e permitir que eles finalizem projetos significativos. Entretanto, Python também pode servir de excelente embasamento para a introdução de conceitos importantes em ciência da computação. Já que Python suporta plenamente procedimentos (procedures) e classes, os alunos podem ser gradualmente introduzidos a tópicos como abstração procedural, estruturas de dados, e programação orientada a objetos, todos aplicáveis em cursos posteriores de Java ou C++. Python ainda toma emprestado certas características de linguagens de programação funcionais e pode ser usado para introduzir conceitos cujos detalhes poderiam ser aprofundados em cursos de Scheme e Lisp.
Lendo o prefácio de Jeffrey, fiquei impressionado com seu comentário de que Python o fez ver um maior nível de sucesso e um menor nível de frustração, o que lhe permitiu progredir mais depressa com resultados melhores. Embora estes comentários refiram-se aos seus cursos introdutórios, eu às vezes uso Python exatamente pelas mesmas razões em cursos avançados de pós-graduação em ciência da computação na Universidade de Chicago. Nestes cursos, enfrento constantemente a assustadora tarefa de cobrir muitos tópicos difíceis em um rapidíssimo trimestre (quarter XXX) de nove semanas. Embora me seja possível inflingir um bocado de dor e sofrimento pelo uso de uma linguagem como C++, tenho percebido muitas vezes que este enfoque é contraproducente especialmente quando o curso é sobre um tópico não relacionado apenas com programar. Acho que usar Python me permite um melhor foco no tópico em questão, enquanto permite que os alunos completem projetos substanciais em classe.
Embora Python seja ainda uma linguagem jovem e em evolução, acredito que tem um futuro brilhante em educação. Este livro é um passo importante nessa direção.
David Beazley
Universidade de Chicago
Autor de Python Essencial Reference
Texto extraído da apresentação do livro:
Como pensar como um Cientista de Computação usando Python
24 de outubro de 2009
Python
Python é uma linguagem de altíssimo nível, orientada a objetos, de tipagem dinâmica e forte, interpretada e interativa. Foi criada em 1990 por Guido van Rossum, no Instituto Nacional de Pesquisa para Matemática e Ciência da Computação da Holanda (CWI) e tinha como foco original usuários como físicos e engenheiros. O Python foi concebido a partir de outra linguagem existente na época, chamada ABC.
O Python possui uma sintaxe clara e concisa, que favorece a legibilidade do código fonte, tornando a linguagem mais produtiva.
A linguagem inclui diversas estruturas de alto nível (listas, tuplas, dicionários, data / hora, complexos e outras) e uma vasta coleção de módulos prontos para uso, além de frameworks de terceiros que podem ser adicionados. Também possui recursos encontrados em outras linguagens modernas, tais como: geradores, introspecção, persistência, metaclasses e unidades de teste. Multiparadigma, a linguagem suporta programação modular e funcional, além da orientação a objetos. Mesmo os tipos básicos no Python são objetos.
A linguagem é interpretada através de bytecode pela máquina virtual Python, tornando o código portável. Com isso é possível compilar aplicações em uma plataforma e rodar em outras ou executar direto do código fonte.
Python é um software de código aberto (com licença compatível com a General Public License (GPL), porém menos restritiva, permitindo que o Python seja incorporados em produtos proprietários) e a especificação da linguagem é mantida pela Python Software Foundation2 (PSF).
Python é muito utilizado como linguagem script em vários softwares, permitindo
automatizar tarefas e adicionar novas funcionalidades, entre eles: BrOffice.org,
PostgreSQL, Blender e GIMP. Também é possível integrar o Python a outras linguagens, como a Linguagem C. Em termos gerais, o Python apresenta muitas similaridades com outras linguagens dinâmicas, como Perl e Ruby.
Exemplo:
O código fonte é traduzido pelo interpretador para o formato bytecode, que é
multiplataforma e pode ser executado e distribuído sem fonte original.
Por padrão, o interpretador compila os fontes e armazena o bytecode em disco, para que a próxima vez que o executar, não precise compilar novamente o programa, reduzindo o tempo de carga na execução. Se os fontes forem alterados, o interpretador se encarregará de regerar o bytecode automaticamente, mesmo utilizando o shell interativo.
Quando um programa ou um módulo é evocado, o interpretador realiza a análise do código, converte para símbolos, compila (se não houver bytecode atualizado em disco) e executa na máquina virtual Python.
O bytecode é armazenado em arquivos com extensão “.pyc” (bytecode normal) ou “.pyo” (bytecode otimizado).
O bytecode também pode ser empacotado junto com o interpretador em um executável, para facilitar a distribuição da aplicação.
Modo interativo
O modo interativo é uma característica diferencial da linguagem, pois é possível testar e modificar o código de um programa antes da inclusão do código nos programas, por exemplo.
Exemplo do Python sendo usado de forma interativa (com o shell PyCrust4):
Referências:
http://www.python.org/
Livro: Python para desenvolvedores (formato PDF)
Computação Gráfica em Python (formato PDF)
http://www.python.org/download/
O Python possui uma sintaxe clara e concisa, que favorece a legibilidade do código fonte, tornando a linguagem mais produtiva.
A linguagem inclui diversas estruturas de alto nível (listas, tuplas, dicionários, data / hora, complexos e outras) e uma vasta coleção de módulos prontos para uso, além de frameworks de terceiros que podem ser adicionados. Também possui recursos encontrados em outras linguagens modernas, tais como: geradores, introspecção, persistência, metaclasses e unidades de teste. Multiparadigma, a linguagem suporta programação modular e funcional, além da orientação a objetos. Mesmo os tipos básicos no Python são objetos.
A linguagem é interpretada através de bytecode pela máquina virtual Python, tornando o código portável. Com isso é possível compilar aplicações em uma plataforma e rodar em outras ou executar direto do código fonte.
Python é um software de código aberto (com licença compatível com a General Public License (GPL), porém menos restritiva, permitindo que o Python seja incorporados em produtos proprietários) e a especificação da linguagem é mantida pela Python Software Foundation2 (PSF).
Python é muito utilizado como linguagem script em vários softwares, permitindo
automatizar tarefas e adicionar novas funcionalidades, entre eles: BrOffice.org,
PostgreSQL, Blender e GIMP. Também é possível integrar o Python a outras linguagens, como a Linguagem C. Em termos gerais, o Python apresenta muitas similaridades com outras linguagens dinâmicas, como Perl e Ruby.
Exemplo:
# Exemplo de programa em PythonSaída:
# Uma lista de instrumentos musicais
instrumentos = ['Baixo', 'Bateria', 'Guitarra']
# Para cada nome na lista de instrumentos
for instrumento in instrumentos:
# mostre o nome do instrumento musical
print instrumento
BaixoBytecode
Bateria
Guitarra
O código fonte é traduzido pelo interpretador para o formato bytecode, que é
multiplataforma e pode ser executado e distribuído sem fonte original.
Por padrão, o interpretador compila os fontes e armazena o bytecode em disco, para que a próxima vez que o executar, não precise compilar novamente o programa, reduzindo o tempo de carga na execução. Se os fontes forem alterados, o interpretador se encarregará de regerar o bytecode automaticamente, mesmo utilizando o shell interativo.
Quando um programa ou um módulo é evocado, o interpretador realiza a análise do código, converte para símbolos, compila (se não houver bytecode atualizado em disco) e executa na máquina virtual Python.
O bytecode é armazenado em arquivos com extensão “.pyc” (bytecode normal) ou “.pyo” (bytecode otimizado).
O bytecode também pode ser empacotado junto com o interpretador em um executável, para facilitar a distribuição da aplicação.
Modo interativo
O modo interativo é uma característica diferencial da linguagem, pois é possível testar e modificar o código de um programa antes da inclusão do código nos programas, por exemplo.
Exemplo do Python sendo usado de forma interativa (com o shell PyCrust4):
Referências:
http://www.python.org/
Livro: Python para desenvolvedores (formato PDF)
Computação Gráfica em Python (formato PDF)
http://www.python.org/download/
29 de setembro de 2009
Grade Ciências da Comp. 2007 UeVa
Universidade Estadual do Vale do Acaraú
Grade curricular do curso de Ciências da Computação - 2006.1 - 2007.1
Nº / código / nome / pré-requizito / nº de créditos / horas-aula
1 LPROG137 Lógica de programação n 8 120
2 CETIC137 Ética n 4 60
3 CIUNI137 Introdução a universidade n 2 30
4 CPORT137 Português n 4 60
5 CINGL137 Inglês n 4 60
6 CMTCI137 Metodologia do trabalho científico n 4 60
7 ALGLI237 Álgebra linear n 4 60
8 CCAL1237 Cálculo I n 6 90
9 CIRDI237 Circuitos digitais 1 4 60
10 MATDI237 Matemática discreta n 6 90
11 LPRO1237 Linguagem de programação I 1 4 60
12 LABPR237 Laboratório de programação 1 4 60
13 CCAL2337 Cálculo II 8 6 90
14 FISIC337 Física 8 4 60
15 ESTDA337 Estrutura de dados 12e11 8 120
16 LOGMA337 Lógica matemática 10 6 90
17 ARQCO337 Arquitetura de computadores 9 4 60
18 BADA1437 Banco de dados I 15e11 6 90
19 TEOGR437 Teoria dos grafos 15 4 60
20 ADMSS437 Administração de sistemas e serviços n 4 60
21 PROBJ437 Programação orientada a objeto 11 8 120
22 ESAPC437 Estatística com apoio computacional n 6 90
23 HARDB537 Hardware básico n 4 60
24 CALNU537 Cálculo numérico 7,13e11 4 60
25 ANPSI537 Análise e projeto de sistemas 18,11e21 6 90
26 CONAA537 Construção e análise de algoritmo 11e19 6 90
27 BADA2637 Banco de dados II 18 6 90
28 REDCO637 Rede de computadores 17e14 6 90
29 SISTO637 Sistemas operacionais 17 6 90
30 LIFAU637 Linguagens formais e automatos 11,10e19 6 90
31 COPIL737 Compiladores 30 6 90
32 ENGSO737 Engenharia de software 25 4 60
33 INTAR737 Inteligência artificial 16e11 6 90
34 SISDI737 Sistemas distribuídos 28 4 60
35 COMPS837 Computadores e sociedade 2 4 60
36 ESTA1837 Estágio supervisionado I n 12 180
37 COMPG937 Computação gráfica 24e11 6 90
38 ESTA2937 Estágio supervisionado II 36 20 300
Optativas
CONGR037 Contabilidade geral n 4 60
DILEG037 Direito e legislação n 4 60
EMPRE037 Empreendedorismo n 4 60
INETC037 Introdução a economia n 4 60
PROLI037 Programação linear n 4 60
GERDC037 Gerenciamento de rede de computadores 28 4 60
LPRG2037 Linguagem de programação II 11 4 60
MACFI037 Matemática comercial e financeira n 4 60
INTAD037 Introdução a administração n 4 60
TOAVC037 Tópicos avançados em computação s 4 60
18 de setembro de 2009
Padrões de projeto - Design Pattern
Design Pattern é uma forma padrão de organizar classes e objetos, nomes para soluções que você já modelou, uma forma de compartilhar conhecimentos sobre POO, soluções de POO para problemas que incidem em diversos cenários de desenvolvimento, etc.
Quando adotamos o uso de Design Patterns seu código fica mais organizado, aumenta a qualidade, menor complexidade, aumenta a comunicação dentro da equipe de desenvolvimento, etc.
A definição de um pattern pode conter:
• O nome: identifica o padrão;
• O problema: explica o problema e o seu contexto;
• O problema: explica o problema e o seu contexto;
• A solução: descreve a maneira de melhorar o desenvolvimento, relacionamentos, responsabilidades, colaborações, de maneira ser implementada em diferentes situações;
• As consequências: os resultados de aplicarmos o padrão;
• As consequências: os resultados de aplicarmos o padrão;
Família de Patterns GoF
GoF (Quatro criadores) é uma familia de Design Patters, são 23 padrões, veja alguns:
• Criação: Abstract Factory, Builder, Factory Method, Prototype, Singleton
• Estrutura: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy
• Comportamento: Chain Of Response, Command Interpreter, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.
Familia de Patterns J2EE
• J2EE: Busness Delegate, Composite Entity, Composite View, Data Access Object, Fast Lane Reader, Front Controller, Intercepting Filter, Model-View-Controller, Service Locater, Session Facade, Transfer Object, Value List Handler, View Helper
Você pode consultar o catalogo de Patterns do J2EE no endereço abaixo.
Patterns e Certificação
As seguintes certificações Sun exigem conhecimentos de Patterns:
• Sun Certified Web Component Developer
• Sun Certified Enterprise Architect;
Para quem pretende tirar uma destas certificações é necessário estudar todos os patterns, aplicar na prática os principais GoF e conhecer a teoria básica;
Alguns Patterns Service Locator
• Definição: simplifica o acesso a recursos J2EE em um aplicativo centralizando lookups com JNDI em classes específicas de localização de serviços.
• Evita que sua solução tenha alto acoplamento com JNDI Naming Service;
• Tomar cuidado com Service Locates e cluster!
• Utilize sempre que possível ENC.
• Exemplo no JAREF(J2EE Architecture, Research and Education Framework);
Data Access Object
• Definição: centraliza o serviço de persistência de objetos em um pequeno conjunto de classes, evitando por exemplo que o código SQL se espalhe pelo código da solução.
• Mesmo utilizando framework de persistência, utilize Data Access Object
• Exemplo no JAREF(J2EE Architecture, Research and Education Framework);
Model View Control
• Definição: divide o aplicativo em dados, comportamento e apresentação.
• Aplicando o MVC podemos reaproveitar o mesmo dado para múltiplas visualizações;
• Podemos reaproveitar o comportamento(eventos) da solução;
• É um pattern de arquitetura, criado há muito tempo. Pode ser aplicado em qualquer linguagem, mais facilmente com OOP.
• Struts, WebWork, Spring, PicoContainer são exemplos de frameworks J2EE.
• Link comparativo de frameworks MVC: https://equinox.dev.java.net/framework-comparison/WebFrameworks.pdf
Front Controller
• Definição: centraliza requests em um ponto central na solução.
• No lugar de um JSP submit para ouro JSP todos os JSP’s “subments” para um Servlet Controller que será responsável por processar as requisições.
• Exemplo no JAREF(J2EE Architecture, Research and Education Framework);
Command / Action
• Definição: encapsula uma requisição ao software em um objeto.
• Transforma métodos em classes
• Facilita o desenvolvimento de undo/redo
• Aumenta a granularidade do código, permitindo o reuso
• Action do Struts é o principal exemplo de implementação deste pattern
Factory
• Definição: instancia classes conforme demanda, recebendo parâmetros indicativos do objeto a ser instanciado.
• É comum o Controller “inchar”, pois nele incide todas as solicitações externas. Como uma maneira de resolver esse tipo de crescimento desordenado, é sugerido que o Command seja criado sob demanda, e deixa por conta de uma Factory a instanciação das classes Command necessárias.
Dispatcher to views
• Definição: gerencia a saída de informações para a interface desejada pelo cliente. Desatrela a forma de se enxergar os dados para múltiplas visões.
• É uma maneira de se implementar M. V. C. na sua essência, como o Smalltalk pregava.
Intercepting Filter
• Definição: forma para executar pré e pós processamento em request da solução.
• Um Servlet Filter é um exemplo de implementação de um Intercepting Filter para interceptar requests no Web Container;
View Helper
• Definição: simplifica a “redenrização” de objetivos em views com formatação.
• Uma Custom Tag pode representar uma View Helper;
• Uma simples classe convencional com métodos estáticos também;
• Exemplo no JAREF(J2EE Architecture, Research and Education Framework);
Business Delegate
• Definição: em aplicações distribuídas, o acesso remoto/local a EJB’s via JNDI Naming Service e tratamento de erros podem se tornar complexo à medida que o projeto cresce.
• Solução: criar uma classe intermediaria para acessar os EJB’s que contempla as regras de nomes de componentes para lookups, propriedades do servidor J2EE, tratamento de exceptions, etc;
Conclusão
• Os patterns (padrões) previnem erros comuns evitando problemas recorrentes;
• Utilizando patterns você cria soluções padronizadas, facilitando a troca de programadores;
• Você pode criar seus próprios patterns;
• O site theserverside.com contém vários patterns fora do catálogo J2EE e GoF;
Referências:
livro: http://www.submarino.com.br/produto/1/93924/padroes+de+projeto
Livro em inglês: http://www.scribd.com/doc/7282876/Design-Patterns-Gamma-GOF
http://java.sun.com/blueprints/patterns/catalog.html
http://www.scribd.com/doc/16738161/Java-Design-Patterns-With-Examples
http://evandropaes.wordpress.com/2007/02/28/design-patterns/
Referências:
livro: http://www.submarino.com.br/produto/1/93924/padroes+de+projeto
Livro em inglês: http://www.scribd.com/doc/7282876/Design-Patterns-Gamma-GOF
http://java.sun.com/blueprints/patterns/catalog.html
http://www.scribd.com/doc/16738161/Java-Design-Patterns-With-Examples
http://evandropaes.wordpress.com/2007/02/28/design-patterns/
15 de setembro de 2009
Exemplo de herança e polimorfismo em java
Nível intermediário: herança de classes e polimorfismo em java.
Exemplo de programa que desenha figuras geométricas numa janela.
Forma.java
Trabalho pedido com atividade da disciplina POO ministrado pelo prof. Gilzamir Gomes.
Exemplo de programa que desenha figuras geométricas numa janela.
Forma.java
import java.awt.*;Ponto.java
public abstract class Forma {
protected Graphics contextoGrafico;
public abstract void exibir();
public void setContextoGrafico(Graphics g) {
contextoGrafico = g;
}
}
public class Ponto extends Forma {Retangulo.java
private int tamanho;
private int x;
private int y;
public Ponto(int tamanho, int x, int y) {
this.tamanho = tamanho;
this.x = x;
this.y = y;
}
public void exibir() {
contextoGrafico.drawOval(x, y, tamanho, tamanho);
}
public int getTamanho() {
return tamanho;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
public class Retangulo extends Forma {Elipse.java
private Ponto pos;
private int w; //largura
private int h; //altura
public Retangulo(Ponto pos, int w, int h) {
this.pos = new Ponto(pos.getTamanho(), pos.getX(), pos.getY());
this.w = w;
this.h = h;
}
public void exibir() {
contextoGrafico.drawRect(pos.getX(), pos.getY(), w, h);
}
}
public class Elipse extends Forma {Poligono.java
private Ponto pos;
private int w; //largura
private int h; //altura
public Elipse(Ponto pos, int w, int h) {
this.pos = new Ponto(pos.getTamanho(), pos.getX(), pos.getY());
this.w = w;
this.h = h;
}
public void exibir() {
contextoGrafico.drawOval(pos.getX(), pos.getY(), w, h);
}
}
public class Poligono extends Forma {Tela.java
private int x[];
private int y[];
private int n;
public Poligono(int[] x, int[] y, int n) {
this.n = n;
this.x = x;
this.y = y;
}
public void exibir() {
contextoGrafico.drawPolygon(this.x, this.y, this.n);
}
}
import java.awt.*;ProgramaPrincipal.java
import java.util.ArrayList;
public class Tela extends Frame {
private ArrayListformas;
public Tela () {
formas = new ArrayList();
}
public void atualizar() {
update(getGraphics());
}
public void adicionar(Forma f) {
f.setContextoGrafico(getGraphics());
formas.add(f);
}
@Override
public void paint(Graphics arg0) {
for (int i = 0; i < formas.size(); i++){
formas.get(i).exibir();
}
}
}
public class ProgramaPrincipal {Testado na IDE Eclipse.
public static void main(String[] args) {
Tela tela = new Tela();
tela.setTitle("Primeira Janela");
tela.setSize(300, 300);
tela.setVisible(true);
Ponto p = new Ponto(10, 50, 50);
Retangulo r = new Retangulo(new Ponto(0, 100, 100), 40, 40);
Elipse e = new Elipse(new Ponto(10, 150, 150), 60, 40);
//triangulo
int trix[] = { 40, 100, 70};
int triy[] = { 260, 260, 200};
Poligono tri = new Poligono(trix, triy, 3);
//poligono de 5 lados
int polix[] = { 140, 120, 170, 240, 210};
int poliy[] = { 220, 260, 280, 260, 200};
Poligono poli = new Poligono(polix, poliy, 5);
tela.adicionar(p);
tela.adicionar(r);
tela.adicionar(e);
tela.adicionar(tri);
tela.adicionar(poli);
tela.atualizar();
}
}
Trabalho pedido com atividade da disciplina POO ministrado pelo prof. Gilzamir Gomes.
13 de setembro de 2009
PHP manipulação de Strings
Manipulação de strings
Declaração de stringsConcatenação
Caracteres de escape
Funções:
strtoupper = transforma em maiúscula
strtolower = transforma em minúscula
substr = retorna parte de um string
strpad = preenche uma string com outra string
str_repeat = repete uma string uma quantidade de vezes
strlen = retorna o tamanho da string
str_replace = substitui uma string num contexto
strpos = encontra a primeira ocorrência de uma string dentro de outra
Declaração de strings
Uma string é uma cadeia de caracteres alfanuméricos. Para declarar uma string podemos utilizar aspas simples ' ' ou aspas duplas " ".$variavel = 'Isto é um teste';
$variavel = "Isto é um teste";
a diferença é que todo conteúdo contido dentro das aspas duplas é avaliado pelo PHP. Assim, se a string contém uma variável, esta variável será traduzida pelo seu valor.
<?php
$fruta = 'maçã';
print "como $fruta"; // resultado 'como maçã'
print 'como $fruta'; // resultado 'como $fruta'
?>
Podemos declarar uma string com palavra-chave:
<?php
$texto = <<<CHAVE
Aqui nesta área
você pode escrever
CHAVE;
echo $texto;
?>
Concatenação
Para concatenar strings, pode-se utilizar o operador "." ou colocar múltiplas variáveis dentro de strings duplas "", uma vez que seu conteúdo é interpretado.<?php
$fruta = 'maçã';
//primeira forma
echo $fruta . ' é a fruta de adão';
//resultado = maçã é a fruta de adão
//segunda forma
echo "{$fruta} é a fruta de adão";
//resultado = maçã é a fruta de adão
?>
O PHP realiza automaticamente a conversão de tipos:
<?php
$a = 1234;
echo 'O salário é ' . $a . "\n";
echo "O salário é $a \n';
?>
Caracteres de escape
Dentro de aspas duplas " " podemos utilizar controles especiais interpretados pelo PHP, que são os caracters de escape (\):\n nova linha
\r retorno de carro
\t tabulação
\\ barra invertida \
\" aspas duplas
\$ símbolo de $
strtoupper
Transforma uma string (conteúdo) para maiúsculo.<?php
string strtoupper('Convertendo para maiúsculo');
?>
substr
Retorna parte de uma string (conteúdo).string substr (string conteúdo, int início [, comprimento])
Exemplo:
<?php
$rest = substr("América", 1);
echo $rest . "\n"; // mostra mérica
$rest = substr("América", 1, 3);
echo $rest . "\n"; // mostra mér
$rest = substr("América", 0, -1);
echo $rest . "\n";// mostra Améric
$rest = substr("América", -2);
echo $rest . "\n";// mostra ca
?>
string
Uma string é uma cadeia de caracteres alfanuméricos.Declaração de strings.
Manipulação de strings
strpad
Preeenche uma string com outra string, dentro de um formato específico.string str_pad ( string entrada, int tamanho [, string complemento [, int tipo]])
Tipo de preenchimento pode ser:
STR_PAD_RIGHT = preenche com caracteres à direita);
STR_PAD_LEFT = preenche à esquerda
STR_PAD_BOTH = preenche em ambos os lados.
Exemplo:
<?php
$texto = "The beatles";
print str_pad($texto, 20) . "\n";
print str_pad($texto, 20, "*", STR_PAD_LEFT) . "\n";
print str_pad($texto, 20, "*", STR_PAD_BOTH) . "\n";
print str_pad($texto, 20, "*) . "\n";
?>
str_repeat
Repete uma string uma certa quantidade de vezes.string str_repeat ( string entrada, int quantidade)
Exemplo:
<?php
$txt = ".o000o.";
print str_string($txt, 5) . "\n";
?>
strlen
Retorna o comprimento da stringint strlen ( string entrada)
<?php
$txt = "o rato oreu a roupa do rei de roma";
print 'O comprimento é: ' . strlen($txt) . "\n";
?>
str_replace
Substitui uma string por outra em um dado contexto.mixed str_replace ( mixed procura, mixed subistitui, mixed contexto)
<?php
$txt = "o rato oreu a roupa do rei de roma";
print str_replace('Rato', 'leão', $txt;
?>
strpos
Encontra a primeira ocorrência de uma string dentro de outra.int strpos ( string principal, string procurada [, int offset])
<?php
$minha_string = "o rato oreu a roupa do rei de roma";
$encontrar = 'roupa';
$posicao = strpos($minha_string, $encontrar);
if ($posicao)
{
echo "String encontrada na posição $posicao";
}
else
{
echo "String não encontrada";
}
?>
4 de setembro de 2009
tecnologias para o desenvolvimento de aplicações móveis
Principais tecnologias para o desenvolvimento de aplicações móveis
1 Linguagens para dispositivos móveis
1.1 Jini
Paradigma: POO para coordenação de dispositivos;
A tecnologia Jini, da Sun Microsystems, é um framework de coordenação evoluído e adaptado de pesquisas acadêmicas e implementado especificamente para Java. Jini usa o termo federação para representar a coordenação entre dispositivos. Uma federação é uma coleção de dispositivos autônomos os quais podem tornar-se cientes uns dos outros e cooperar se for necessário. Um subsistema Jini contém serviços de consulta que mantêm informação dinâmica sobre dispositivos disponíveis. Esses serviços são a chave para o funcionamento adequado do sistema Jini.
1.2 Universal Plug and Play
Paradigma: POO para detectar dispositivos para se comunicarem entre si;
O Plug and Play Universal - UPnP, desenvolvido pela Microsoft, é um framework definido num nível mais baixo que o Jini. Embora seja considerado, em alguns aspectos, uma extensão do Plug and Play, que detecta automaticamente a existência de dispositivos novos no barramento de PCs, para o ambiente de redes, seu framework de implementação é muito diferente do Plug and Play. O UPnP trabalha basicamente com as camadas mais baixas dos protocolos de rede TCP/IP, implementando padrões nesse nível ao invés do nível de aplicação. Isto envolve a adição de protocolos adicionais ao conjunto de protocolos implementados nos dispositivos. Ao contrario do Jini, que focaliza na autonomia, o UPnP focaliza na padronização de protocolos específicos e a aderência dos fabricantes a estes novos padrões. Com a definição desses protocolos, o UpnP permite que os dispositivos construam suas próprias APIs que implementam esses protocolos, em qualquer linguagem ou plataforma que desejarem.
1.3 Android
Paradigma: POO para programar dispositivos com java e bibliotecas da google;
Google Android é um sistema operacional baseado em kernel Linux. Ele foi inicialmente desenvolvido pela Google e posteriormente pela Open Handset Alliance, ele permite os desenvolvedores escreverem software na linguagem de programação Java controlando o dispositivo via bibliotecas desenvolvidas pela Google. Ele suporta uma grande variedade de tecnologias de conectividade incluindo Bluetooth, EDGE, 3G, e Wi-Fi.
1.4 J2ME
Paradigma: POO para programar dispositivos portáteis com java e bibliotecas J2ME;
(Java 2 Micro Edition): Mantida pela Sun, J2ME é a plataforma Java direcionada para dispositivos com recursos de hardware e software limitados. É suportado pela grande maioria dos aparelhos, pois, basta que o aparelho possua uma JVM (Java Virtual Machine) que atenda as especificações da Sun instalada para que ele possa executar aplicativos na linguagem J2ME.
É uma plataforma gratuita, com diversas IDEs (Integrated Development Environment) disponíveis e a maior comunidade de desenvolvedores dentre as tecnologias aqui citadas. Sendo assim, é a plataforma mais popular e suportada pela maior quantidade e diversidade de aparelhos.
1.5 .NET
Paradigma: POO para programar dispositivos com C#;
Compact Framework: Plataforma nativa do sistema operacional Windows Móbile da Microsoft. O desenvolvimento de seus aplicativos é feito na linguagem C# utilizando a ferramenta Visual Studio, também da Microsoft.
Oferece um bom suporte ao desenvolvedor e é simples de se trabalhar devido às facilidades oferecidas pelo Visual Studio. Porém é suportada apenas por aparelhos que possuem o sistema operacional Windows Móbile. Apesar desta limitação, a quantidade de aparelhos com este sistema tem crescido consideravelmente e tende a continuar crescendo, tendo em vista a força e influencia da Microsoft.
1.6 Brew
Paradigma: POO para programar dispositivos com C++;
Brew C/C++ (Binary Runtime for Wireless Environment): O Brew, desenvolvido pela Qualcomm, é um sistema operacional e uma plataforma para desenvolvimento de aplicativos móveis na linguagem C/C++ através das ferramentas fornecidas pela Qualcomm, é a plataforma mais difundida entre os aparelhos CDMA.
Em 2003 a Qualcomm assinou um acordo com a Sun e anunciou suporte a Java que passou a fazer parte dos chips CDMA produzidos pela Qualcomm, incorporando então o suporte J2ME ao sistema operacional Brew. Mas veja bem, isso implica apenas que o Brew suporta aplicativos J2ME, ele funciona como uma JVM, mas a linguagem nativa do Brew continuou sendo o C/C++. Essa parceria foi feita por questões estratégicas, pois a Qualcomm percebeu que estava perdendo espaço para os sistemas que suportavam o J2ME.
1.7 iPhone
Paradigma: POO para programar dispositivos iphone com Objective C;
O iPhone, da Apple, possui sua própria plataforma de desenvolvimento e suporta apenas aplicativos desenvolvidos na linguagem Objective C, utilizando o iPhone SDK. O Objective C é uma linguagem orientada a objetos variante do C utilizada principalmente para desenvolver aplicativos para os sistemas da Apple, como o iPod, iPhone e o Mac OS.
Iniciar o desenvolvimento para iPhone é um pouco mais penoso e caro, pois além de ser uma linguagem que não está entre as mais comuns, é necessário ter um computador Mac ou um Macbook com o MAC OS instalado, pois o iPhone SDK não possui versões para Windows ou Linux. Porém, apesar do grande número de aplicativos existentes e do custo para iniciar o desenvolvimento, há uma crescente demanda por profissionais que desenvolvam para iPhone e tornar-se desenvolvedor iPhone pode ser um bom negócio.
1.8 Symbian
Paradigma: POO para programar dispositivos móveis com Symbian C++;
Symbian C++: Linguagem de desenvolvimento de aplicativos do sistema operacional Symbian da Nokia. É uma variante da linguagem C++, possuindo algumas adaptações para que possa ser suportado por dispositivos com recursos limitados que rodem o sistema Symbian S60 da Nokia.
É livre, sem custos para desenvolvimento, e utilizando-a é possível explorar todos os recursos do S60, porém, ficamos limitados aos aparelhos com S60 da Nokia. Seu desenvolvimento pode ser feito na IDE Carbide.c++ que é baseada no Eclipse.
SymbianOS é um sistema operacional muito versátil, permite o desenvolvimento de aplicativos em diversas linguagens como:
• Symbian C/C++
• JavaME
• FlashLite
• Perl
• Python
• Ruby
• Lua
• Acelarometer
1.9 Open C/C++
Paradigma: POO para programar dispositivos com Open C/C++;
Plataforma de desenvolvimento de aplicativos do sistema operacional Symbian S60 da Nokia. O Open C/C++ permite que desenvolvedores C/C++ que não tenham experiência com Symbian C++ possam desenvolver aplicativos para o S60 de forma fácil, em um ambiente mais familiar e sem ter que se aprofundar muito nas particularidades do Symbian S60. Também é uma plataforma livre, sem custos, porém, também está limitada a aparelhos com o S60 da Nokia.
1.10 Qt Software
Paradigma: POO para programar dispositivos com C++;
Qt Software: Plataforma de desenvolvimento de aplicativos desktop e aplicativos móveis da Nokia. Antiga Trolltech, foi adquirida pela Nokia em 2008 e teve o nome alterado para Qt Software. Utiliza a linguagem C++ para o desenvolvimento dos aplicativos e apresenta uma forte interface gráfica que visa facilitar o desenvolvimento de seus aplicativos, além disso, tem como princípios a reusabilidade do código e facilidade no desenvolvimento. É suportada pelos aparelhos com Symbian S60 da Nokia, por sistemas Linux embarcados e Microsoft Windows CE.
1.11 Python for S60
Paradigma: POO para programar dispositivos móveis com Python;
O Python é uma linguagem popular entre os desenvolvedores Web e agora pode ser utilizada para desenvolver aplicativos móveis para dispositivos com o Symbian S60 da Nokia. O desenvolvimento é feito utilizando a linguagem Python nas ferramentas disponibilizadas pela própria Nokia. Assim como o Symbian C++, o Open C/C++ e o Qt, os aplicativos ficam limitados a rodar nos aparelhos com S60 da Nokia. Alias, com exceção do Qt que também é suportado pelo Linux e pelo Windows CE.
1.12 Flash Lite
Paradigma: POO para programar dispositivos móveis com flash;
Plataforma para desenvolvimento de aplicativos móveis baseada na plataforma Flash e mantida pela Adobe. Seu desenvolvimento é feito na linguagem ActionScript utilizando a ferramenta Adobe Flash. Ainda é uma plataforma pouco explorada, apesar de que muitos desenvolvedores Web que trabalham com Flash já terem experimentado o Flash Lite. Até a data em que este artigo foi escrito era suportado por 188 aparelhos de diversos fabricantes e sistemas operacionais diferentes, como Symbian (S40, S60 e UIQ) e Brew.
2 diferenças entre o desenvolvimento de aplicações móveis e Desktop
2.1 Compatibilidade
É necessário definir em qual linguagem e para qual plataforma desenvolver.
Cada plataforma possui suas particularidades, suporta determinadas linguagens e possui um leque de aparelhos compatíveis. É importante ressaltar que estamos falando das linguagens e das plataformas que as suportam e não de sistemas operacionais, apesar de que os dois estão diretamente relacionados.
No mundo móvel predominam vários sistemas operacionais e todos eles possuem plataformas para desenvolvimento e execução de seus aplicativos. Algumas plataformas suportam mais de uma linguagem, como é o caso do Symbian que suporta as linguagens J2ME, Symbian C++, Python, etc.
2.2 Conectividade
É necessário um sistema de comunicação para o dispositivo móvel.
Destacando as principais características de Comunicação e Rede:
2.3 Poucos recursos de hardware
Dispositivos móveis possuem pouca capacidade de memória e processamento.
O desenvolvimento da tecnologia de portáteis é orientado, em parte, pelos telefones inteligentes, câmeras digitais, tocadores MP3 e PDAs. Este possuem pouca capacidade de memória, expandível por cartões e pendrives flash. Possuem pouco processamento e um teclado reduzido ou inexistente, substituído por um similar virtual, tela sensível ao toque (touchescreen), ou reconhecimento de voz e/ou escrita a mão.
Referências:
http://facamovel.wordpress.com/2009/07/30/em-qual-plataforma-desenvolver/
http://www.leopoldina.cefetmg.br/moodle/file.php/23/PFC/computacao_ubiqua.pdf
1 Linguagens para dispositivos móveis
1.1 Jini
Paradigma: POO para coordenação de dispositivos;
A tecnologia Jini, da Sun Microsystems, é um framework de coordenação evoluído e adaptado de pesquisas acadêmicas e implementado especificamente para Java. Jini usa o termo federação para representar a coordenação entre dispositivos. Uma federação é uma coleção de dispositivos autônomos os quais podem tornar-se cientes uns dos outros e cooperar se for necessário. Um subsistema Jini contém serviços de consulta que mantêm informação dinâmica sobre dispositivos disponíveis. Esses serviços são a chave para o funcionamento adequado do sistema Jini.
1.2 Universal Plug and Play
Paradigma: POO para detectar dispositivos para se comunicarem entre si;
O Plug and Play Universal - UPnP, desenvolvido pela Microsoft, é um framework definido num nível mais baixo que o Jini. Embora seja considerado, em alguns aspectos, uma extensão do Plug and Play, que detecta automaticamente a existência de dispositivos novos no barramento de PCs, para o ambiente de redes, seu framework de implementação é muito diferente do Plug and Play. O UPnP trabalha basicamente com as camadas mais baixas dos protocolos de rede TCP/IP, implementando padrões nesse nível ao invés do nível de aplicação. Isto envolve a adição de protocolos adicionais ao conjunto de protocolos implementados nos dispositivos. Ao contrario do Jini, que focaliza na autonomia, o UPnP focaliza na padronização de protocolos específicos e a aderência dos fabricantes a estes novos padrões. Com a definição desses protocolos, o UpnP permite que os dispositivos construam suas próprias APIs que implementam esses protocolos, em qualquer linguagem ou plataforma que desejarem.
1.3 Android
Paradigma: POO para programar dispositivos com java e bibliotecas da google;
Google Android é um sistema operacional baseado em kernel Linux. Ele foi inicialmente desenvolvido pela Google e posteriormente pela Open Handset Alliance, ele permite os desenvolvedores escreverem software na linguagem de programação Java controlando o dispositivo via bibliotecas desenvolvidas pela Google. Ele suporta uma grande variedade de tecnologias de conectividade incluindo Bluetooth, EDGE, 3G, e Wi-Fi.
1.4 J2ME
Paradigma: POO para programar dispositivos portáteis com java e bibliotecas J2ME;
(Java 2 Micro Edition): Mantida pela Sun, J2ME é a plataforma Java direcionada para dispositivos com recursos de hardware e software limitados. É suportado pela grande maioria dos aparelhos, pois, basta que o aparelho possua uma JVM (Java Virtual Machine) que atenda as especificações da Sun instalada para que ele possa executar aplicativos na linguagem J2ME.
É uma plataforma gratuita, com diversas IDEs (Integrated Development Environment) disponíveis e a maior comunidade de desenvolvedores dentre as tecnologias aqui citadas. Sendo assim, é a plataforma mais popular e suportada pela maior quantidade e diversidade de aparelhos.
1.5 .NET
Paradigma: POO para programar dispositivos com C#;
Compact Framework: Plataforma nativa do sistema operacional Windows Móbile da Microsoft. O desenvolvimento de seus aplicativos é feito na linguagem C# utilizando a ferramenta Visual Studio, também da Microsoft.
Oferece um bom suporte ao desenvolvedor e é simples de se trabalhar devido às facilidades oferecidas pelo Visual Studio. Porém é suportada apenas por aparelhos que possuem o sistema operacional Windows Móbile. Apesar desta limitação, a quantidade de aparelhos com este sistema tem crescido consideravelmente e tende a continuar crescendo, tendo em vista a força e influencia da Microsoft.
1.6 Brew
Paradigma: POO para programar dispositivos com C++;
Brew C/C++ (Binary Runtime for Wireless Environment): O Brew, desenvolvido pela Qualcomm, é um sistema operacional e uma plataforma para desenvolvimento de aplicativos móveis na linguagem C/C++ através das ferramentas fornecidas pela Qualcomm, é a plataforma mais difundida entre os aparelhos CDMA.
Em 2003 a Qualcomm assinou um acordo com a Sun e anunciou suporte a Java que passou a fazer parte dos chips CDMA produzidos pela Qualcomm, incorporando então o suporte J2ME ao sistema operacional Brew. Mas veja bem, isso implica apenas que o Brew suporta aplicativos J2ME, ele funciona como uma JVM, mas a linguagem nativa do Brew continuou sendo o C/C++. Essa parceria foi feita por questões estratégicas, pois a Qualcomm percebeu que estava perdendo espaço para os sistemas que suportavam o J2ME.
1.7 iPhone
Paradigma: POO para programar dispositivos iphone com Objective C;
O iPhone, da Apple, possui sua própria plataforma de desenvolvimento e suporta apenas aplicativos desenvolvidos na linguagem Objective C, utilizando o iPhone SDK. O Objective C é uma linguagem orientada a objetos variante do C utilizada principalmente para desenvolver aplicativos para os sistemas da Apple, como o iPod, iPhone e o Mac OS.
Iniciar o desenvolvimento para iPhone é um pouco mais penoso e caro, pois além de ser uma linguagem que não está entre as mais comuns, é necessário ter um computador Mac ou um Macbook com o MAC OS instalado, pois o iPhone SDK não possui versões para Windows ou Linux. Porém, apesar do grande número de aplicativos existentes e do custo para iniciar o desenvolvimento, há uma crescente demanda por profissionais que desenvolvam para iPhone e tornar-se desenvolvedor iPhone pode ser um bom negócio.
1.8 Symbian
Paradigma: POO para programar dispositivos móveis com Symbian C++;
Symbian C++: Linguagem de desenvolvimento de aplicativos do sistema operacional Symbian da Nokia. É uma variante da linguagem C++, possuindo algumas adaptações para que possa ser suportado por dispositivos com recursos limitados que rodem o sistema Symbian S60 da Nokia.
É livre, sem custos para desenvolvimento, e utilizando-a é possível explorar todos os recursos do S60, porém, ficamos limitados aos aparelhos com S60 da Nokia. Seu desenvolvimento pode ser feito na IDE Carbide.c++ que é baseada no Eclipse.
SymbianOS é um sistema operacional muito versátil, permite o desenvolvimento de aplicativos em diversas linguagens como:
• Symbian C/C++
• JavaME
• FlashLite
• Perl
• Python
• Ruby
• Lua
• Acelarometer
1.9 Open C/C++
Paradigma: POO para programar dispositivos com Open C/C++;
Plataforma de desenvolvimento de aplicativos do sistema operacional Symbian S60 da Nokia. O Open C/C++ permite que desenvolvedores C/C++ que não tenham experiência com Symbian C++ possam desenvolver aplicativos para o S60 de forma fácil, em um ambiente mais familiar e sem ter que se aprofundar muito nas particularidades do Symbian S60. Também é uma plataforma livre, sem custos, porém, também está limitada a aparelhos com o S60 da Nokia.
1.10 Qt Software
Paradigma: POO para programar dispositivos com C++;
Qt Software: Plataforma de desenvolvimento de aplicativos desktop e aplicativos móveis da Nokia. Antiga Trolltech, foi adquirida pela Nokia em 2008 e teve o nome alterado para Qt Software. Utiliza a linguagem C++ para o desenvolvimento dos aplicativos e apresenta uma forte interface gráfica que visa facilitar o desenvolvimento de seus aplicativos, além disso, tem como princípios a reusabilidade do código e facilidade no desenvolvimento. É suportada pelos aparelhos com Symbian S60 da Nokia, por sistemas Linux embarcados e Microsoft Windows CE.
1.11 Python for S60
Paradigma: POO para programar dispositivos móveis com Python;
O Python é uma linguagem popular entre os desenvolvedores Web e agora pode ser utilizada para desenvolver aplicativos móveis para dispositivos com o Symbian S60 da Nokia. O desenvolvimento é feito utilizando a linguagem Python nas ferramentas disponibilizadas pela própria Nokia. Assim como o Symbian C++, o Open C/C++ e o Qt, os aplicativos ficam limitados a rodar nos aparelhos com S60 da Nokia. Alias, com exceção do Qt que também é suportado pelo Linux e pelo Windows CE.
1.12 Flash Lite
Paradigma: POO para programar dispositivos móveis com flash;
Plataforma para desenvolvimento de aplicativos móveis baseada na plataforma Flash e mantida pela Adobe. Seu desenvolvimento é feito na linguagem ActionScript utilizando a ferramenta Adobe Flash. Ainda é uma plataforma pouco explorada, apesar de que muitos desenvolvedores Web que trabalham com Flash já terem experimentado o Flash Lite. Até a data em que este artigo foi escrito era suportado por 188 aparelhos de diversos fabricantes e sistemas operacionais diferentes, como Symbian (S40, S60 e UIQ) e Brew.
2 diferenças entre o desenvolvimento de aplicações móveis e Desktop
2.1 Compatibilidade
É necessário definir em qual linguagem e para qual plataforma desenvolver.
Cada plataforma possui suas particularidades, suporta determinadas linguagens e possui um leque de aparelhos compatíveis. É importante ressaltar que estamos falando das linguagens e das plataformas que as suportam e não de sistemas operacionais, apesar de que os dois estão diretamente relacionados.
No mundo móvel predominam vários sistemas operacionais e todos eles possuem plataformas para desenvolvimento e execução de seus aplicativos. Algumas plataformas suportam mais de uma linguagem, como é o caso do Symbian que suporta as linguagens J2ME, Symbian C++, Python, etc.
2.2 Conectividade
É necessário um sistema de comunicação para o dispositivo móvel.
Destacando as principais características de Comunicação e Rede:
- Comunicação serial – SLIP e PPP (via cabo e infravermelho) ;
- – API IrSock – suporte a comunicação infravermelha (via IrDA – Infrared Data Association)
- Conexões de Rede (protocolos da Internet e de troca de arquivos) ;
- – API WinInet (HTTP e FTP) ;
- – API WinSock (sockets que suportam TCP/IP)
- – RAS – Remote Access Service suporta upload/download de arquivos (via PPP para conectar no servidor)
- API Telephony – suporta comunicação via modem para um hospedeiro remoto;
2.3 Poucos recursos de hardware
Dispositivos móveis possuem pouca capacidade de memória e processamento.
O desenvolvimento da tecnologia de portáteis é orientado, em parte, pelos telefones inteligentes, câmeras digitais, tocadores MP3 e PDAs. Este possuem pouca capacidade de memória, expandível por cartões e pendrives flash. Possuem pouco processamento e um teclado reduzido ou inexistente, substituído por um similar virtual, tela sensível ao toque (touchescreen), ou reconhecimento de voz e/ou escrita a mão.
Referências:
http://facamovel.wordpress.com/2009/07/30/em-qual-plataforma-desenvolver/
http://www.leopoldina.cefetmg.br/moodle/file.php/23/PFC/computacao_ubiqua.pdf
Categorias:
atualidades
,
interface
,
Java
,
linguagens
,
padrões
,
projetos
,
sistema
,
TI
Nenhum comentário
:
Apostilas, livros, material didático
O Google acadêmico é um indexador de artigos científicos.
O google books é um indexador de livros e apostilas.
PDF Search é uma ferramenta de busca por apostilas e livros em pdf.
A Wikipédia é a maior enciclopédia do mundo, onde podemos editar e acrescentar artigos, organizá-los em livros e salva-lo em pdf, e agora podemos também encomendar a impressão como livro comum.
Universidades que disponibilizam material didático:
UNICAMP - Universidade de Campinas
UNISUL - Universidade Grande Florianólopis.
Contribua, acrescente um comentário com seu link.
Assinar:
Postagens
(
Atom
)


