segunda-feira, 27 de fevereiro de 2023

Interface em Java (implements): o que é, para que serve e como implementar - aula 09.1

 O que é uma Interface

O conceito de interface é usando em praticamente toda a computação, até mesmo na engenharia do ramo programação em baixo nível (interface de comunicação entre hardware e o kernel do Sistema Operacional).

Podemos definir interface como uma face, um plano, uma divisa que faz a comunicação entre dois meios diferentes.
Por exemplo, quando trabalhamos com eletrônica, basicamente é tudo estado alto ou estado baixo, que são nada mais que níveis de voltagem ou corrente elétrica. Lá se usa registros, CI (circuitos integrados), portas lógicas, equipamentos de elétrica e eletrônica.

Mas quem usa computador como simples usuário, não precisa saber nem se preocupar com eletricidade ou bits se movendo. Por quê?
Porque há uma interface que interpreta essas coisas em baixo nível. Em vez de te mostrar uma série de bits ou voltagens, te mostra textos que você, humano, compreende.

O responsável por isso é o sistema operacional. É como se ele traduzisse: "Opa, recebi um código aqui do hardware "0011100101001011010", isso quer dizer que tenho que fechar a janela".

Ou seja, estamos fazendo uma comunicação entre dois meios: o meio do hardware (em baixo nível, onde se trabalha com bits) e o meio do usuário (que quer ler textos, ver imagens).
Então, há uma interpretação. No fundo, a mensagem é a mesma, só é dita de maneira diferente para que você possa entender.

Interface em Java


No rigor do termo, uma interface em Java nada mais é que uma classe abstrata composta somente por métodos abstratos. E como tal, obviamente não pode ser instanciada.
Ou seja, ela só contém as declarações dos métodos e constantes, nenhuma implementação, só o 'molde'.

E para que raios serve uma classe sem implementação?
Ela serve para que outras classes, baseadas nessa interface, implementem esses métodos para fins específicos.

Parece confuso e complicado, mas é como explicado anterior sobre interface: ela será uma espécie de comunicação entre meios.
Geralmente entre o que é pedido (das funções que ela executa) e a implementação.

Vamos dar alguns exemplos mais práticos.



Interface de um restaurante

Um exemplo de interface em nosso dia-a-dia, é o cardápio de um restaurante.
No menu do restaurante tem dizendo todas as refeições existentes naquele local, inclusive com os ingredientes.

Os clientes que lá forem vão pedir uma determinada comida, e querem receber exatamente aquilo que pediram. Porém, eles não vão ver e nem se importar de como foi feito o prato, só querem receber aquilo que foi solicitado.

Então, o cardápio é uma interface de comunicação entre o cliente os cozinheiros.


Interface de um programa real

Vamos supor que cientistas te contratem para criar um aplicativo Java para uma universidade, para fazer cálculos com matrizes. Eles irão te passar o que você tem que fazer, porém, muito provavelmente não vão estar interessados em COMO você vai fazer isso, só querem saber se vai funcionar.

E é aí que entra a interface, ela servirá de comunicação entre seu código e os cientistas.
Sua interface vai se comunicar com eles, é como se ela dissesse: "Para criar uma matriz, forneçam isso que te devolvo a matriz. Já para calcular o traço da matriz, nos forneça a matriz. Já para calcular a transposta, faça isso que retorno isso. Ah quer essa informação? Ok, me forneça esses dados que te retorno tudo pronto"

Ou seja, vai haver uma comunicação entre a sua implementação em Java e entre os cientistas.
Provavelmente eles nem sabem programar em Java, por isso eles não devem ter acesso ao código, pois não iriam entender, e nem querem entender, só querem que o programa faça o que eles pedem, e essa mediação é feita através da classe abstrata, a interface Java do programa.

Como declarar uma Interface

Embora seja uma classe abstrata, ela é uma classe abstrata especial, pois só possui métodos abstratos e nada de implementação. Só as estruturas, o cabeçalho dos métodos.

E como tal, vamos usar uma palavra reservada do Java para declarar tais tipos de classe: interface.
Por exemplo, para declarar uma interface pública de nome "JavaProgressivo", fazemos:
public interface JavaProgressivo{
}

Nossa interface do exemplo passado, das matrizes dos cientistas, poderia ser mais ou menos assim:

public interface Matriz {
 
 double Traco(Matriz m);
 Matriz Nula(int linha, int coluna);
 Matriz Transposta(Matriz m);

}

Vejam que não há implementação, só o cabeçalho dos métodos.
Mas vamos ver como essa interface vai se comunicar com os cientistas?

Por exemplo, é fácil ver que se eles quiserem saber o traço de uma matriz, basta invocar o método "Traco()" fornecendo a matriz como argumento.
Como esse traço é calculado? Não sei, não importa, o importante é que retorna uma variável do tipo double com o resultado.

E para criar uma matriz nula de "linha" linhas e de "coluna" colunas?
É só chamar o método Nula() que ele te retorna tal matriz.

E se eles quiserem a matriz transposta de uma matriz 'm', como fazem?
Ué, chamam o método "Transposta()" passando a matriz como argumento, que o programa em Java retorna a matriz transposta.

Implementando uma classe - implements

Porém, de nada adianta ter uma classe abstrata se ela não for implementada.
Veja a interface como um molde, um esqueleto do que você deve fazer.

É como se seu chefe te desse uma série de tarefas para fazer:
Crie um método que retorne o traço de uma matriz
Crie outro método que retorne uma matriz nula de tamanho "linha x coluna"
E outro que retorne a transposta de uma matriz

E para essas tarefas serem resolvidas, é necessário implementá-las.
É aí que entra a parte do código Java, onde você vai realmente programar tudo que foi pedido.

Vamos supor que sua implementação será através da classe pública "minhaMatriz", a sintaxe para implementar uma classe derivada de uma interface é:
public class minhaMatriz implements Matriz{
}

Veja como essa sintaxe se assemelha aquela da Herança.
A única diferença que lá a palavra reservada para herdar é extends.
De resto, tudo igual.

Agora você cria sua classe "minhaMatriz".
Você pode definir novas variáveis, novos métodos (como setters e getters) e fazer tudo o que quiser, com somente uma condição:
Tudo que estiver na interface, tem que estar, obrigatoriamenteem sua implementação, e da mesma maneira.

Ou seja, se lá tem um método que recebe argumentos específicos e retorna um tipo específico, sua implementação tem que obedecer esta mesma regra: receber os mesmos argumentos específicos e retornar o tipo que diz lá.

Seria algo assim:

public class minhaMatriz implements Matriz{
 Matriz mat;
 double traco;
 
 public double Traco(Matriz m){
  //Implementação do traço de uma matriz
  return traco;
 }
 
 public Matriz Nula(int linha, int coluna){
  //Zerando todos os elementos da matriz
  return mat;
 }
 
 public Matriz Transposta(Matriz m){
  //Armazenando a transposta da matriz 'm' na matriz 'mat
  return mat;
 }

}

quinta-feira, 23 de fevereiro de 2023

Classes Abstratas x Classes Concretas

 Classes abstratas são classes que servem como modelo para suas subclasses. Classes abstratas não podem ser instanciadas, apenas herdadas. Os métodos declarados na classe abstrata devem ser implementados nas subclasses (classes concretas). Caso contrário, as subclasses também acabam se tornando classes abstratas.

segunda-feira, 6 de fevereiro de 2023

Compreendendo public static void main (String[ ] args) Em Java

Vamos explicar as linhas abaixo no código java:

Em programas Java, o ponto de onde o programa inicia sua execução ou simplesmente o ponto de entrada de programas Java é o método main() . Portanto, é um dos métodos mais importantes de Java e ter uma compreensão adequada dele é muito importante.

Sintaxe mais comum do método main():

 class ProgramandoComJava {
    public static void main(String[] args)
    {
        System.out.println("Eu estou aprendendo Java!")
    }
}

Explicação:
Cada palavra na instrução public static void main possui um significado para a JVM.

1.Público: é um modificador de acesso , que especifica de onde e quem pode acessar o método. Tornar o método main() público o torna globalmente disponível. É tornado público para que a JVM possa invocá-lo de fora da classe, pois não está presente na classe atual.

2.Estático: É uma palavra - chave que quando associada a um método, 
torna-se um método relacionado à classe. O método main() é estático para 
que a JVM possa invocá-lo sem instanciar a classe. Isso também economiza 
o desperdício desnecessário de memória que teria sido usado pelo objeto 
declarado apenas para chamar o método main() pela JVM.

3.Vazio: é uma palavra-chave usada para especificar que um método não retorna nada. Como o método main() não retorna nada, seu tipo de retorno é nulo . Assim que o método main() termina, o programa java termina também. Portanto, não faz sentido retornar do método main() , pois a JVM não pode fazer nada com o valor de retorno dele.
4.main: É o nome do método principal Java. É o identificador que a JVM 
procura como ponto de partida do programa java. Não é uma palavra-chave.

5.String [] args: armazena argumentos de linha de comando Java e é uma 
matriz do tipo classe java.lang.String . Aqui, o nome do array String é args, 
mas não é fixo e o usuário pode usar qualquer nome no lugar dele.

Além da assinatura acima mencionada de main, você pode usar public static void main (String args []) ou public static void main (String… args) para chamar a função principal em java. O método principal é chamado se seu parâmetro formal corresponder ao de um array de Strings.

O método principal pode ser int? Se não, por quê?

class GeeksforGeeks { public static int main(String[] args) { System.out.println("GeeksforGeeks"); } }

Java não retorna int implicitamente, mesmo se declararmos o tipo de retorno de principal como int.
Obteremos erro de tempo de compilação

 erro: declaração de retorno ausente


class GeeksforGeeks {
      
    public static int main(String[] args) {
  
        System.out.println("GeeksforGeeks");
        return 0;
    }

} 

Agora, mesmo se retornarmos 0 ou inteiro explicitamente nós mesmos, de int main.
Recebemos erro de tempo de execução.

Erro: o método principal deve retornar um valor do tipo void na classe GeeksforGeeks, por favor
defina o método principal como:
public static void main (String [] args)

História do Java

 Java é uma linguagem de programação orientada a objetos que começou a ser criada em 1991, na Sun Microsystems. Teve inicio com o Green Project, no qual os mentores foram Patrick Naughton, Mike Sheridan, e James Gosling. Este projeto não tinha intenção de criar uma linguagem de programação, mais sim de antecipar a “próxima onda” que aconteceria na área da informática e programação. Os idealizadores do projeto acreditavam que em pouco tempo os aparelhos domésticos e os computadores teriam uma ligação.

A primeira invenção desta equipe foi o *7 (StarSeven), um controle remoto com interface touchscreen, o aparelho tinha um “mascote” que ensinava o usuário a utilizar o controle. Um dos desenvolvedores do controle nomeou a linguagem de programação de Oak, o nome de uma árvore. Este controle foi um antecessor da ideia de interação digital, que esta presente nos televisores digitais atualmente, infelizmente a tecnologia da época não estava preparada para tamanho avanço.

Nesta época, a internet estava ficando cada vez mais popular, e a equipe do Green Project começou a pensar em aplicações para o Oak na internet, onde a palavra chave é interação. Eles conseguiram adaptar a linguagem Oak para a internet, e em 1995 foi lançado o Java, que era uma versão atualizada do Oak para a internet.

A tecnologia Java teve uma enorme utilização, e logo grandes empresas como a IBM, anunciaram que estariam dando suporte ao Java, ou seja, os produtos destas empresas iriam rodar aplicativos feitos em Java,. Estimativas apontam que a tecnologia Java foi a mais rapidamente incorporada na historia da informática. Em 2003 o Java já tinha mais de 4 milhões de desenvolvedores. A ideia inicial do Green Project começou a se concretizar. A linguagem deles passou a ser utilizada em dezenas de produtos diferentes. Computadores, celulares, palmtops, e a maioria dos produtos da Apple.

Em 2006 muitas partes do Java estavam sendo passadas para a licença de Software livre, e a maioria já estava disponível para o publico gratuitamente, tudo Sob licença GNU.  O Java foi uma revolução na interatividade, sua utilização aumenta a cada dia. Java é uma linguagem relativamente simples e dinâmica, permite criar programas e aplicações para a Web sem depender de outra linguagem.

Referencias:
http://www.ufpa.br/dicas/htm/htm-scrip.htm
https://web.archive.org/web/20200815194102/https://www.java.com/pt_BR/download/faq/whatis_java.xml
http://www.criarweb.com/artigos/164.php

Começando a programar em nova linguagem

Começando a programar em nova linguagem
Um dos métodos que utilizo ao aprender uma nova linguagem é a criação de um CRUD colocando
em prática algo útil para minha vida
Como aprender uma nova linguagem de programação sozinho(a) sem ter alguém pra te ensinar?
Cada pessoa pode ter um método diferente, hoje irei falar do qual utilizo na maioria das
ocasiões: através de um CRUD.
CRUD é acrônimo do inglês Create, Read, Update and Delete que são as quatro operações
básicas (criação, consulta, atualização e destruição de dados) utilizadas em bases de
dados relacionais fornecidas aos utilizadores do sistema. Quando você acessa o Facebook,
por exemplo, os posts são exibidos (SELECT), você pode criar uma postagem (INSERT),
editar a ação feita anteriormente (UPDATE) ou apagar uma informação (DELETE). De maneira
extremamente simplificada te forneci um simples exemplo de CRUD.
É importante saber que nem todo sistema precisa ter esse tipo de arquitetura ou ação,
vai depender muito de qual seu objetivo. Uma API, por exemplo pode não se encaixar neste
cenário. Entretanto, estarei falando especificamente de uma aplicação simples que
algumas pessoas denominam de “sistema de padaria”, mas considero que é importante
começar pelo básico.
Comece por uma ideia simples que vai ser útil em sua vida: Torne-se um usuário
Como fã de livros tenho cerca de 450 exemplares em minha estante (isso antes de
comprar meu Kindle — Vale a pena comprar um Kindle?). Se você me perguntar se eu
tenho determinado título eu posso não saber te responder de antemão. Quando o
assunto é a localização do livro na estante a mente ajuda menos ainda, é preciso olhar
livro por livro, no pior caso a complexidade é percorrer os n livros — O(n). Identificou um
problema? Melhor deixar que o sistema procure pra mim o item em um array e ele que se vire e
me dê a
resposta em segundos.
Estou falando de uma solução extremamente simples e que coloquei em prática para
aprender uma nova linguagem. Escutei muitos comentários como:
— Existem vários sistemas que já fazem isso!
— Que perda de tempo! Use o Skoob!
Ok, talvez você pode estar pensando justamente isso. Mas, primeiro: nenhum sistema
fará as coisas do jeito que eu quero (justificativa pessoal) e segundo: Prefiro
começar por algo simples antes de ir para algo mais complicado. Acredite em mim:
não é perda de tempo.
Meu sistema nunca ficará tão bom quando um Skoob (que é uma estante virtual e rede
social dos leitores) que está no ar e tendo manutenção há anos. No entanto,
aprenderei muito com o desenvolvimento e poderei gerenciar minha “biblioteca
particular”.
Escolha suas tecnologias
Retomemos então o exemplo prático da construção de uma aplicação para controle dos
livros. No primeiro momento meu objetivo seria: cadastrar (INSERT), listar (SELECT),
editar (UPDATE) e remover (DELETE) um livro. Ou seja, observe que a base da aplicação
será um simples CRUD.
De antemão o que importa é um sistema funcional com o mínimo de sofisticação. Se
eu fosse construir uma casa não iria começar com uma mansão, iria levantar paredes
dos principais cômodos. Pintura, piso ficaria para depois.
Para começar eu indico os seguintes conhecimentos:
HTML, CSS para construir o front-end para deixar o sistema apresentável, mas lembre-se
que a beleza nesse momento não é o fundamental. Um pouco de JavaScript também pode
ser necessário.
Uma linguagem para o back-end. Existem várias, fica a seu critério: qual linguagem
você quer aprender (C#, JAVA, Node.js, Python, PHP, etc…)? Particularmente eu curto
muito o Java e o NetBeans é foda!
Um banco de dados. Neste caso o mais indicado seria um modelo relacional como o SQL
Server, por exemplo.
Como opcional indico também:
Usar algum repositório para gerenciamento de código, o GitHub talvez seja o mais
famoso. Assim você compreenderá um pouco sobre Git e versionamento.
Usar algum aplicativo para gerenciamento de tarefas. Aqui você pode começar a aprender
a metodologia Ágil usando o Kanban no Trello.
Observe que só com esse projeto simples você aprenderia um pouco de CSS3, HTML5,
JavaScript, SQL Server, Git (!= GitHub), Agile e a linguagem do back. Sabe aquelas
vagas de emprego que pedem várias tecnologias? Às vezes está tudo interligado vai por mim.
Se você souber bem pouco ou até mesmo nada da maioria das tecnologias que estou falando
indico o site W3 Schools.
Levante requisitos e desenhe sua aplicação
Prototipação, a melhor forma de testar e validar um projeto
Suponhamos que você já tenha escolhido qual será o sistema que irá desenvolver e as
linguagens relacionadas. Agora é hora de desenhar o sistema, prototipando as telas e
modelando o banco, caso necessário. É essencial saber de maneira bem clara o que será
desenvolvido para ter maior foco, determinação e compreender o que você estará fazendo,
afinal, o projeto será gerenciado por você mesmo.
Particularmente considero essa parte bem legal, mas é necessário começar pelo simples,
sem recursos complexos ou eventos mirabolantes. Desafios são ótimos mas têm o momento
correto. Comece por recursos essenciais, cortando o que no momento pode não ser tão importante.
Gosto muito de dividir o projeto por versões, entregando as funcionalidades por etapas.
Por exemplo, a primeira versão para o sistema de livros seria o cadastro, exclusão e
visualização dos títulos. Para a segunda versão poderia considerar a edição. Sempre que
termino um passo, testo e enxergo como uma versão que poderia ser entregue ao cliente.
Sim, algo parecido (de longe) com um scrum.
Observe que tudo poderia ser muito mais simples, mas o legal de seguir essas etapas é
que você treina desde o início a fazer algo maior, ter organização e ter controle das
atividades, código e sistema.
****** Comece a programar ******
Agora é hora de colocar a mão na massa e começar a programar. O foco será principalmente
na linguagem de back-end escolhida por você uma vez que ela será o “coração” do sistema.
Será necessário dedicar um tempo para configurar o ambiente em sua máquina, ou seja,
instalar IDE, banco, linguagem, servidor caso necessário.
Para todas as atividades registre no seu aplicativo de gerenciamento de tarefas. Por exemplo:
Ao começar a programar, sempre que chegar em um checkpoint (bem gammer) faça um commit
para registrar a versão e salvar o código na nuvem. Sempre que precisar reverter ou
continuar o trabalho em outra máquina basta contar com a ferramenta.
Piadinha sem graça sobre Git.
Onde buscar informações?
Eu gosto de começar com o CRUD porque existe uma infinidade de materiais aqui no Medium
e na internet em geral para praticamente qualquer tipo de linguagem e tecnologias em geral.
Por exemplo:
Strings de busca: Como fazer um CRUD usando <Back-end> e <banco de dados>
Como fazer um CRUD usando Node.js e MongoDB?
Como fazer um CRUD usando JAVA e SQL?
Ao seguir o tutorial tudo que você precisará fazer será ajustar o exemplo para o
seu contexto, alterando a modelagem do banco, a interface, variáveis, entre outros.
Espero que tenha ajudado a você a ter ao menos uma ideia do ponto de partida para
começar a aprender algo novo, ou pelo menos criar uma força de vontade que muitas vezes nos falta.

quinta-feira, 23 de março de 2017

Para aprender Java

Aqui estão alguns passos que você pode seguir para aprender Java:

  1. Aprender os conceitos básicos: Antes de começar a escrever código Java, é importante entender os conceitos básicos de programação. Isso inclui lógica de programação, estruturas de controle de fluxo, estruturas de dados e algoritmos. Há muitos recursos disponíveis on-line que podem ajudá-lo a aprender esses conceitos.

  2. Configurar seu ambiente de desenvolvimento: Para começar a escrever código Java, você precisa configurar um ambiente de desenvolvimento em seu computador. Existem várias opções disponíveis, como Eclipse, NetBeans e IntelliJ IDEA. Escolha uma opção e siga as instruções para configurar o ambiente.

  3. Aprender a sintaxe Java: A sintaxe Java é a maneira como você escreve código em Java. É importante entender a sintaxe para que você possa escrever código que funcione corretamente. Há muitos recursos on-line disponíveis que podem ajudá-lo a aprender a sintaxe Java.

  4. Escrever código: Uma das melhores maneiras de aprender Java é escrevendo código. Comece com projetos simples e trabalhe em direção a projetos mais complexos à medida que sua habilidade aumenta.

  5. Estudar APIs Java: As APIs Java são um conjunto de bibliotecas que permitem que você escreva código para realizar tarefas específicas. É importante estudar as APIs Java para que você possa usar as bibliotecas apropriadas para o seu projeto.

  6. Praticar e colaborar: A prática é fundamental para aprender Java. Procure projetos em que possa colaborar, como projetos de código aberto ou grupos de estudo, para desenvolver suas habilidades.

  7. Participar de comunidades Java: Existem muitas comunidades Java on-line, como fóruns e grupos de discussão, que podem ajudá-lo a aprender Java. Participar dessas comunidades pode ajudá-lo a aprender novas técnicas e obter suporte de outros desenvolvedores Java.