terça-feira, 4 de abril de 2017

#2: Paradigma: Orientação a Objetos

Olá novamente, hoje eu irei falar de um assunto muito interessante que é sobre Programação Orientada a Objetos, um paradigma que é largamente utilizado nos dias atuais para o desenvolvimento de sistemas, aplicativos e etc.

Bom, lá na década de 60, o paradigma bastante utilizado para desenvolvimento ainda era o estruturado, que a programação segue uma estrutura lógica e sequencial, utilizando as principais linguagens: Pascal e Cobol. Porém o tempo foi passando e os desenvolvedores da época, sentiram de resolver as principais desvantagens do Estruturado como:  O tempo de entendimento do fluxo do código para novos desenvolvedores que forem dar manutenção, mudanças bruscas que acarretavam a alteração em todos os arquivos e funções relacionados.

Para Oliveira (2011, p. 68):
[...] a orientação a objetos surgiu com a necessidade de se criar um
paradigma de programação simples, baseado na percepção humana dos objetos ao seu redor. Este novo paradigma não é apenas um modo de programar, mas uma maneira de pensar e conceber as ideias. 
[...] a utilização do paradigma orientado a objetos está presente em todas as etapas do processo de desenvolvimento [de sistemas], indo
da análise, passando pelo projeto, até as fases de teste e implementação. É um fator decisivo para a construção de sistemas, visando alcançar os objetivos esperados no determinado espaço de tempo com determinado custo (OLIVEIRA, 2011, p. 70). 

E então a orientação a objeto foi criada para tentar compreender, interpretar as características do mundo real para o mundo virtual (classes, objetos, atributos e métodos). (Mais abaixo, explico sobre esses nomes).

 "O termo Programação Orientada a Objetos (POO) foi criado por Alan Kay, autor da linguagem de programação Smalltalk. Mas mesmo antes da criação do Smalltalk, algumas das idéias da POO já eram aplicadas, sendo que a primeira linguagem a realmente utilizar estas idéias foi a linguagem Simula 67, criada por Ole-Johan Dahl e Kristen Nygaard em 1967. Entretanto só veio a ser aceito realmente nas grandes empresas de desenvolvimento de Software por volta dos anos 90." 
 "Alguns exemplos de linguagens orientadas a objetos modernas utilizadas por grandes empresas em todo o mundo são: Java, C#, C++, Object Pascal (Delphi), Ruby, Python, Lisp, etc".
(Wikipédia).

Definições:
Classes: 
As Classes são representações de "coisas" do mundo real, para o mundo virtual, composto por atributos e métodos.

Atributos são as características, dados do que foi representado do mundo real. (Nome, idade, sexo e etc).

Método é como uma atividade, função será executado.

Objetos: É uma ocorrência de uma classe(representação, modelo), que possuem dados (atributos).

Para que a linguagem seja considerada, e entendida como Orientada a objetos é necessário que ela siga os 4 pilares que são: Abstração, Encapsulamento, Herança e Polimorfismo.

Abstração: 
A definição apresentada por Rumbaugh et al. (1994, p. 9) no livro Modelagem e projetos baseados em objetos diz que:

"A abstração consiste na concentração dos aspectos essenciais, próprios, de uma entidade e em ignorar suas propriedades acidentais. No desenvolvimento de sistemas, isso significa concentrar-se no que um objeto é e faz, antes de decidir como ele deve ser implementado. O uso da abstração preserva a liberdade de se tomar decisões evitando, tanto quanto possível,
comprometimentos prematuros com detalhes."
 
Abstração é a técnica de se concentrar no que o objeto irá realizar no sistema, qual será a sua função, ignorando a princípio, os detalhes desse objeto.

Encapsulamento:
O encapsulamento é uma técnica  que dão mais segurança ao sistema, pelo o fato de não permitir, que os detalhes da implementação sejam abertos, visíveis para qualquer desenvolvedor que for utilizar a classe. Um exemplo muito citado é o funcionamento do carro. O motorista não é obrigado a saber, o que de fato acontece quando ele gira o volante a esquerda ou a direita, a única certeza é que ao girar o volante, o carro também virará.

Herança: Conforme definição de Rumbaugh et al. (1994, p. 4),
"Herança é  [...] o compartilhamento de atributos e operações entre classes, com base em um relacionamento hierárquico. "
"Uma classe pode ser  definida de forma abrangente e depois refinada em sucessivas subclasses mais definidas.  [...]  "
Herança é um tipo de relacionamento entre classes. Após a análise do que será desenvolvido, e da abstração do conhecimento sobre a regra de negócio, esse relacionamento propõe hierarquias entre as classes, gerando um reuso de código (ou seja, o mesmo código não precisa ser digitado várias vezes em classes diferentes).

Polimorfismo: É o principio pelo o qual o objeto/classe se comporta ao invocar um método. Dependendo do tipo do objeto, um método mais original, mais "correto" é invocado.
O polimorfismo é a capacidade de que uma superclasse, possua classes filhas com a mesma assinatura de método, mas com implementação diferentes. Um exemplo é da Concessionária de carros, que pretende aumentar o valor dos carros de acordo com cada tipo.
                                   Diagrama de Classes - Concessionária

Neste exemplo, ao invocar o método: carroFerrari.aumentarValor() será diferente de carroFusca.aumentarValor(), pois a linguagem irá analisar de qual tipo é cada objeto e invocar o seu respectivo método.

Esse foi mais um artigo explicando um pouco sobre a história da Orientação a Objetos e alguns conceitos sobre ela. Espero que tenham gostado. Caso tenham alguma dúvida pode comentar abaixo que eu respondo, quando puder.
Até mais ;)

Bibliografias:
RUMBAUGH, James et al. Modelagem e projetos baseados em objetos. Rio de
Janeiro: Campus, 1994



https://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_Orientada_a_Objetos/Introdu%C3%A7%C3%A3o

OLIVEIRA, Artur Elias Hayne. Introdução à orientação a objetos. Revista SQL
Magazine, Rio de Janeiro, n. 89, p. 68-74, 2011.

sábado, 11 de março de 2017

Lição #1: O jogo da Imitação

Olá novamente :)

Nesta época estive estudando sobre alguns assuntos e vi alguns filmes interessantes e vou estar publicando sobre eles.

Hoje falarei sobre um grande filme chamado "O jogo da Imitação" que fala sobre a vida do grande Alan Turing, um matemático e criptoanalista que fez história nos anos de 1912 à 1954.

                                
Contando sobre a sinopse do filme, no tempo da 2ª guerra mundial, uma agência britânica do governo (MI6) recrutou um grupo de matemáticos (Turing passou por uma difícil entrevista para entrar no exército) para quebrar a criptografia utilizada nas mensagens  que os nazistas utilizavam para se comunicar  e assim descobrir onde seria o próximo ataque que fariam no dia seguinte, porém como a criptografia para a época já era muito avançada e dificil de se quebrar, então Turing decide criar uma máquina junto com a personagem Joan Clarke para decifrar o código mais rápido, trabalhando com tentativas e erros (para a máquina, cada tentativa seria a cada loop feito em poucos segundos). Porém nas primeiras tentativas, a máquina  não conseguia desvendar o código mais rápido para o próximo ataque dos nazistas.
Durante a construção, Alan se sentia muito seguro de si que conseguiria atingir o objetivo com pouca ajuda, deixando-o prepotente ao convívio com os outros colegas. Por conta do tempo que a máquina levava para resolver a criptografia, vidas eram mortas em campo de batalha. Até que um dos chefes da MI6 decide quebrar a máquina e demitir Turing, porém no último instante os colegas de Turing decidem apoiá-lo e conseguem mais um mês para que a máquina comece a produzir resultados. E assim Turing começa a aprender uma das valiosas lições da vida: O trabalho em conjunto, juntos o grupo tem mais produtividade e o projeto tem mais chance de dar certo. 

Mas voltando ao filme, por conta da ajuda de uma amiga da Joan Clarke (companheira do Turing), eles conseguiram a informação que a criptografia segue um padrão, de sempre começar com 5 letras, com isso faz com que a máquina reduza o número de tentativas e aumenta o tempo de resposta. E assim eles conseguiram desvendar todas as mensagens criptografadas enviadas pelos os nazistas. Após esse episódio acontece algumas situações que não irei falar aqui e deixo para que você assista o filme e descubra o resto ;)

O que eu pude aprender deste filme é uma grande lição que está muito acima do que ter habilidades com matemática e criptografia, o ensinamento é aprender a trabalhar em grupo. Nós desenvolvedores, analistas e etc, diariamente, mensalmente recebemos projetos e temos que nos reunir e conviver com outras pessoas que possuem conhecimentos diferenciados, da mesma forma como foi retratado no filme, onde a organização (MI6) "contratou" alguns criptoanalistas (aí você pode comparar com desenvolvedores ou analista de sistemas) para resolver um problema, no mercado de trabalho, eu creio que não seja tão diferente do que foi retratado, e por conta da soberba de Turing, o número de mortalidade do grupo dos Aliados (Aliados vs. Eixo) nesses confrontos seria reduzido e o tempo da guerra poderia ser menor, ou talvez o projeto (máquina) alcançaria os primeiros resultados com o prazo bem menor do que foi.

Eu, Hiran, sei o quanto é dificil trabalhar com pessoas, mas levo cada experiência como aprendizado, trabalhar com pessoas temos vantagens como: "Um ajuda o outro e assim (independente do nível de conhecimento de cada um), o projeto saí com sucesso". Esta foi a grande lição que aprendo com esse filme.

Pretendo fazer mais publicações desse tipo e outras mais técnicas também. Caso queira adicionar alguma informação caso eu não tenha citado aqui, pode comentar abaixo que eu estarei respondendo o mais breve possível. Espero que vocês tenham gostado. 
Obrigado e até a próxima ;)

sexta-feira, 17 de fevereiro de 2017

System.out.println("Hello World");

Olá, Sou Hiran Neri, sou estudante de desenvolvimento de sistemas e este é o meu blog, onde estarei postando conteúdo sobre tecnologias, linguagens de programação, banco de dados, infraestrutura e alguns assuntos que estudo no meu dia a dia. Terá postagens-tutoriais, onde explicarei passo a passo como fazer instalações e configurações. Espero com esse blog poder contribuir ainda mais para a comunidade e aprender ainda mais.
Caso queiram entrar em contato comigo tem o meu:
Twitter: @devhiranneri
Linkedin: https://br.linkedin.com/in/hiranneri


Até + ;)