Translate

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.