POO – Estrutura de Controle e Repetição

surprised-1184889_640Antes de entramos de fato na orientação a objeto é necessário compreender/revisar os conceitos de estrutura de controle e repetição. A estrutura de controle em sua essência serve para tomada de decisão. Na tomada de decisão são utilizados testes lógicos. Tanto a decisão e o teste lógico retornam apenas dois valores possíveis verdadeiro ou falso. Geralmente é feito o uso de condição na tomada de decisão. A condição é um teste lógico que compara dois valores ou variáveis utilizando operadores relacionais. Na tabela abaixo é listado os operadores relacionais.

oepradoresrelacionaisSobre estrutura de controle é importante ressaltar os desvios condicionais simples e o composto. O desvio condicional compreende em tomar uma decisão a qual resulta em um valor lógico (verdadeiro ou falso) e logo após essa decisão executar (ou não) um bloco de comandos. No desvio condicional simples é executado um bloco de comandos caso a decisão seja verdadeira e caso seja falsa não será executado nada, ou seja, passa para a próxima instrução (linha de comando) após a estrutura de decisão.  No desvio condicional composto existe um bloco de comandos para os dois resultados. O primeiro bloco será executado caso a decisão resulte em verdadeiro e o segundo bloco de comandos será executado caso a decisão seja falsa.

desviocondicionalNo exemplo acima temos a declaração da variável salto do tipo double. Logo após é atribuído o valor 2.25 para a variável salto. Temos também um desvio condicional composto. O primeiro bloco de comandos será executado caso a decisão (salto>1.75) seja verdadeira mostrando a mensagem “Pulou a cerca” na tela e o segundo bloco de comandos caso a decisão seja falsa mostrando a mensagem “Não pulou a cerca”.

Caso uma decisão possua mais de uma condição será necessário fazer uso de operadores lógicos. Temos os operadores “E” (&&) e “OU” (||). Ao utilizar o operador lógico && basta apenas que uma das condições seja falsa para que o resultado seja falso e portando só será verdadeiro se todas as condições forem verdadeiras. Ex.: (condicao01 && condicao02). O operador || atua de forma contrária ao operador &&, basta que apenas uma das condições seja verdadeira para que o resultado seja verdadeiro e portando só será falso se todas as condições forem falsas.

Estrtura de RepetiçãoAs estruturas de repetição ou laços de repetição são utilizadas quando existe a necessidade de executar um determinado bloco de comandos mais de uma vez. Iremos abordar as estruturas enquanto e para. Quando não se sabe a quantidade de vezes que o código deve repetir geralmente é utilizado a estrutura de repetição enquanto (while). A estrutura de repetição enquanto é caracterizada por possuir um teste lógico no início do laço. Enquanto o teste lógico no início do laço for verdadeiro deve-se repetir o bloco de comandos.

A estrutura de repetição para é usualmente utilizada quando já se sabe quantas vezes o bloco de comandos vai repetir. Faz uso de uma variável de controle onde a mesma a cada laço incrementa ou decrementa auxiliando na implementação do bloco de comandos. Para ter acesso a exemplos confira a vídeo aula e apresentação abaixo.

[slideshare id=59798404&doc=poo4-160321002646]

POO – Um pouco mais sobre variáveis

Programador

Basicamente, tudo que acontece nos algoritmos/programas/aplicações é resultado de alguma forma de manipulação de dados  e esses dados são guardados na memória, seja ela principal ou não. Para fazer acesso a esses dados são utilizados as variáveis. Portanto, as variáveis representam os dados que estão armazenados na memória. Para facilitar, as variáveis podem possuir tipos. Os tipos servem para representar o conjunto de dados que a mesma pode armazenar.

Java é uma linguagem que utiliza variáveis estaticamente e fortemente tipadas. Variável estaticamente tipada é quando uma linguagem de programação exige que o tipo da variável seja explicitada antes que o código fonte seja compilado. Variável fortemente tipada é quando a linguagem de programação exige que os valores atribuídos as variáveis sejam do mesmo tipo que foi declarado para a variável.

Variáveis PrimitivasEm uma linguagem de programação orientada a objeto pura, tudo é objeto. Essa afirmação inclui, obviamente, as variáveis. Apesar de ser uma linguagem de programação orientada a objeto, o Java faz uso de tipos primitivos. Ao declarar int i = 3, a variável i está recebendo uma cópia do valor 3 e não uma referência a um objeto. Abaixo uma tabela relacionando os tipos primitivos.

Tabela Tipos Primitivos JavaAo trabalhar com valores e variáveis pode ser feito o uso de operadores. Temos os operadores aritméticos +, -, * e % que correspondem respectivamente a mais, menos, vezes e modulo. O operador modular corresponde ao resto de uma divisão. Por exemplo.: i = 8 % 3. A variável i vai receber o valor 2, pois o resto da divisão de 8 por 3 é 2. Também temos, os operadores de atribuição =, -=, *=, /= e %=. O operador =(igual) atribui a variável que está a esquerda do operador o resultado de tudo que estiver a direita. Os operadores -=, *=, /=, %= resulta no valor a direita mais o operador anterior ao sinal de =(igual) como valor inicial da variável. Observe o exemplo abaixo:

  • int i = 10; // inicializando a variável i com o valor 10
  • int -= 2; // i resulta em 8, pois i inicialmente vale 10 então i = i – 8, ou seja, i = 10 -8

Para finalizar, a atribuição de um valor de tipo diferente à variável que o recebe pode provocar erro. Para que isso não ocorra deve ser feito o uso de Casting. Por exemplo, ao tentar atribuir um valor real a uma variável do tipo inteiro o mesmo não deve ser feito de forma direta e sim utilizar o Casting. Exemplo: int i = (int) 8.12. No exemplo i irá valer 8 desconsiderando a parte fracionária. Isso se dá ao fato que a linguagem de programação Java é fortemente tipada. Para avisar ao compilador, para que o mesmo resolva o problema, é explicitado que o valor que está sendo atribuído deve ser moldado.

Logo abaixo a vídeo aula e a apresentação.

[slideshare id=59165707&doc=poo3-160306210016]

POO – Meu Primeiro Código

ProgramadorSegundo texto da série sobre Programação Orientada a Objeto (POO). Será apresentado, principalmente para quem está iniciando, como escrever o primeiro código em Java. Para esta tarefa será utilizado o ambiente de desenvolvimento integrado Eclipse. O Eclipse é a IDE (Integrated Development Environment) mais popular da comunidade de desenvolvedores Java. Para desenvolver a primeira aplicação será necessário baixar e instalar o JDK (ambiente de desenvolvimento Java)  disponível aqui e baixar, descompactar e executar o Eclipse.

O primeiro código a ser implementado será a classe chamada MinhaPrimeiraClasse a qual possui apenas um método. O método que compõe a classe é o método main(). Na figura abaixo temos uma imagem com a representação gráfica da classe.

MinhaPrimeiraClasseLogo abaixo o código fonte da classe MinhaPrimeiraClasse.

MinhaPrmeiraClasseO código acima possui o método main() onde seu conteúdo consiste apenas em uma linha de comando. O comando System.out.println(“Olá, Mundo!”) escreve na tela a mensagem  “Olá, Mundo!”. Como manda a tradição, o primeiro código a ser escrito por um programador ao aprender uma nova linguagem de programação deve ser o internacionalmente conhecido “Olá mundo!”.

Em java, todo e qualquer código é inserido dentro da(s) classe(s). Nas aplicações Java é necessário pelo menos uma classe e um método main(). Uma aplicação deve/pode conter mais de uma classe e com relação ao método main() o recomendado é que cada aplicação possua apenas um. O método main() é o método principal da aplicação o qual a máquina virtual java (JVM) vai procurar para iniciar execução do aplicativo, ou seja, é o ponto de partida da execução da aplicação.

Ao codificar é recomendado que exista apenas uma classe por aquivo e o mesmo irá utilizar a extensão “.java”. O arquivo deve ter o mesmo nome da classe. No caso, arquivo contendo o código fonte da classe MinhaPrimeiraClasse terá a seguinte nomenclatura “MinhaPrimeiraClasse.java”. Logo após escrever o código fonte o mesmo deve ser compilado e transformado em código de máquina virtual (ByteCode). Na prática o arquivo “MinhaPrimeiraClasse.java” irá dar origem a outro arquivo chamado “MinhaPrimeiraClasse.class” o qual será executado pela JVM. O processo é ilustrado pela figura abaixo.

processoAo utilizar o Eclipse pela primeira vez deve-se definir a workspace (espaço de trabalho), ou seja, a pasta que irá conter todos os projetos/aplicações a serem desenvolvidas utilizando a ferramenta.  Para iniciar o desenvolvimento de uma aplicação é necessário criar um projeto. O tipo de projeto que vamos trabalhar é o Java Project (projeto java). Ao se criar um novo projeto no Eclipse deve-se definir: (i) nome do projeto; (ii) o ambiente de execução (JRE); (iii) Layout do projeto, ou seja, se vai querer fazer uso da separação entre o código fonte (src) do código de máquina virtual (bin). Para cada novo projeto será criada uma pasta dentro da workspace. O projeto pode ser organizado em duas pastas diferentes src e bin. A pasta src irá conter o código fonte, ou seja, todos os arquivos com a extensão “.java”. Já a pasta bin irá conter os código de máquina virtual (ByteCode), ou seja, os aquivos “.class”. Acesse o vídeo no fim desta publicação para acompanhar a vídeo aula mostrando a implementação da classe MinhaPrimeiraClasse e mais exercícios utilizando o Eclipse.

As classes devem ser criadas dentro do projeto, mais especificamente dentro da pasta src. Normalmente as classes são organizadas através de pacotes. O uso de pacotes será abordado em um momento posterior. As instruções e os comandos que irão desencadear ações em java, são permitidas apenas dentro de algum método e os mesmos são finalizados com ; (ponto e vírgula). O escopo das classes e dos métodos são delimitados com chaves {}. As declarações de variáveis é feito utilizando a seguinte sintaxe tipoDaVariável nomedaVariável. Exemplo: int idade.

Finalizo aqui a segunda postagem sobre Programação Orientada a Objeto. Não deixe de conferir a apresentação, a vídeo aula e de realizar os exercícios propostos nos mesmos.

[slideshare id=58796075&doc=poo2-160227161842]

POO – Introdução

Programação Oriendada a objetoNo início de 2014, ministrei a disciplina de programação comercial em um curso a distância ofertado pela ETAPI (Escola Técnica Aberta do Piauí). A disciplina consiste em utilizar a ferramenta Lazarus para criar aplicações as quais se comuniquem e persistam dados através de um SGBD (Sistema Gerenciador de Banco de Dados). Aproveitando a oportunidade disponibilizei as referidas aulas no meu canal do youtube. Além dessa experiência em produzir conteúdo para ensino a distância, possuo também uma conta pessoal no slideshare onde disponibilizo apresentações. Nas duas mídias sociais citadas acima o maior número de acessos é destinado ao conteúdo em formato de aula (apresentações e vídeos). Junto aos acessos também recebi vários feedbacks positivos os quais me motivaram produzir mais conteúdo. Tendo em vista que foi bastante útil aos interessados resolvi organizar e disponibilizar um curso de Programação Orientada a Objeto (POO). Essa postagem é a primeira de uma série que irá abordar o tema POO. As postagens serão acompanhadas dos slides e vídeo aula. Sem mais delongas vamos colocar a mão na massa!

Objetolândia Seja bem vindo a Objetolândia! Vamos embarcar nesse mundo e aprender os conceitos de orientação a objeto. Na parte prática será utilizado a linguagem de programação Java. Antes de começar algumas dicas para otimizar o aprendizado:

  • Tenha calma! Quanto mais entender, menos terá que memorizar;
  • Faça exercícios. Faça suas próprias anotações;
  • Beba água, muita água!;
  • Fale sobre o assunto em voz alta;
  • Escute seu cérebro;
  • Sinta algo!;
  • Digite e execute seu código.

Quem é esse tal de Java? É uma linguagem de programação orientada a objeto. A mesma será utilizada durante as próximas postagens para por em prática os conceitos estudados. Java é: (i) Familiar pois possuí uma sintaxe parecida com outras linguagens de programação; (ii) Independente de plataforma; (iii) Segura, ou seja, possui vários mecanismos para garantir a segurança e (iv) Possui uma forte coleção de APIs (e bibliotecas).

A linguagem de programação Java, com o objetivo de ser independente de plataforma, utiliza Máquina Virtual (JVM). Como o próprio nome diz a JVM reproduz as funções de uma máquina. Para cada plataforma que pretende utilizar aplicações feitas em Java deve-se ter uma implementação da JVM específica para a mesma. Essa abordagem permite que uma aplicação feita em Java possa ser executada em uma determinada plataforma desde que a mesma possua uma JVM implementada. Outra vantagem do uso da JVM é que a mesma separa a aplicação (ou aplicações) Java do sistema operacional. Essa característica permite situações em que se houver algum problema na aplicação rodando na JVM não irá interfir no sistema operacional ou em outras JVM rodando simultaneamente. Simplificando, o processo para executar uma aplicação é: (i) O desenvolvedor/escrever o código fonte utilizando a linguagem de programação Java; (ii) Compilar o código fonte, ou seja, verificar se o mesmo possui erro de sintaxe e transformar o código fonte em código de máquina virtual (ByteCode) e (iii) pegar o ByteCode e executar na JVM. Abaixo uma figura ilustrando o processo.

JVM - Máquina Virtual JavaA JVM é basicamente uma especificação. Essa estratégia permite que, em teoria, qualquer empresa possa implementar uma JVM para sua plataforma. Para tornar essa JVM válida basta que a mesma seja certificada pela a empresa responsável pelo Java (Oracle).

ProgramandoPara começar é necessário conhecer os ambientes de execução e desenvolvimento. O ambiente de execução JRE (Java Runtime Environment) é formando basicamente pela JVM e bibliotecas necessárias para rodar/executar uma aplicação. O ambiente de desenvolvimento JDK (Java Development Kit) é composto pelo ambiente de execução (JRE) e outras ferramentas como por exemplo o compilador. Java é uma linguagem recomendada para aplicações de médio e grande porte. Existem outras linguagens de programação mais eficientes para pequenos projetos e equipes formada por poucas pessoas. Como é uma linguagem madura e possui uma forte coleção de bibliotecas, é ideal para situações em que a aplicação necessita ser escalável, ou seja, aplicações que ao longo do tempo vão evoluir melhorando o que já existe e onde serão adicionadas novas funcionalidades ao longo do tempo. Para desenvolver aplicações escaláveis basta fazer uso de boas práticas e seguir as recomendações sobre o design da POO.

Estou entendendo o que é o Java, mas quando vamos a objetolândia? Quero conhecer os objetos e saber o que esses caras tem de diferente.

Objeto é um conceito que envolve: (i) identidade; (ii) estado e (iii) comportamento. A identidade serve para garantir a unicidade do objeto, ou seja, algo que garanta que aquele objeto é único. No Java a identidade é garantida de forma automática no momento em que o objeto é criado. O estado é responsável por representar as características do objeto e os valores atribuídos a essas características. Pode-se citar como exemplo um determinado objeto aluno que possui a característica idade e em um dado momento o valor atribuído para essa característica é 19, ou seja, o estado do objeto aluno é composto pela característica idade e a mesma possui o valor 19. O comportamento de um objeto relaciona tudo que o mesmo é capaz de fazer, ou seja, as ações que o objeto pode executar.

As coisas que o objeto conhece sobre ele mesmo (estado) também é conhecido como variáveis de instância. As variáveis de instância representam os atributos/características do objeto. Aquilo que o objeto é capaz de fazer é chamado de método, ou seja, os métodos representam as ações que o objeto pode executar. Em uma linguagem de programação orientada a objeto uma variável é um objeto, um programa é um objeto, ou seja, tudo é objeto!

Se tudo é objeto, para que serve as classes? É a mesma coisa que Objeto?

Não! Classe não é a mesma coisa que Objeto. O conceito de classe pode ser entendido como uma especificação do objeto. Os objetos são criados a partir de uma classe, ou seja, a classe especifica tudo que o objeto conhece (variáveis de instância) e faz (métodos). Para cada objeto criado a partir de uma classe significa dizer que o mesmo foi instanciado a partir de uma classe, ou seja, criar instâncias de uma determinada classe é o mesmo que dizer que foram criados objetos a partir de uma classe. Na imagem abaixo temos uma representação de uma classe. O nome da classe é Aluno e a mesma possui as variáveis de instância nome e matricula. A classe Aluno também possui o método estudar().

classe

Vou ficar por aqui nessa primeira postagem. Para um melhor aproveitamento do conteúdo exposto deixo abaixo uma apresentação e uma vídeo aula. Quem tiver interesse em acompanhar mais conteúdos basta se inscrever no meu canal do youtube e acompanhar as postagens do blog.

[slideshare id=58256618&doc=poo01-160215010227]