Translate

10 de novembro de 2009

Java API - documentação

A API é uma biblioteca (coleção de classes) que desempenha as funções básicas de uma linguagem de programação, ela é essencial para implementar as funcionalidades que desejamos para nossa aplicação.

A biblioteca de classes (API java) está organizada em pacotes, por exemplo:
  • javax.swing - janelas para criar a interface de usuário com menus;
  • java.util - classes utilitárias;
  • java.math - cálculos matemáticos;
  • java.io - interações de entrada e saída;
Podemos introduzir nossas próprias classes e pacotes, criando nossa própria biblioteca reutilizando nossas funções em outros programas.

Para utilizar a API basta fazer o download da ultima versão, e mostrar o caminho de onde foi salvo para o IDE (editor de programas), assim podemos acessar as classes da biblioteca usando o comando import no início do código:
import java.util.arraylist;
import javax.swing.*;
public class minha {

A melhor maneira de conhecer todo o potencial de uma linguagem de programação é ler a documentação de sua API, que em java está disponível no seu site oficial (em inglês):
http://java.sun.com/javase/6/docs/api/

Introdução à C. da Computação com Java e Orientação a Objetos

O livro evoluiu da experiência dos autores no ensino da disciplina de Introdução à Ciência da Computação ministrado no Instituto de Matemática e Estatística da Universidade de São Paulo. Suas características principais são um estilo informal e o uso, desde a primeira aula, de conceitos de Orientação a Objetos.

Este livro já foi adotado como livro-texto da disciplina introdutória de Computação para alunos do Bacharelado em Ciência da Computação, Bacharelado em Matemática, Licenciatura em Matemática, Bacharelado em Sistemas de Informação, Bacharelado em Física e Licenciatura em Física da USP.

Para baixar o livro clique em IntroCCcomJavaeOO.pdf

Alguns exemplos de código-fonte em Java podem ser encontrados em nossa pasta de Exemplos.
Professores: os arquivos para a produção do Teatro de Objetos estão disponíveis neste site.

Referência:
http://introjava.incubadora.fapesp.br/portal

5 de novembro de 2009

TIOBE - ranking das linguagens mais usadas

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

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.

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

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:
# Exemplo de programa em Python
# 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
Saída:
Baixo
Bateria
Guitarra
Bytecode
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

Analise os pré-requisitos com foco em programação:

Analise os pré-requisitos com foco em matemática e Hardware:


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;
          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;

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;

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

import java.awt.*;

public abstract class Forma {
   
    protected Graphics contextoGrafico;
   
    public abstract void exibir();
   
    public void setContextoGrafico(Graphics g) {
        contextoGrafico = g;
    }
   
}
Ponto.java
public class Ponto extends Forma {
    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;
    }
   
}
Retangulo.java
public class Retangulo extends Forma {
    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);
    }   
}
Elipse.java
public class Elipse extends Forma {
    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);
    }   
}
Poligono.java
public class Poligono extends Forma {
    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);
    }   
}
Tela.java
import java.awt.*;
import java.util.ArrayList;

public class Tela extends Frame {

    private ArrayList formas;
   
    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();
        }
    }
}
ProgramaPrincipal.java
public class ProgramaPrincipal {
    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();
       
    }
}
Testado na IDE Eclipse.
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 strings
Concatenaçã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 string

int 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:

  •  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

Apostilas, livros, material didático

No Ebah encontramos muitos arquivos compartilhados pelo meio acadêmico, e podemos também facilmente compartilhar não só arquivos, como também fóruns, links, comunidades, etc.
No Scribd podemos não só compartilhar arquivos como também visualizá-los no próprio site.

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.

O Wikilivros é uma Wiki onde podemos editar e acrescentar livros sobre qualquer coisa.
A Wikiversidade é uma Universidade virtual onde podemos editar e acrescentar cursos.

Universidades que disponibilizam material didático:
UNICAMP - Universidade de Campinas
UNISUL - Universidade Grande Florianólopis.

Contribua, acrescente um comentário com seu link.

28 de agosto de 2009

Computação nas nuvens - cloud computing

Computação nas nuvens - é o novo paradigma de computação que consistem em virtualizar os recursos do computador, tornando acessível através da internet não só arquivos, mas também programas, sistema operacional, tudo!

Principais propostas:
  • Com o advento da internet rápida podemos hospedar em servidores os arquivos, programas, etc;
  • podemos usar Sitemas Operacionais da internet, já com nossos programas preferidos;
  • baratemento do computador, pois algumas peças como o HD passa a ser desnecessário;
  • nem o computador é mais necessário, pois como tudo está na internet, podemos acessá-la via celular, televisão, vídeo-game!
  • popularização da informática e da internet, já que serão mais acessíveis e mais baratos;
  • mais espaço para as pequenas empresas na internet, pois teremos muitas opções, não ficando dependente dos grandões com seus programas que só funcionam nos seus sistemas;
  • o futuro é o acesso universal com a internet mais presentes e acessível.
fonte: G1 computação nas nuvens

Criando páginas com PHP e mysql

PHP é uma linguagem de programação interpretada, livre e muito utilizada para gerar conteúdo dinâmico na internet, também pode criar aplicativos desktop. É uma linguagem segura pois todo o código é executado no servidor, que manda somente código HTML para o cliente.
Por ser interpretada não usa compilador, usa o paradigma de orientação a objetos, é muito flexível e está em constante atualização.

Características:
Exemplo:
<?php
// isso e um comentario
include('code.php'); // Inclui e executa um trecho opcional de código
echo 'abc'; /* Escrever abc */
print 'abc'; /* Realiza o mesmo que que 'echo' */
$x = 2; # Variáveis
if ($x >= 1 && $x < 3) {
// se a variavel $x for maior ou igual a 1 E menor que 3
echo 'Olá mundo!'; // escreve "Olá mundo!"
} else { // Se não.
print('Adeus mundo!'); // escreve 'Adeus mundo!'
}
?>
Para executar o código PHP precisamos configurar o servidor, podemos configurar facilmente nosso computador como servidor para testar os códigos antes de enviar para um servidor na internet. Para isso podemos usar um kit Xampp que inclui:  PHP, servidor Apache, bando de dados MySQL, etc.

O XAMPP é fácil para instalar a distribuição apache contendo PHP, MySQL e Perl. O XAMPP é realmente muito fácil instalar e usar – é necessário apenas baixar, extrair e inicializar.

Como fazer:
Depois de escolher sua versão para Windows, Linux ou Mac;
  1. instale conforme as instruções da página do Xampp;
  2. Inicialize o Xampp conforme instruções para o seu sistema: linux, windows;
  3. Teste digitando no navegador  http://localhost
  4. Encontre a pasta htdocs que está dentro da pasta do Xampp, é ela que é acessada quando digitamos localhost no navegador;
  5. Crie uma pasta para seus arquivos dentro da pasta htdocs, exemplo meusphp;
  6. Com um editor de textos salve o seu código php, na pasta criada, com a terminação .php, assim minhapagina.php;
  7. Visualize sua página acessando http://localhost/meusphp/ , será exibida uma lista com os arquivos colocados na pasta criada dentro de htdocs.
Parece complicado? Não se preocupe, isso é necessário somente na primeira vez, para agilizar o processo podemos usar um IDE (Ambiente de Desenvolvimento Integrado):
Netbeans,PHP Designer , ou EasyPHP 2.0b1
Sugiro o Netbeans, por está disponível para todos os sistemas, por ser gratuito e expandível com plugins para outras linguagens, outras funções, etc.

Pesquisa:
Livro de PHP, Revista PHP, Tutorial PHP TI expert, PHP na wikipédia, prof. Hudson Costa, php no Imasters

Criando aplicativos C++

Para criar um aplicativo com C++ usaremos um compilador que transforma o código fonte em código binário, conheceremos a estrutura básica do código com seus comandos e classes.

C++ é uma linguagem de programação de alto nível com facilidades para o uso em baixo nível, multiparadigma e de uso geral. Desde os anos 90 é uma das linguagens comerciais mais populares, sendo bastante usada também na universidade por seu grande desempenho e base de utilizadores.

Vantagens
  • Produção de código o quanto mais eficiente possível.
  • Possibilidade em programação de alto e baixo nível.
  • Alta flexibilidade, portabilidade e consistência.
  • Adequado para grandes projetos.
  • Ampla disponibilidade e suporte, devido principalmente à grande base de desenvolvedores.
  • Não está sob o domínio de uma empresa (em contraste do Java — Sun ou Visual Basic — Microsoft).
  • Padronização pela ISO.
  • Grandes possibilidades para a metaprogramação e programação genérica.
  • Compatilidade com C, resultando em vasta base de códigos.
 Exemplo de um programa básico:
 //O primeiro programa em C
  /*Adaptado do programa original do livro The C Programming Language
  de autoria de Ken Thompson e Dennis Ritchie */
  #include <stdio.h>
  int main (void){
  printf ("Ola! Mundo.");
   return (0);
  }
 Analisando:

//  = Comentário de uma linha
/* = Comentário de
    várias linhas */
#include = inclui uma biblioteca com rotinas, funções, comandos...
{ = indica o início de um bloco de comandos
int main (void) = main é a rotina/função principal de todos os programas em C, nos parêntesis ficam os parâmetros - valores que são passados entre funções.
printf = indica uma mensagem que será exibida;
return = indica um valor de retorno para outra função;
; = indica o fim de um comando;
} = indica o fim de um bloco de comandos.

Agora basta salvar num editor de textos e chamar o compilador adequado. Para facilitar na fase de edição e compilação podemos usar uma IDE (Ambiente de Desenvolvimento Integrado), que auxilia mostrando erros, completando códigos, controle e manutenção, compilação, etc.

IDEs sugeridas:
DEV C++ = sugerido para iniciantes, mais simples e básico.
Code::Blocks = Continuação do DEV, é expandível com plugins.
Net Beans = expandível com plugins e atende as principais linguagens.

Para saber mais consulte:
C++ na Wikipédia, Tutorial C++ na TI Expert, Laboratório com prof. Cláudio.