Introdução

Atualmente, instalar e utilizar aplicativos tem se tornado rotina para pessoas que gostam de tecnologia, seja para suas tarefas ou diversão.

Muitas tecnologias e métodos estão relacionados com o desenvolvimento de um aplicativo.

Seria impossível mencionar tudo aqui, além do mais não é nosso objetivo nessa seção. Portanto, faremos um resumo do que utilizamos.

Um breve exemplo de uma das abordagens seria:

  • Para qual dispositivo sua aplicação será desenvolvida ?

Algumas respostas seriam: Smartphone,Tablet, Notebook ou simplesmente um Microcomputador.

O tamanho da tela do dispositivo é um ponto a ser considerado, o layout do APP é o modelo usado nas telas, e ainda existe uma tecnica de programação que se o APP for desenvolvido para um tamanho de tela, não serve em telas com tamanhos diferentes.

Assim, a APP fica limitada ao layout desenvolvido.

Um layout responsivo, é uma tecnica de desenvolvimento que possibilita o acesso ao APP por qualquer dispositivo, por isso, adotamos essa tecnologia em nosso layout.

Tecnologia

Esse próprio site é um exemplo do layout responsivo que usamos, integrado às demais tecnologias:

  • Java EE.

  • Spring Boot, Spring Security.

  • HTML, CSS e Javascript.

  • Thymeleaf.

  • Hibernate, JPA e Bean Validation.

  • Tecnica de programação baseada em código limpo e melhores práticas.

  • Hospedagem na nuvem que dispensa instalação do APP e permite que seja executado por qualquer dispositivo que tenha um navegador.

Nada melhor que um exemplo prático usando essas tecnologias, acesse o aplicativo abaixo e confira.

Clique aqui, e acesse a App Brewer como exemplo.


JAVA e Orientação a Objeto

Mas o que está por trás do desenvolvimento desses aplicativos ?

Considerando que existem várias plataformas no mercado, para se desenvolver um aplicativo, ele deve ser compilado especificamente para cada plataforma, na prática, um aplicativo compilado para android não rodará em nenhum outro sistema como IOS, LINUX, MAC-OS, WINDOWS, etc.

Resumindo, o arquivo executável (aplicativo) construido em uma plataforma não pode ser executado em outra.

Programação Orientada a Objeto

O que é Programação Orientada a Objetos?

  • É um tipo de programação que permite a criação de elementos, onde dados e procedimentos podem ser agrupados, segundo sua função. Esses elementos são conhecidos como classes.

O que é uma classe?

  • Uma classe é um conjunto de procedimentos (métodos) que exercem ações sobre dados (atributos).

    Ao criar uma classe o objetivo é agrupar métodos e identificadores que estejam relacionados. Por exemplo, uma classe Cliente pode ter atributos tais como nomeCliente, enderecoCliente e outros dados relacionados ao cliente; exemplos dos métodos que atuam sobre os dados podem ser inserirCliente, excluirCliente, alterarCliente.

    Enfim, a classe é o código que declara atributos e métodos. Exemplo de uma classe em Java:

O que é um objeto?

  • Um objeto é uma instância de uma classe, ou seja, uma porção de memória é alocada para armazenar os dados e os métodos declarados na classe.

    Enfim, um objeto é a instanciação de uma classe na memória.

O que é Encapsulamento?

  • É a capacidade de restringir o acesso a elementos de uma classe através do uso de qualificadores.

    Por exemplo, em C++ existem os seguintes qualificadores: private, public e protected. Em Java existem todos os qualificadores de C++ e mais um qualificador conhecido como package.

    A função dos qualificadores é definir o acesso aos dados e métodos de uma classe. O atributo public, por exemplo, possibilita que determinado método ou atributo seja acessado diretamente por um código externo à classe.

    Abaixo se pode observar uma tabela com as características dos qualificadores:

Exemplo de uma classe em Java utilizando os qualificadores:

O que é Herança?

  • A Herança provê a capacidade de reutilizar funcionalidades de determinada classe.

    A finalidade é que a subclasse (aquela que herda) inclua o comportamento da superclasse (aquela que contém o comportamento a ser herdado) e adicione mais funcionalidades.

A Figura acima representa que uma subclasse está herdando características da superclasse e adicionando alguma funcionalidade.

A Herança pode ser múltipla onde uma Subclasse herda características de diversas Superclasses.

Abaixo é apresentado um exemplo de herança em Java (Java não suporta herança múltipla, C++ suporta):

O que é Sobrecarga de métodos e operadores?

  • Sobrecarregar um método ou operador é permitir que se utilize o mesmo nome de chamada para operar sobre uma variedade de tipos de dados.

    Podemos ter diversos métodos declarados com o mesmo nome dentro de uma classe, entretanto tais métodos não podem ter tipos e número de parâmetros idênticos.

    Por exemplo, pode-se ter o método setValor(float x) e setValor(float x, float y) onde o tipo do parâmetro é o mesmo, mas o número de parâmetros é diferente. Errado, portanto seria ter o método setValor(float x) e setValor(float y), pois o tipo do parâmetro é idêntico e o número de parâmetros também.

    Como saber se é válida a sobrecarga de métodos?

Java suporta somente sobrecarga de métodos. C++ suporta sobrecarga de métodos e operadores.

Abaixo é apresentado um exemplo de classe em Java que tem um método sobrecarregado:

A sobrecarga de operadores é oferecida para classes que desejem manipular adição, subtração etc.

A sobrecarga de operadores não é suportada por Java. Em C++ é possível utilizar sobrecarga de operadores.

Abaixo é apresentado um exemplo em C++ de sobrecarga de operador:

No exemplo acima é declarado um método

Vetor2D operator+ (Vetor2D v2);

Onde existe a sobrecarga do operador + (adição), quando se declara uma instância da classe Vetor2D pode-se utilizar o operador adição como abaixo:

Vetor2D v1 = new Vetor2D;
Vetor2D v2 = new Vetor2D;
Vetor2D v3 = v2 + v1;

obs. Além de utilizar o operador sobrecarregado + (adição), está se utilizando o construtor Vetor2D(Vetor2D v2). Construtores serão apresentados mais abaixo.

O que é Polimorfismo?

  • É a troca de mensagens entre métodos de uma classe para com suas superclasses e assim sucessivamente. O polimorfismo pode ser observado através de métodos virtuais de uma classe como representado abaixo:

Na Figura acima temos um diagrama UML que representa a implementação de duas classes: Madeira e Cadeira.

A classe Madeira será a superclasse (classe mãe), e a classe Cadeira (classe filha) herdara as funcionalidades da classe Madeira.

Veja abaixo, como elas ficaram codificadas em Java:

Atenção!!! Observe pela figura abaixo, que na classe Cadeira, não existe o método escreveTela() re-escrito, e mesmo assim, o compilador identifica que a instância é do objeto Cadeira, e por herança, o executa:

O que acontece é que o compilador procura os métodos sempre da classe que se está fazendo as chamadas em direção às superclasses:

O que são Construtores e Destrutores?

  • Construtores são métodos especiais que são chamados no processo de instanciação de um objeto no sistema. Observe o exemplo em Java abaixo:

Todo construtor recebe o mesmo nome da classe, no exemplo acima existem dois construtores sobrecarregados, um que não recebe nenhum parâmetro e outro que recebe uma String nome.

Quando um objeto do tipo classe cliente é criado isto pode ser feito de duas formas (pois temos dois construtores):

Primeira Forma:

cliente c1 = new cliente();

Obs. Utilizando o construtor sem parâmetros que inicia o objeto do tipo cliente executando o código contido neste construtor

Segunda Forma:

cliente c2 = new cliente(“o cliente”);

Obs. Utilizando o construtor que recebe como parâmetro uma String que identifica o nome do cliente – é executado o código contido no interior do construtor

O construtor é chamado somente na instanciação do objeto.

Os Destrutores são métodos especiais que são chamados na finalização do objeto. Quando as posições de memória que um objeto ocupa devem ser liberadas, o destrutor é chamado. O destrutor em C++ tem o nome da classe precedido por ~ (til).

Observe o exemplo em C++ abaixo:

Quando um objeto do tipo Vetor2D estiver sendo removido da memória o destrutor é chamado e nele devem conter chamadas que liberem a memória que está sendo utilizada pelo objeto (liberar a memória heap).

Quando uma instância é criada utilizando a palavra new ela é alocada na memória heap, as demais instâncias, tais como int, long e outras são alocadas na stack (pilha do sistema). A stack é liberada automaticamente quando um programa ou objeto morre, entretanto a memória heap não é liberada automaticamente.

Portanto deve-se liberar a memória que foi alocada na heap através do uso da chamada delete sobre as instâncias declaradas com o uso de new.

Por exemplo, para criar:

cliente c1 = new cliente();

Para liberar a memória heap

delete c1;

Portanto o objetivo do destrutor é liberar a memória heap (alocada usando new) que não é desalocada automaticamente. A stack é desalocada automaticamente quando um objeto ou instância morre.

Plataforma e Linguagem JAVA

Introdução

É uma linguagem de programação totalmente orientada a objeto, desenvolvida na década de 90 por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems.

Considerando os vários sistemas operacionais existentes no mercado, para se executar um aplicativo, ele deve ser compilado separadamente para cada plataforma, sendo assim, o App compilado para windows não rodará em nenhum outro sistema como LINUX, MAC-OS, etc.

Concluindo, o arquivo binário que executa em uma plataforma não pode ser executado em outra, porque é específico de cada ambiente operacional.

  • Um App escrito na linguagem Java é compilado para um arquivo na forma de byte-codes podendo ser executado em qualquer ambiente operacional que possua uma Máquina Virtual Java. Esta portabilidade é possível porque o núcleo da plataforma Java é a Máquina Virtual Java.

Plataforma Java

É o nome dado ao ambiente computacional, nesse caso, originou-se na empresa Sun Microsystems, adquirida pela Oracle em 2008.

O desenvolvedor de App cria programas para este ambiente através da linguagem de programação Java e de um conjunto de ferramentas de desenvolvimento. Assim, a plataforma não se refere a um sistema operacional ou hardware específico, mas a um programa chamado de máquina virtual, e a um conjunto de bibliotecas que disponibilizam funcionalidades comuns.

O universo Java é um vasto conjunto de tecnologias, composto por três plataformas principais que foram criadas para segmentos específicos de aplicações:

  • Java SE (Standard Edition). É a base da plataforma e inclui o ambiente de execução e as bibliotecas comuns.

  • Java EE (Enterprise Edition). A edição voltada para o desenvolvimento de aplicações corporativas.

  • Java ME (Micro Edition). A edição para o desenvolvimento de aplicações para dispositivos móveis e embarcados.

Além disso, pode-se destacar outras duas plataformas Java mais específicas:

  • Java Card. Voltada para dispositivos embarcados com limitações de processamento e armazenamento, como smart cards e o Java Ring.

  • JavaFX. Plataforma para desenvolvimento de aplicações multimídia em desktop/web (JavaFX Script) e dispositivos móveis (JavaFX Mobile).

Tecnologias Java

A plataforma Java é constituída de um grande número de tecnologias, cada uma provê uma porção distinta de todo o ambiente de desenvolvimento e execução de software. Os usuários finais, tipicamente, interagem com a máquina virtual Java (Java Virtual Machine ou JVM) e um conjunto padrão de bibliotecas de classe.

Existe um grande número de maneiras de se utilizar uma aplicação Java, incluíndo applets embutidas em páginas web, aplicativos de uso geral em desktops, aplicativos em aparelhos celulares e em servidores de aplicações para Internet.

Os desenvolvedores de aplicações em Java utilizam um conjunto de ferramentas de desenvolvimento, o JDK ( Java DevelopmentDevelopment Kit ).

Ambiente de Execução Java

Um programa escrito para a plataforma Java necessita de dois componentes para ser executado:

  • A Máquina Virtual Java.

  • E um conjunto de bibliotecas de classe que disponibilizam uma série de serviços para esse programa.

O pacote de software que contém a máquina virtual e a biblioteca de classes é conhecido como JRE (Java Runtime Environment).

JVM ( Java Virtual Machine )

O coração da plataforma Java é o conceito de um processador "virtual", que executa os programas formados por bytecodes Java. Este bytecode é o mesmo, independentemente do hardware ou sistem operacional em que o programa será executado.

A plataforma Java disponibiliza um interpretador, a JVM, que traduz, em tempo de execução, o bytecode para instruções nativas do processador. Isto permite que uma mesma aplicação seja executada em qualquer plataforma computacional que possua uma implementação da máquina virtual.

Desde a versão 1.2 da JRE, a implementação da Sun da JVM(hoje Oracle) inclui um compilador just-in-time (JIT). Com este compilador todo o bytecode de um programa é transformado em instruções nativas e carregado na máquina virtual em uma só operação, permitindo um ganho de desempenho muito grande em comparação com a implementação anterior, onde as instruções em bytecode eram interpretadas uma por vez.

O compilador JIT pode ser projetado de acordo com a plataforma ou hardware de destino, e o código que ele gera pode ser otimizado com base na observação de padrões de comportamento dos programas.

A plataforma Java não é a primeira plataforma baseada em uma máquina virtual, mas é de longe a mais conhecida e a que alcançou maior sucesso. Anteriormente esta tecnologia era utilizada na criação de emuladores para auxílio ao projeto de hardware ou de sistemas operacionais.

A plataforma Java foi desenhada para ser implementada inteiramente em software, enquanto permitindo a sua migração de maneira fácil para plataformas de hardware de todos os tipos.

Java JRE Linux Download (Java Runtime Environment)

Disponível Version 8 Update 421

Linux RPM 32 bits

Linux tarball 32 bits

Linux RPM 64 bits

Linux tarball 64 bits

Forma de Contratação

Normalmente ocorre com uma combinação de horas fixas mensais, flexibilizadas de acordo com a necessidade e condições da empresa.

Sob contratação, o projeto pode ser disponibilizado numa plataforma de hospedagem de código-fonte, como por exemplo o GitHub. Mas também pode ser disponibilizado no ambiente da própria empresa contratada.

Obs. fornecemos NFS-e.