Mostrando postagens com marcador aprendizado. Mostrar todas as postagens
Mostrando postagens com marcador aprendizado. Mostrar todas as postagens

23 setembro 2014

Iniciando em programação de forma divertida: code.org

Uma das coisas que mais gosto de fazer é ensinar a programação as pessoas. Imagine então, quando você encontra um site que tem esse propósito? :) O site code.org tem essa ideia e oferece uma oportunidade para aprender a programação, porém, de forma lúdica, ou seja, divertida.



Esse video acima mostra vários profissionais e pessoas conhecidas que falam da importância de aprender a programação. Eu já falei aqui no blog do porque isso é relevante [O que aprendi com a programação hoje: dia 6 - por que programar?], e não é somente eu quem está dizendo.

Estou utilizando o site do code.org para estimular alunos a gostarem da programação. Muitas vezes aprender a programar não é uma tarefa fácil para alunos, e nem para quem ensina. Mas quando tornamos o processo mais divertido: porque ELE pode SER assim, há bons resultados.



O vídeo acima demonstra um exemplo do que você pode encontrar no site indicado neste post.



Certificado de sucesso.
Ao final dos módulos, quando supera os desafios, você ganha o certificado e vai se sentir estimulado ir em frente ainda mais. :)

20 setembro 2014

O que aprendi com a programação hoje: dia 11 - liderando um time

Esse post faz parte de uma série: o que aprendi com a programação, e tudo começou no dia 1

Por mais técnico que possa parecer, a programação lhe permite aprender e exercitar aspectos que não são necessariamente técnicos, aprendizados que só se aprende fazendo, vivenciando o dia a dia: trata-se da liderança.

Como é liderar um time de desenvolvimento de software? Não existe uma resposta simples, mas me arrisco a falar um pouco do que estou aprendendo com essa experiência atual. Ouça o "carcast" 4 e tire as suas próprias conclusões.



Links citados no podcast:

- O Monge e o Executivo: https://www.youtube.com/watch?v=57t8MAYErqI
- Palestra sobre liderança na atualidade: http://pt.slideshare.net/mcmoraescosta/liderana-na-atualidade

03 setembro 2014

O que aprendi com a programação hoje: dia 6 - por que programar?

Esse post faz parte de uma série: o que aprendi com a programação, e tudo começou no dia 1.

Hoje vou lembrar um aprendizado antigo, mas que continua me inspirando até hoje: a importância da programação. Foi após perceber que pela programação, através do seu processo intrínseco de criação, vários estímulos criativos são ativados em nossa mente, desafiando nossa imaginação e nos motivando a decifrar um problema.

Governo Britânico adota programação no currículo básico
O problema em questão é similar a um quebra-cabeças, nos desafia em certa medida, a ponto de tornar esse desafio uma coisa potencialmente promissora de se exercitar. É como praticar um esporte, quanto mais se faz, mais se desperta interesse a medida que ganhamos algo com isso. Na programação se usam muitos neurônios, talvez por isso que o café é bastante popular.

E se você pensa que isso é papo de programador, o que justifica alguns governos da Europa (britânico por exemplo), adotarem o ensino da programação tornando-a parte do currículo básico na formação educacional? Não é de hoje que isso vem acontecendo lá na Europa.

Vou mostrar alguns argumentos para tentar justificar a importância e necessidade de usar a programação agora.

O uso dos computadores, celulares e dispositivos eletrônicos em geral estão se tornando cada vez mais populares, pois são utilizados para diversos propósitos, tais como nas áreas do entretenimento, finanças, lazer, comunicação, etc. Os aplicativos assumiram um papel relevante para as pessoas.

A demanda por software tem alcançado níveis gigantescos. A área do conhecimento que contribui para agrupar os diferentes níveis do software é a programação. O profissional programador tem um papel relevante na criação do software e para tal requer conhecimentos de lógica de programação e algoritmos, além de compreender o uso das linguagens de programação.

A programação é considerada por especialistas da educação como uma extensão da língua, pois permite ao aprendiz desenvolver o raciocínio de forma sistemática e lógica, motivando a construção de relações com os outros campos do conhecimento humano. Escrever código engaja as pessoas em um novo caminho do pensamento. Elas aprendem a organizar, refinar e refletir sobre suas ideias.

As habilidades de programação permitem aos alunos "escreverem" novos tipos de coisas/pensamentos/conhecimentos - estórias interativas, jogos, animações e simulações. Consequentemente, há cada vez mais demandas da sociedade por pessoas ou profissionais que saibam "mexer"/programar com a criação de software.
No processo de aprender a codificar os programas os alunos aprendem muitas outras coisas. Eles não aprendem apenas a codificar, eles estão codificando o aprendizado. Aprendendo matemática e ideias computacionais (como variáveis e condicionais), eles estão aprendendo estratégias para resolver problemas, criando projetos e comunicando ideias. Essas habilidades são uteis não apenas para cientistas da computação, mas para qualquer um, independente da idade, conhecimentos prévios ou ocupação.
Esses foram apenas alguns dos argumentos que eu posso citar. Imagine quantas pesquisas estão sendo feitas e quanto potencial e demanda existe?

Uso de linguagens por idade e experiência (fonte)

Essa pesquisa mostra quais as linguagens estão sendo usadas, para quais grades escolares e para qual faixa de idade estão sendo usados para o ensino da programação. Não é legal?

Se você tem ouvidos e olhos,  veja com os próprios esses dois vídeos. O primeiro é de um garoto que foi apresentar no TED a sua experiência com a programação. O segundo é um depoimento de Bill Gates sobre coisas que não lhe dizem na escola.


A importância de aprender a programar




11 coisas que não se aprende na escola




13 setembro 2012

Mudanças de perspectivas em aplicações Android: evite recriar a Activity

Usuários de aplicativos em geral podem requerer mudar a orientação do aparelho para visualizar melhor os conteúdos sendo exibidos na tela. Dependendo do que está sendo visto é comum girar a orientação da tela para o sentido horizontal (landscape) ou sentido vertical (portrait).

(1) Tela em modo Portrait


Em aplicações Android e iOS (smartphones e tablets) é comum implementar telas que vão funcionar em diferentes perspectivas de orientação de tela. No entanto, programadores de Android precisam estar atentos que quando ocorrem mudanças de orientação no aplicativo, o comportamento padrão do Android recria a Activity em execução, chamando os métodos do ciclo de vida: onPause(), onStop(), onDestroy(), para em seguida chamar o método onCreate() novamente, além dos métodos do ciclo de vida: onStart() e onResume().



Problema / Solução
Se a tela atual da sua aplicação apenas desenha elementos visuais sem obter dados de fontes custosas (para memória em geral ou uso da Internet para baixar os dados), então esse procedimento padrão do Android não será um problema. Contudo, caso sua Activity requeira dados da internet ou algum outro tipo de esquema de processamento “mais pesado” para ser realizado, talvez seja necessário evitar recarregar a instância da Activity, mantendo o estado dos objetos carregados na memória. Desta forma podemos evitar consultar a rede novamente, além de otimizar o uso do processamento do aparelho, melhorando o consumo da bateria. :)

Esse comportamento pode ser realizado de 2 formas: (que eu conheço)
  1. Salvar os dados atuais (o estado atual) utilizando o mecanismo do ciclo de vida da Activity do Android, através dos métodos onSaveInstanceState(bundle) para salvar, e o onRetainNonConfigurationInstance() para recuperar os dados do estado atual;
  2. Alterar o comportamento default do Android, descrito acima, evitando que a Activity seja automaticamente recriada. Desta forma o Android apenas irá notificar Activity que ocorreu uma mudança de orientação, através do método onConfigurationChanged(Configuration c).
Neste post vou mostrar como podemos implementar abordagem (2), ou seja, como evitar que o Android recrie Activity do ciclo de vida do aplicativo.

Essa dica eu encontrei no site oficial do desenvolvedor Android. Está neste link: Handling Runtime Changes: http://developer.android.com/guide/topics/resources/runtime-changes.html

Vou descrever passo a passo:

Passo 1: altere o arquivo AndroidManifest.xml conforme o exemplo abaixo adicionando a propriedade chamada (android:configChanges="orientation|screenSize") da sua Activity:



    

    
        
            
                

                
            
        
    



Passo 2: implementar no código Java da sua Activity o método conforme exemplo:
package br.com.blogspot.profdouglas.dicas3.orientationchange;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

public class OrientationChange extends Activity {

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_orientation_change);

  Log.d("DOUGLAS", "OrientationChange.onCreate");

  TextView orientationTextView = (TextView) findViewById(R.id.orientationTextView);

  // detect the current orientation
  int currentOrientation = getResources().getConfiguration().orientation;

  if (currentOrientation == Configuration.ORIENTATION_LANDSCAPE) {
   // setting orientation landscape
   orientationTextView.setText(R.string.orientation_landscape);

  } else if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) {
   // setting orientation portrait
   orientationTextView.setText(R.string.orientation_portrait);
  }

 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.activity_orientation_change, menu);
  return true;
 }

 @Override
 protected void onStart() {
  super.onStart();
  Log.i("DOUGLAS", "OrientationChange.onStart");
 }

 @Override
 protected void onResume() {
  super.onResume();
  Log.i("DOUGLAS", "OrientationChange.onResume");
 }

 @Override
 protected void onStop() {
  super.onStop();
  Log.i("DOUGLAS", "OrientationChange.onStop");
 }

 @Override
 protected void onPause() {
  super.onPause();
  Log.i("DOUGLAS", "OrientationChange.onPause");
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
  Log.i("DOUGLAS", "OrientationChange.onDestroy");
 }

 /**
  * Caution: Beginning with Android 3.2 (API level 13), the "screen size"
  * also changes when the device switches between portrait and landscape
  * orientation. Thus, if you want to prevent runtime restarts due to
  * orientation change when developing for API level 13 or higher (as
  * declared by the minSdkVersion and targetSdkVersion attributes), you must
  * include the "screenSize" value in addition to the "orientation" value.
  * That is, you must decalare
  * android:configChanges="orientation|screenSize". However, if your
  * application targets API level 12 or lower, then your activity always
  * handles this configuration change itself (this configuration change does
  * not restart your activity, even when running on an Android 3.2 or higher
  * device).
  */
 @Override
 public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  Log.d("DOUGLAS", "MainActivity.onConfigurationChanged");

  TextView orientationTextView = (TextView) findViewById(R.id.orientationTextView);

  if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
   Log.i("DOUGLAS",
     "MainActivity.onConfigurationChanged (ORIENTATION_PORTRAIT)");
   // setting orientation portrait
   orientationTextView.setText(R.string.orientation_portrait);

  } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
   Log.i("DOUGLAS",
     "MainActivity.onConfigurationChanged (ORIENTATION_LANDSCAPE)");
   orientationTextView.setText(R.string.orientation_landscape);
  }
 }

}


Observe o javadoc que deixei para que você entenda porque a propriedade do manifest precisou utilizar dois valores. A figura (2) demonstra o log (da view LogCat) demonstrando que a Activity não foi recriada, mas o método onConfigurationChanged foi notificado.

(2) Tela em modo Landscape sem recriar a Activity após mudar orientação


Conclusão
Ao executar seu aplicativo agora, quando ocorrer mudanças de orientação de tela sua Activity não será recriada e o método onConfigurationChanged será automaticamente notificada a cada mudança de orientação. 

Como sugestão, caso queira fazer algo específico para cada modo de orientação, pode-se usar a lógica da condição implementada no método, que atualmente possui instruções com logs. Dependendo do cenário no qual seu aplicativo está sendo usado, essa dica pode ser útil para você.

Assim que possível vou fazer uma vídeo aula sobre isso também e colocar aqui. O código fonte do exemplo do projeto pode ser baixado aqui.



14 agosto 2012

Criação de Janelas Gráficas (GUI) com NetBeans (sobre a série vídeo aulas)

Neste post comento da série que chamei de Curso Básico de Criação de Janelas Gráficas (GUI) com NetBeans, que foi produzido um total de 10 vídeo aulas, contabilizando 2h:12m:30s de conteúdos para o YouTube, inteiramente gratuito.  No final deste post tem o link para baixar o código fonte.



Foi a minha primeira experiência na produção de vídeos para a internet e creio que aprendi muito. Recebi vários feedbacks de pessoas que nem conheço, no qual fico muito agradecido e motivado a tentar melhorar. Tenha certeza que nos próximos vídeos eu levarei em consideração as dicas sugeridas nos comentários de vocês, bem como espero contribuir cada vez mais nesta iniciativa.

Meus agradecimentos a todos que contribuem e contribuíram. Lembrem-se que é ajudando que se é ajudado, não é mesmo? :)

Um pouco sobre a série... 

Esta série de vídeo aulas objetiva ajudar alunos da disciplina de Programação Orientada a Objetos entender como criar janelas visuais usando NetBeans.

Endereço da série no canal do YouTube (com os 10 vídeos):
http://www.youtube.com/playlist?list=PLEA1EF325BD74F0E7

Endereço para baixar o projeto completo (versão do NetBeans 7.1.2 ou superior):
https://sites.google.com/site/douglasfrari/arquivos/SistemaCadastroProdutos.zip


17 maio 2012

8 ANOS como programador++

Hoje é um dia especial para mim. Estou completando 8 anos trabalhando na empresa mais legal do mundo (C.E.S.A.R). E se você pensa que estou exagerando é porque não sabes como me sinto em relação a isso!

Pois bem. Vou expressar aqui com minhas próprias palavras um pouco o porquê digo isso:

Em 11 de agosto de 2008 eu publiquei esse post:
A motivação no dia a dia: seja lá qual o seu trabalho...

Em 10 de setembro de 2009, publiquei um post:
Aviso de defesa de dissertação de mestrado (CIn/UFPE)

Em 30 de novembro de 2010, postei:
C.E.S.A.R vence Prêmio Finep 2010

No dia primeiro de março de 2011 estava bem resolvido com o Amor, então escrevi:
Feito amor

Em 29 de setembro de 2011, escrevi:
Caminho para ensinar programação ! ?

No ano de 2012, no dia 17/02/2012:
O Programador Pragmático (The Pragmatic programmer)

Recentemente, produzi e estou ainda produzindo coisas diferentes, como:
Curso Básico Criação Janelas Gráficas (GUI) com NetBeans (no YouTube)


E que tal trabalhar enquanto escuto um Podcast de empreendedorismo Nerd?


Onde eu estava quando fazia tudo isso (quase ao mesmo tempo)? 
Eu estava trabalhando na melhor empresa do mundo. Eu estou na empresa que me proporciona desafios aos problemas relevantes (alguns nem tantos), mas são SEMPRE bons PROBLEMAS para resolver. Só preciso torná-los úteis para aprender com eles

Conheça o C.E.S.A.R e venha trabalhar aqui!





Então, como vejo no geral a rotina


import java.util.ArrayList;

/**
 * 
 * @author Douglas Frari
 */
public class DiaADiaCesar {
    
    // as oportunidades sao compartilhadas
    public static ArrayList listaOportunidades = 
            new ArrayList();
    
    public static void main(String[] oportunidades) {
        
        if (oportunidades!=null && oportunidades.length > 0) {
            // estou VENDO oportunidades para aprender
            for (int i = 0; i < oportunidades.length; i++) {
                listaOportunidades.add(new Oportunidade(oportunidades[i]));                   
            }
        }
        
        // bater ponto de entrada no CESAR
        int horasProdutivas = 7;
        int horasInterativas = 1; // as vezes mais ou menos
        boolean queroContinuarTrabalhando = true;
        
        do {            
            
            fazerOquePrecisaSerFeito(horasProdutivas); // foco no problema
        
            interagirComPessoas(horasInterativas); // interações com colegas
        
            // 1 hora = 3 600 000 milisegundos
            Thread.sleep(3600000); 

            // o tempo passou ...
            horasProdutivas--;
            horasInterativas--;
            
            queroContinuarTrabalhando = vouContinuarMaisUmTempoTrabalhando();
            
        } while (queroContinuarTrabalhando);
        
        
        // bater ponto de saída / hora de sair da empresa
        
        if (listaOportunidades.size() > 0) {
            
            // que aprendizados eu tive hoje?
            // o que eu fiz de legal hoje?
            // como farei para resolver o problema?
            
            // etc.
            
        }
        
    }
    
}

Como vou iniciar o programa? 

 #java DiaADiaCesar oportunidade1 oportunidade2 oportunidadeX 

Cada um cria as suas próprias oportunidades ou não. Mas se criá-las, sei que no final terei aprendido melhor e isso me dá motivação extra para fazer muitas outras coisas que tenho vontade.

29 setembro 2011

Caminho para ensinar programação ! ?

Neste post comento um pouco sobre um e-mail que recebi de umas das listas que faço parte (alg-prog-l@sbc.org.br) e que achei interessante o questionamento:

"Amigos, boa tarde!!!
Gostaria muito da ajuda de você com relação a lógica de programação.
Qual parte da matematica se faz necessário para treinar o nosso cerebro a ter raciocino lógico? só com a lógica de programação conseguimos isso?
Os colegas poderiam me indicar materiais, dicas, livros, locais para pesquisa.

Estou muito interessado na area.
"
Aprenda a programar brincando. :)


Essa pergunta me fez pensar e então resolvi responder para essa lista divulgando um pouco do que já aprendi por aí - com pouco de experiência para compartilhar com vocês...

Qual o caminho para ensinar programação?
Não tem um caminho único. O que importa, talvez seja há vontade de ajudar os outros a aprenderem.

Como desenvolvedor de software e professor de programação, trabalhei um ano ensinando algoritmos na faculdade e posso lhes dar umas pequenas dicas:

  1. Desenvolver a Lógica de Programação no alunado requer acima de tudo exercitar práticas para dar ordem ao computador de forma que ele entenda através de algoritmos. Praticar numa linguagem real ajuda, mas é preciso focar menos na linguagem e mais no desenvolvimento das competências básicas de algoritmos);
  2. Fazer o aluno praticar usando um simulador ou linguagem real;
  3. Use uma ferramenta que possa motivar os alunos, ao mesmo tempo que lhes permitam exercitar os conceitos. Sugiro utilizar a ferramenta Scratch http://scratch.mit.edu/  (tive uma experiência muito gratificante);
  4. Existem N caminhos para resolver os problemas e desafios na programação (assim como na vida), deixar claro que o objetivo final é fazer funcionar (o computador precisa obedecer o que lhe foi mandado), o caminho ideal é aquele que trás resultados positivos;
  5. Trabalhe na perspectiva que faça o aluno exercitar a construção do algoritmo para determinado problema (dos mais simples aos mais complexos), e principalmente, ter em mente que a maneira do aluno não é melhor e nem pior que a sua. O algoritmo que será construído é válido de qualquer forma, uma vez que a solução final atenda os requisitos esperados (muitas vezes avaliados de forma subjetiva pelos usuários e clientes).

enfim...apenas algumas dicas de quem sabe ensinar na prática e na teoria. Mas as vezes nada disso funciona e precisamos nos re-inventar no ensino. :)

Segundo Leonardo Boff, o conhecimento é muito importante, mas o essencial é não perder a capacidade de aprender.

09 setembro 2011

Como desenvolver as competências de Programação?

Fiquei pensando na pergunta acima e me ocorreram vários pensamentos. Acredito que muitos estudantes de programaçaõ são esforçados e têm muita vontade de aprender. Mas para aprender programação é necessário praticar muito.

O que é uma função? Qual a diferença de váriavel local e global? Etc. Os conceitos são iguais para todas as linguagens de programação. Então o que muda? Muda apenas a sintaxe. Cada linguagem usa sua linguagem própria.

O aprendiz deve estudar usando um bom material de apoio; Indico o livro Java Como Programar[1], Use a cabeça Java[2] e Apostilas FJ-11[3] e materiais do JEDI[4].

Também acredito que TODOS podem superar suas dificuldades em programação. Então AGORA comece com a PRÁTICA e a se preocupar com as PERGUNTAS, pois são elas que irão decidir o seu caminho RUMO ao desenvolvimento das COMPETÊNCIAS.

Por fim, entendo que é necessário, antes de QUERER aprender, ESCOLHER APRENDER. Sem essa escolha não adianta. Procure motivar-se e tente encontrar animo para estudar. PRECISA ESTUDAR PARA VALER. LER e questionar, praticar cada coisa que não entende.
 
PENSEM nas pessoas que estão apoiando suas escolhas e que gostam de vocês. Será que você está levando os estudos a sério? TIRE energia e dê a volta por cima.

LEIAM também:




Referências:

12 abril 2010

Usando ARRAY em Java para cadastro de clientes

Existem várias possibilidades para o uso de arrays. Elaborei um exemplo para demonstrar a utilização aplicando sobre um cadastro de clientes. Objetivo deste exemplo é mostrar uma maneira de utilizar array com Java.


Para saber o que é um array veja a definição da Wikipédia sobre array. Os principais pontos que devem ser observados para entender o uso de Array em Java na minha opinião são:
  • Um array em Java precisa ser declarado usando os colchetes ( [ ] );
  • O caso mais comum do uso de array requer que este seja inicializado (alocar memória) e neste momento, deve-se informar o seu tamanho; Ex. String[] listaClientes = new String[quantidade];
  • Para acessar os dados do array basta usar os colchetes, seguido por seu índice. Ex. listaClientes[i] = JOptionPane.showInputDialog("Nome do cliente "+(i+1));
  • Quando um array for criado na memória ele será inicializado com valores default do tipo de dados conforme o tipo de sua declaração. Ou seja, um array de tipo String terá valor null em cada elemento disponível até que seja atribuído outro valor String. Se for tipo primitivo int, o valor default é 0 (zero) para cada elemento; float será 0.0 e assim sucessivamente;
  • Para determinar o tamanho do array de forma dinâmica devemos usar o atributo length. Ex. listaClientes.length
  • Para recuperar os valores devemos usar o seu índice. Veja a ilustração acima. Ex. listaClientesTemporario += listaClientes[i] + "\n"
O programa a seguir utiliza um exemplo para cadastrar clientes e recuperar os seus dados cadastrados na memória. Tentei levar em consideração todos os pontos mencionados.




 

import javax.swing.JOptionPane;

/**

* Esse programa visa exemplificar a utilização de array, aplicando sobre um

* cadastro de clientes.

*

* @author Douglas Daniel Del Frari

*/

public class CadastroClientes {

// array de clientes

private static String[] listaClientes;

private static String menu = "CADASTRO CLIENTES\n\n" +

"1 --> Cadastrar clientes\n" +

"2 --> Listar clientes\n" +

"3 --> Sair";

/**

* Método inicial das aplicações Java SE

* @param args argumentos opcionais

*/

public static void main(String[] args) {

// escolha do usuario

String opcao = "";

do {

opcao = JOptionPane.showInputDialog(menu);

if (opcao.equals("1")) {

// cadastrar clientes

cadastrarClientes();

} else if (opcao.equals("2")) {

// listar clientes

listarClientes();

}

} while (!opcao.equals("3")); // comparacao usando String

} // fim do main

/**

* Lista os clientes cadastrados no ARRAY.

*/

private static void listarClientes() {

if (listaClientes!=null) {

// acumula a listagem numa variavel local

String listaClientesTemporario = "Lista de Clientes \n\n";

for (int i = 0; i < listaClientes.length; i++) {

listaClientesTemporario += listaClientes[i] + "\n";

}

// exibe na tela a listagem de clientes

JOptionPane.showMessageDialog(null,listaClientesTemporario);

} else {

// se nao tiver clientes o ARRAY será null, entao pode-se tratar com

// uma mensagem personalizada.

JOptionPane.showMessageDialog(null,

"É necessário realizar cadastro de clientes primeiro");

}

}

/**

* Esse metodo cadastra os usuarios na quantidade

* informada pelo usuario.

*/

private static void cadastrarClientes() {

// utiliza o metodo showInputDialog para perguntar a quantidade e

// converte o valor de String para inteiro e armazena na variavel

// local quantidade.

int quantidade = Integer.parseInt(JOptionPane

.showInputDialog("Quantos clientes deseja cadastrar?"));

// inicializa o ARRAY com tamanho informado pelo usuario

listaClientes = new String[quantidade];

// percorre todo tamanho do ARRAY e cadastra seus elementos

for (int i = 0; i < quantidade; i++) {

listaClientes[i] = JOptionPane.showInputDialog("Nome do cliente "+(i+1));

}

JOptionPane.showMessageDialog(null, "Clientes cadastrados");

}

} // fim da classe



Considerações
Observe que o exemplo propõe utilizar uma variável global (atributo listaClientes) que é um tipo array de String. Isto porque utilizou-se métodos que são utilizados forá do escopo do método principal (main). Além disso, propomos utilizar uma interface gráfica usando a classe JOptionPane e dois dos seus métodos estáticos (showMessageDialog para exibir dados e showInputDialog para fazer a entrada de dados do usuário).

O array foi inicializado somente após o usuário determinar a quantidade de clientes a ser cadastrada. Assim podemos percorrer o cadastro de cada cliente até o fim do array (ver o método cadastrarClientes()). Se o usuário optar pela visualização da listagem de clientes antes de cadastrar algum cliente, optamos por mostrar uma mensagem para alertar que é necessário realizar o cadastro antes de listar (basta verificar se o array não está nulo - if (listaClientes!=null))

Essa solução não leva em consideração possíveis erros do usuário. Por exemplo, se no momento de informar a quantidade de clientes a ser cadastrada ele colocar um valor que não pode ser convertido para inteiro (ex. um caracter qualquer), teremos um erro de lógica e uma exceção será gerada. Neste caso precisaríamos usar um tratamento de exceção (try/catch).

Questões para debate
  1. Por que foi utilizado uma variável do tipo String para pegar a opcão de escolha do usuário durante a exibição da menu principal? Qual a diferença se usássemos o tipo inteiro?
  2. Modularizar o programa em partes menores trás algumas vantagens? Quais?
  3. O que acontece quando acabar o espaço deste tamanho (quantidade)?

11 dezembro 2009

"pior do que criar PPTs é assistir PPTs..." - parte 2

Continuando o papo sobre o assunto do post anterior ("pior do que criar PPTs é assistir PPTs..."), eis um exemplo de apresentação bem feita, criativa e que chamou-me atenção. Exemplos como esse que podemos nos inspirar. É claro que para fazer isso precisa-se muito tempo, planejamento e roteiro. Mas com certeza passa a idéia de forma agradável. Você não acha?



10 dezembro 2009

"pior do que criar PPTs é assistir PPTs..."

A frase acima é de um trecho do post (Office 2010: Até o PowerPoint merece respeito), cujo achei interessante, pois remete reflexões sobre algumas apresentações "chatas" que vemos no dia a dia. Particularmente, eu acho um saco apresentações sem graça e que não chamam a minha atenção. Pode ser exagero meu, mas acredito que deveríamos dar mais atenção a elas.

Vejam cinco dicas interessantes no video abaixo:




Office Powerpoint 2010 "Five Rules" sample presentation from Long Zheng on Vimeo.

22 setembro 2009

Paráfrase ou cópia?


Razões segundo o professor Palazzo do porque os alunos fraudam...
leia mais...

"Este problema está crescendo e precisamos entender os motivos que levam um grande número de alunos a praticarem um deslavado plagiarismo. De uma parte a sobrecarga de professores não permite a repressão necessária, é preciso dizer não às atitudes não éticas, mas para isto é preciso tempo para a detecção, por outro lado a compreensão do problema facilita o encaminhamento de uma orientação e prevenção desta atitude. Vejamos os motivos do plagiarismo."

As principais razões:

  1. Ignorância;
  2. Pressão por resultados;
  3. Falta de tempo;
  4. Cursos irrelevantes;
  5. Professores medíocres;
  6. Afrontar o sistema.
As explicações de cada vocês podem ler na fonte original. Acredito ainda que os motivos sejam a grande quantidade de informações disponíveis na internet. É mais fácil e rápido copiar e colar. Entretanto, deve-se fazer isso de maneira consciente e crítica, citando a fonte por exemplo, ou ainda, parafraseando a texto em questão.

Admito que já copiei textos da internet algumas vezes (na graduação), comentendo esse grave erro. Embora, não tenha sido pego, isso não agregou em nada para meu conhecimento, pelo contrário. Afirmo isso porque quando precisei demonstrar conhecimentos anos depois, sobre tal assunto, tive que estudar profundamente, então percebi que esse tipo de prática deve ser evitada e combatida.

Descobri por conta própria, e também por sugestões de professores (na época), dicas de como tornar a prática da cópia em benefício próprio, através da utilização da paráfrase. Uma reescrita da cópia ou citação com as suas palavras. Isso é uma "cópia" aceita. Portanto, tenha cuidado e use paráfrases em tudo que copiar por ai.

Sugestões de leituras:

04 novembro 2008

Video ensina como usar MTJ no Eclipse para programar em Java ME

No último post foi divulgado que o projeto MTJ (Mobile Tools for Java), uma ferramenta para unificar e facilitar a programação da plataforma Java ME, possibilitando integrar diferentes SDK (emuladores) através da IDE Eclipse, está disponível e permite aumentar a produtividade. Segue um video com mais informações sobre como usar MTJ.

O video do link permite você aprender a instalar, criar um projeto MIDlet, rodar e depurar aplicações usando o seu emulador com suporte a Java ME, podendo ser o WTK, Motorola, Nokia, etc.

Getting Started with MTJ

This screen cast will guide you through the process of using the Mobile Tools for Java (MTJ) to develop Java ME applications. You will learn how to configure Eclipse and also how to create, run and debug MIDlets using MTJ.

Total running time 11:06 minutes

O link do video é: http://live.eclipse.org/node/614

22 outubro 2008

O que são blogs e o que representam?

Tive a honra de ministrar uma mini palestra sobre blogs no curso de pedagogia, da faculdade que trabalho. Lá expus o que penso sobre os blogs e suas influências nos tempos atuais. Será mesmo que os blogs representam uma oportunidade que usuários tem de serem produtores de informação?

O material foi baseado na série conquiste a rede, comentado no post do antigo blog. Para baixar o PDF do livro clique aqui. Créditos para os autores.

View SlideShare presentation or Upload your own. (tags: fazer como)









Foto da turma de pedagogia assistindo aula sobre blogs


Professora Jordélia fala sobre seus trabalhos com blogs.

A turma de pedagogia demonstrou interesse no assunto, apesar do professor deixar alguns alunos com sono :) Bem, mas o que mais agrada, para quem está acostumado dar aulas para um bando de macho, ver esse público de mulheres... :D obrigado pela oportunidade!

20 outubro 2008

Uso da Orientação a Objetos com Java nas aplicações Móveis

Programar para celular usando a orientação a objetos pode prejudicar a performance da aplicação? Essa questão me ocorreu alguns anos atrás (2004-2005), quando os celulares eram bem mais limitados do que hoje. Mas a conclusão era que criar muitas classes poderiam prejudicar o desempenho por questões obvias da pouca memória disponível. Hoje no entanto, os celulares já tem mais recursos computacionais. Mas ainda requer cautela ao projetar tais aplicações usando OO para não abusar do bom senso. A menos que não deseje portar tal aplicação para nenhum outro dispositivo além do seu smartphone. :)

Segundo o wikipédia, "A orientação a objetos, também conhecida como Programação Orientada a Objetos (POO) ou ainda em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos."

Um video interessante sobre Orientação a Objetos que recomendaria para curiosos.


Não dá para sair criando muitos objetos como gostaríamos. :( Neste caso, eu penso que é mais vantagem tentar avaliar o custo de memória que sua aplicação tem e o projeto em si.

Mas como faço isso se não conheço muito bem as práticas de otimização?
Preciso me tornar um JEDI na programação? A resposta é sim. :) Mas se anime, existe algumas coisas que pode fazer e que pode te ajudar. Um site interessante é: http://mr.dev.mobi

Esse site se propõe a testar sua aplicação para saber se está usando as melhores práticas e padrões da indústria móvel. Tem opções de análises gratuítas. Vale a pena dar uma olhada.

De qualquer forma é preciso usar o bom senso quanto ao projeto orientado a objetos para não prejudicar a performance de sua aplicação móvel. Ainda, tentar testar no celular real e procurar avaliar os resultados. É a melhor coisa a fazer na minha opinião.

08 setembro 2008

Dicas para programadores Java ME

Após alguns posts aqui no blog, reuni algumas dicas com referências que acho interessante repassar para vocês que querem aprender sobre programação para celulares usando Java e afins.

Série de dicas para iniciantes em programação para java me:

Introdução a programação para celulares com suporte a Java ME - parte 1
http://profdouglas.blogspot.com/2007/02/introduo-programao-para-celulares-com.html

Introdução a programação para celulares com suporte a Java ME - parte 2

Introdução a programação para celulares com suporte a Java ME – parte 3

Introdução a programação para celulares com suporte a Java ME – parte 4


Alguns trabalhos de meus alunos na disciplina de laboratório de programação (3 e 4 periodos (2008.1), com video aulas que foram produzidos por eles mesmos:

Tutoriais + video aulas sobre Java ME e SE


Um trabalho no mestrado onde pesquisei com meus colegas o Estado da arte em computação móvel:
Computação Móvel e Sem Fio

PARA QUEM VAI BOTAR A MÃO NA MASSA com Eclipse:

http://profdouglas.blogspot.com/2007/05/retomando-as-dicas-de-java-me.html 


ASPECTOS GERAIS:

http://profdouglas.blogspot.com/2008/02/aprenda-programar-e-torna-se-um-jedi.html 

Dicas sobre configurações p/ o seu celular, entenda um pouco sobre eles:
Arena de celulares: GSMArena

07 julho 2008

Curso de Segurança em Java: a importância da qualificação

Que o mercado de desenvolvimento de software está em alta não é nenhuma novidade. O problema, segundo especialistas, vai faltar profissionais qualificados nos próximos anos aqui no Brasil. Bom, isso pra mim não é novidade porque tem muita gente que acha que se aprende sem fazer na prática. Isso eu acho difícil, e quando chegam nas entrevistas, não tem nada para comprovar que já mexeu em alguma coisa de verdade.

Por outro lado fica a questão: já que este mercado é tão exigente COMO eu posso me qualificar para ser mais competitivo? Seja mais desenrolado. Ou seja, crie oportunidades e pretextos para estudar e fazer coisas na prática de programação.

Um curso gratuito e bem interessante para fazer coisas são os módulos do JEDI (Java Education and Development Initiative), no qual já falei aqui em post anterior. Pois é um treinamento para programadores. É claro, o sucesso deste curso dependerá de você realmente se dedicar.

Uma dica que costumo dizer em sala de aula é: se estiver estudando alguma teoria nova, seja lá qual for a sua área, coloque em prática o que está estudando. Se não for possível aplicar, então você deveria se questionar o porquê está estudando isso. Se conseguir, o aprendizado "será para sempre". Pelo menos no requisito de experiência.

Olha ai o plano de curso do novo módulo de SEGURANÇA do JEDI.

Lição 1 - Introdução a Segurança
* Conhecer sobre os principais aspectos de segurança
* Aprender boas práticas de segurança
* Observar as práticas de segurança aplicadas à linguagem Java

Lição 2 - Sandbox
* Identificar o modelo de segurança padrão empregado – Sandbox
* Conhecer os componentes da Sandbox
* Realizar as configurações dos componentes da Sandbox
* Definir os domínios de proteção de sua aplicação
* Aplicar a política de segurança, por intermédio das permissões
* Entender como as classes podem ser assinadas (certificação digital)

Lição 3 - Gerenciadores de Segurança
* Compreender a arquitetura dos Gerenciadores de Segurança
* Conhecer os métodos dos Gerenciadores de Segurança
* Construir um Gerenciador de Segurança customizado

Lição 4 - Segurança em Java
* Descriminar o que é Segurança
* Compreender o modelo de Segurança implementado em Java
* Obter mais dados sobre a Sandbox

Lição 5 - Classes de Segurança em Java
* Conhecer as regras e permissões de segurança
* Entender as classes de regras, de permissão e de acesso
* Aprender detalhes sobre exceções associadas a segurança
* Construir uma classe de permissão

Lição 6 - JAAS
* Trabalhar com a tecnologia JAAS
* Identificar as políticas de segurança de JAAS e seus arquivos de configuração
* Conhecer as classes de autenticação e autorização da tecnologia JAAS
* Programar e administrar através da tecnologia JAAS

Lição 7 - Criptografia
* Debater sobre os tipos de algoritmos criptográficos
* Conhecer as classes da arquitetura de criptografia Java

Lição 8 - Class Loaders
* Ter uma visão geral de funcionamento do Class Loader
* Compreender as considerações de segurança sobre o Class Loader
* Entender as classes do Class Loader

Lição 9 - Message Digest
* Conhecer os principais algoritmos de Message Digest
* Identificar os principais usos da utilização de Message Digest
* Empregar a classe MessageDigest em um aplicativo

Lição 10 - Listas de Controle de Acesso
* Conhecer as características da ACL
* Obter maiores informações sobre Java e as Listas de Controle de Acesso


Em resumo, pratique o que estuda, caso contrário, não vai aprender direito.