Contextualização sobre Orientação a Objetos
Tags: braziliandevs, oop, java, computerscience
Published: 2022-06-07 18:26:02

Esse texto é parte do conceito de aplicativo que criei para a faculdade, disponível [aqui](https://dev.to/guithomas/conceito-de-app-para-gerenciamento-de-equipamentos-31lg).

**Paradigmas de Programação**

Um paradigma de programação nada mais é que a forma como o programador e equipe conduziram a construção do sistema ou módulo programado, é uma maneira de padronizar e determinar uma visão para aquilo que vai ser construído. Conforme as tecnologias foram evoluindo, podemos observar também a evolução constante das linguagens e seus paradigmas: Os primeiros computadores eram programados somente através de código binário, fomos evoluindo para o Assembly, Algol, Linguagem B, Linguagem C, C++, C#, Java, Python, Go e de diversas maneiras. Importante deixarmos claro que não existe uma linha de sucessão entre as linguagens, mas sim que foram sendo criadas conforme necessidades diferentes surgiam, e poderes de processamento maior são mais disponíveis. 

O Python por exemplo é uma linguagem com a sintaxe derivada do C, e inclusive sua implementação funciona por C, hoje a linguagem é usada principalmente para Análise de dados como Machine Learning e Data Science e também no desenvolvimento de projetos web. Cada linguagem citada possui atualizações recentes e continua em uso em determinadas funções, devemos sempre ver a linguagem como uma ferramenta que vai nos ajudar a alcançar o objetivo desejado. 

O paradigma de orientação a objetos é um entres os quatro (4) paradigmas de programação, ele se baseia na interação entre diversas unidades que chamamos de objetos. É uma maneira de aproximar o mundo real do mundo da computação, facilitando a interpretação de conceitos para introdução em sistemas.

Com a Orientação a Objetos, a classe é uma estrutura fundamental e será nosso molde das estruturas, um exemplo básico do funcionamento:

Em um sistema de estoque de vendas de carros, um carro certamente estará em nosso sistema como uma classe, pois todos os carros possuem um padrão mais ou menos definido: eles têm quatro (4) rodas, um volante, aceleram, etc. Além de outras características como a Marca, o Nome do Modelo, ano de fabricação. 

Podemos declarar então, usando Java no exemplo, o ano de fabricação e a marca do veículo:

`public class Carro {
          		  public int ano;
                            public String marca; 
                                           }`

Com isso, podemos definir as características dos veículos em nosso sistema, declarando agora os objetos que usarão essas características da seguinte maneira:

`              Carro boxter = new Carro();
                boxter.ano = 2005
                boxter.marca = “porsche”
`

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dmy7h1fjkj3v1eyes0ye.jpeg)

Agora temos como uma instância da class Carro, o objeto boxter, com seus atributos de marca e ano, e podemos definir muitas outras instâncias usando a mesma classe anterior. Os objetos também podem ter ações em nosso sistema, como por exemplo de um carro, acelerar e frear. Em Orientação a Objetos a ação será chamada de Método, e podemos declarar esse método como:

`        public void acelerar() {
                     System.out.println(“De zero a cem em 5 segundos!”);
                                              }
`

Logo, criar sistemas e aplicativos utilizando linguagens Orientadas a Objeto traz vantagens como ser mais rápido em criar algo pois podemos reutilizar o código, utilizando dos objetos que já criamos, não sendo necessário criar nada do zero; É fácil de realizar alterações pois podemos alterar métodos e classes, ou criar novas, que impactam todo o sistema; além de ser mais fácil de ser entendido por outro programador que estiver lendo um código já existente. 


[**Usando POO no conceito de app**](https://dev.to/guithomas/conceito-de-app-para-gerenciamento-de-equipamentos-31lg)
	
Herança é um dos conceitos principais quando tratando-se de linguagens Orientadas a Objeto, trata-se da possibilidade de criar uma classe nova em nosso sistema, a partir de uma classe que já existe previamente, criando-se uma subclasse. 

Em nosso aplicativo, a nossa chamada superclasse ou classe "mãe" será a Usuarios, e nossas subclasses serão a Professores e Administradores.
 
A superclasse Usuário terá a informação de ID para o aplicativo, a subclasse Professores terá então por definição o ID embarcado, e as opções de acesso a reserva de equipamento e reserva de sala, por sua vez, a subclasse Administradores será uma subclasse de Professores, contendo ID, os métodos de reserva de equipamentos e também o acesso a alterar, incluir e excluir professores e equipamentos no nosso banco de dados SQL. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kf3hpx1aox3xoshbda39.png)

Em Kotlin, podemos realizar essas operações de herança declarando no cabeçalho da classe após dois pontos (Classes em Kotlin ficam ao final). A estrutura então se define assim:

`open class Usuario()
           class Professor() : Usuario()
`