Pascal – Matriz

Publicado: 06/12/2010 em Pascal

Olá!!!

Passei um tempo sem postar por que estava um pouco ocupado com umas coisas profissionais, mas aqui está uma aula que muita gente me pediu por e-mail, pelo blog e pelo youtube: Matriz em pascal!

Eu achei que ficou legal a aula.. dá para entender legal. Qualquer dúvida, ja sabem! argolo.tiago@Gmail.com ou responde este tópico.

Parte 1:

Parte 2:

Até mais!!

Onde está o erro?

Publicado: 03/12/2010 em Sem categoria

Senhores,

 

Um certo companheiro me enviou uma dúvida por e-mail contendo o seguinte código:

 

Import java.util.Scanner;

public class Animal {
public String nome;
public int idade;
public String som;
public Animal(String nome, int idade, String som) {
this.nome = nome;
this.idade = idade;
this.som = som;
}
Scanner input = new Scanner(System.in);
public void emitirSom(){
System.out.println(“Digite um som:”);
String barulho = input.nextLine();
}
public String getSom() {
return som;
}
public void setSom(String som) {
this.som = barulho;
}
}
Existe um erro básico, mas não menos importante, neste código. Quem me diz qual é ? :) São questões desse tipo que caem na certificação… que dá impressão de estar tudo correto mas tem sempre algo errado.
Até mais!

Java – Fundamentos 2

Publicado: 26/05/2010 em Java
Tags:,

Dando continuidade ao tópico fundamentos, vou resumir sobre outros pontos importantes que caiu na minha prova do SCJP 5.

Níveis de acesso:

Java define quatro níveis de acesso: Default, public, protected e private.

Regras:

Todos os membros da classe com o modificador private só poderão ser acessados de dentro da mesma classe.

Default: Quando criamos uma classe e não colocamos nenhuma definição explícita de nível de acesso, ela como padrão se torna default. O mesmo acontece para construtor, atributo, método, interface.. Sendo assim, quando a classe estiver definida como default, ela só poderá ser acessada pelos métodos dela mesma ou de alguma outra classe contanto que esteja no mesmo pacote.

O nível protected é muito similar ao default. Porém, classes de outros pacotes também podem ter acesso a uma classe definida como protected, contanto que seja filha dela. Ou seja, não tem sentido marcar como protected e private… acredito que nem compila isto. Muito cuidado nisto pois na prova pode ser que a classe mãe esteja como protected e a principal esteja tentando acessá-la sem herdar. Referências podem ser utilizadas normalmente.

Pilha e Heap

Plha e Heap necessitam de muita atenção pois em questões de exceção eles são muito utilizados. Por exemplo, em uma pilha de 10 métodos, irá perguntar onde ocorreu a exceção. A pilha é o local onde estarão empilhados todos os métodos em execução no momento ordenadamente. O último método chamado estará no topo, como uma pilha de fato. A partir destes métodos, no decorrer da aplicação, se algum objeto for criado ele ficará no heap, onde estarão todos os objetos ativos do sistema.

Em resumo pilha é onde estarão os métodos em execução.
Heap é onde estarão os objetos criados no a aplicação.

Garbage Collector sempre estará percorrendo todo o heap caso algum objeto deixe de ser referenciado. Falaremos disto posteriormente.

Java – Fundamentos

Publicado: 26/05/2010 em Java
Tags:,

Em java, alguns conceitos básicos são bem mais complicados do que aparenta. Respondendo alguns simulados, tu verás que praticamente TODA questão de QUALQUER assunto envolve fundamentos.

As vezes nos deparamos, até mesmo na faculdade, com questões gigantescas e já pensamos logo: “Pultz, ter que entender esse código primeiro para depois encontrar o erro!”. Ah, você não pensa isto?? É companheiro, pois imagine você ter que se deparar com 20% da prova com questões de 70 ( ou mais ) linhas, e com aquele maravilhoso código sem endentação alguma como a SUN adora fazer. Não acabou não!! Imagina ainda, você numa questão Drag and Drop de nível alto de Threads, conseguir montar ela toda certa depois de alguns minutos dedicados a ela, errar por causa de uma linha de fundamentos?! Sim, eu passei por isto! E te garanto, caro leitor… a raiva de você mesmo por não ter prestado atenção nos fundamentos é grande quando tu pega o papel de resultados e vê que errou aquele tanto de fundamentos.

Agora que você deve concordar comigo que fundamentos são de extrema importância para a nossa querida SCJP, vamos falar um pouco sobre eles. Apesar de existir vários tópicos sobre, vou comentar apenas os mais importantes que inclusive teve na minha prova.

Variáveis: Acredito que é meio impossível criar uma aplicação interessante sem a utilização de variáveis. Elas tem a finalidade de armazenamento qualquer tipo de informaçaõ. Desde que seja declarada corretamente. Ao criar uma variável, precisamos definir qual tipo de informação ela irá armazenar.

A sintaxe em java será sempre tipo nome; exemplo: String texto;
Neste caso, estamos informando que a variável “texto” irá armazenar informações do tipo de dados String. Existem 8 tipos de dados primitivos, que são eles:

char Boolean
Double Float
Int Long
Byte Short

Então, a cada vez que tu precisar criar uma variável de determinado tipo, basta digitar o tipo e o nome da variável logo após. Lembrando de SEMPRE terminar a linha de comando com ponto e vírgula “;”.

Devemos levar em consideração a capacidade de armazenamento de cada tipo. Por exemplo:

Byte: 1 bytes (8 bits )
Short: 2bytes (16 bits)
char: 2 bytes (só positivo) (16 bits)
int: 4 bytes (32 bits)
long: 8 bytes (64 bits )

Isto é muito importante! Pois temos que ter muito cuidado com a questão de casting. Jamais poderemos tentar converter o número inteiro 130 por exemplo, em byte. Porque em byte ele só suporta até o número 127. Não entrarei muito em detalhes a questão de tamanho de armazenamento e capacidade, mas a literatura é extensa na internet sobte este assunto.

O importante na prova é tomar cuidado quando se tentar atribuir tipos diferentes. Siga este exemplo acima pois é a ordem crescente. Tome muito cuidado quando na prova ele estiver tentando fazer unboxing de um tipo “maior” pra um “menor”.

Mas, algo tão importante quanto isto sobre variáveis.. são as literais.
De acordo com o código a seguir:

long i = 1;

Estamos atribuindo um valor long a uma variável long? Não! Utilizamos as literais para avisar ao nosso compilador que aquele número alí é de um tipo de dado específico, evitando assim cuidados com a questão de unboxing e boxing.

Os tipos de dados que não precisam de literais para serem referenciados, por serem padrões em sua declaração, são: Integer e double. Se atribuimos um valor a um long, short, int ou byte, sem definir uma literal, por padrão aquele número será do tipo int. O mesmo acontece com o número se estivermos atribuindo a uma variável do tipo double ou float; por padrão é double. Sempre atento a capacidade de cada tipo de dados, tome muito cuidado com isto. Por exemplo: float a = 2.0; o código não irá compilar porque esse número não terá como ser convertido em float.

As literais são:

L ou l = Long ex.: 1l ou 1L
F ou f = Float ex.: 1f ou 1F
D ou d = Double ex.: 1d ou 1D ( padrão )

Uma parte interessante sobre tipos de dados, é o tipo char. Ele parece ser simples por armazenar apenas 1 caracter… mas é bem mais interessante do que pensamos. Podemos sim definir um char com –> char a = ‘a’; <– mas também podemos definir que a nossa variável char será a posição 65 da tabela unicode. –> char a = 65; <– que irá nos imprimir A. Ou seja, podemos utilizar todos os números representando suas respectivas posições na tabela unicode para implementar nossa aplicação java.

É bastante interessante pois tem até letra grega para ser atribuída –> char a = ‘\u03A9′; <– irá imprimir a letra grega ômega.

Operadores

= atribuição
+ soma
- subtração
* multiplicação
/ divisão
% resto de uma divisão inteira

Existem maneiras práticas para se trabalhar com os operadores:
+= Soma o valor atual com o valor que vier depois do operador.
1 = 1 + 1; é a mesma coisa de 1 += 1;

-= Diminui o valor atual com o valor que vier depois do operador.
1 = 1-1; é a mesma coisa de 1 -= 1;

e a mesma coisa com todos os outros operadores.

Comparadores

Devemos ter muito cuidado com os comparadores porque, principalmente em estrutura de decisão como o IF, a sun gosta de por pegadinhas para que você diferencie “=” que é atribuição de “==” que é comparação.

Se fizermos if (a = true) {}estamos atribuindo o valor true a variável “a”. Mas, se fizermos if (a==true){}, estamos verificando se o valor da variável “a” é true. Muita gente erra em questões como essa.. não é difícil errar porque naquele código todo bagunçado as vezes isto passa despercebido.

== comparação
!= diferença
> maior que
< menor que
>= maior igual
<= menor igual

Operadores lógicos

Quando se utilizamos um operador lógico, queremos saber se uma ou mais condições são verdadeiras. Um detalhe muito importante é saber que quando se repete o operador, significa que as 2 condições terão que, obrigatoriamente ser de acordo com o operador. Caso contrário, se for apenas 1 operador, é necessário que apenas 1 dos lados seja aceitável pelo operador. Exemplo: boolean a,b; a = b = true; if ( a == true & b == false ){} -> condição aceita, pois como só tem 1 operador só precisa que 1 dos lados esteja aceitável.. e este lado, neste caso, é o que a == true;

if ( a == true && b == false )() -> condição negada, pois é necessário que os 2 lados estejam de acordo.

& = e
| = ou
^ = XOR

Aritmética com atribuição.

Aqui temos uma das questões talvez mais confusas sobre operadores. O famoso pós e pré incremento. Operadores antes das variáveis significa que aquela variável será incrementada antes de efetuar a operação em que ela se encontra. Operadores após a variável será incrementada após a operação em que ela se encontra. Por exemplo:

i = 1; a = 2;
c = a + i++; // Resultado 3 porque o “++” está após a variável. Ou seja, o valor de i só foi incrementado depois que a operação foi efetuada, sem afetá-la.

i = 1; a = 2;
c = a + ++i; // Resultado 4 porque o “++” está antes da variável. Primeiro incrementou e depois efetuou a operação.

Operadores Ternário: Eles não são muito utilizados, pelo menos pelos programadores que conheço. Se dá em um “if” mais sofisticado. Onde a sintaxe é (condição ? true,false); Ou seja, se a condição for aceita, faça algo que está no local de true. Caso contrário, o código que está no local de false. Sendo assim, ficaria:

int i = 5;
System.out.println (i == 5 ? “i é igual a 5″: “i não é 5!”); // i é igual a 5

Se a condição i == 5 for aceita, retorne “i é igual a 5″ caso contrário “i não é 5″.

Array

Array é muito importante, talvez um dos objetos que mais cai na prova. Você deverá saber declarar, iniciar, acessar e percorrer pelo array.

Para declarar um array, você deve utilizar “[]” para informar que aquela variável é um objeto do tipo específico. A sintaxe: tipo[] nome; o local onde os colchetes estarão não importa, sendo uma convenção colocar logo após do tipo do array.

int[] idade;
double[] peso;

Iniciando:

Para inicializar o array, é necessário criar um objeto. O operador new faz isso pra gente.

idades = new int[10];
peso = new double[10];

neste caso estamos criando e inicializando um objeto do tipo int e double que suportam até 10 informações do tipo int e double, respectivamente.

Quando se inicia um array devemos informar o tamanho do mesmo, colocando o valor entre os colchetes, como mostra a declaração acima.

Acesso:

A posição do array inicia por 0 e vai até o número-1 do que você declarou. Porque -1? Porque, como falei, começa por 0; Podemos atribuir valores em qualquer espaço do nosso array. Exemplo: Se eu quiser atribuir um valor no array idades na posição 3. Então: idades[2] = 1; o 3 representa a posição 3 porque começa com 0, lembra?

Percorrendo:

As 2 maneiras mais utilizadas para percorrer um array, é utilizando o for dos seus 2 estilos. ou o for normal ou o for each. Eu, particularmente, gosto mais do for each pois não tem o risco de causar uma exceção ArrayindexOutOfBounds. Mas, seja qual for a forma que tu preferir, um array se percorre através do seu índice. Se tu tens uma variável inteira dentro do loop, e utilizar a mesma para percorrer o índice, basta por o nome do array e logo após entre colchete a variável para que seja retornado a você o valor daquela posição.

for (int i: idades)
System.out.println(i);

Neste caso i irá receber o valor de cada posição de idades e escrever no console.

Array e um assunto muito extenso e requer muita atenção. Dêem uma estuda com mais carinho nele pois cai MUITO na prova SCJP e tem muita pegadinhas.

Irei postar sobre outros fundamentos posteriormente. Espero que tenham gostando e lembrem-se que eu posso ter errado alguma informação acima porque ainda sou aprendiz. Qualquer coisa podem me alertar que irei corrigir. Até mais!

Vídeo-aula sobre Herança em Java.

Parte  1:

Errata: Um construtor nunca é herdado. A classe filha apenas tem obrigação de implementar o construtor da classe mãe, se este não for default.

Parte 2:

Tiago Argolo.

Olá, caro programador. Peço que as dúvidas, ou sugestões, sobre algum tópico deste blog sejam postadas nele mesmo ou enviar e-mail para argolo.tiago@gmail.com
Ah! Fiquem a vontade para pedir alguma vídeo-monitoria com o assunto que você estiver precisando.

É bom dar uma olhada antes na página Sobre para saber o objetivo principal do blog e, quem sabe então, você possa fazer parte da equipe!

Até mais!

Vídeo sobre funcionamento de Procedures em Pascal.

Tiago Argolo.