Sejam bem-vindos ao desafio: APRENDENDO NA PRÁTICA O PARADIGMA DE ORIENTAÇÃO A OBJETOS. Desafio este que tive a honra de co-criar com a plataforma de cursos online DIGITAL INNOVATION ONE 💛🧡 e disponibilizado de forma gratuita para a comunidade dos desenvolvedores Java.
5 | 💎 O objetivo principal é colocar em prática umas das principais ferramentas da OO: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA E POLIMORFISMO, através de um projeto Java.
6 |
7 |
8 |
9 |
🛑 Pré-Requisitos
10 |
11 |
12 | ✅ Conhecer a sintaxe da Java
13 | ✅ Java JDK 11
14 | ✅ IDE para desenvolvimento Java (usarei IntelliJ)
15 | ✅ Git
16 | ✅ Conta no GitHub
17 |
18 |
19 |
20 |
👣 Passo-a-Passo
21 |
22 |
23 | 1. Vamos ABSTRAIR o DOMÍNIO Bootcamp e MODELAR seus ATRIBUTOS E MÉTODOS
24 | 2. Criaremos as CLASSES: Bootcamp, Cursos, Mentorias e Devs e vamos relaciona-las
25 | 3. As CLASSES Curso, Mentoria e Devs também serão MODELADOS, ou seja, criaremos seus ATRIBUTOS E MÉTODOS
26 | 4. Para que o código fique mais legível e de fácil manutenção, iremos utilizar de algumas das ferramentas que o PARADIGMA DE ORIENTAÇÃO A OBJETOS (POO) nos oferece: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA E POLIMORFISMO
27 | 5. E para representar CLASSES que foram criadas e relacionadas, iremos transforma-las em OBJETOS
28 |
29 |
30 | ----
31 |
32 |
📚 Paradigma de Programação Orientado a Objetos (POO)
33 |
34 |
35 | A visão de Orientação a Objetos (OO) é aquela de um mundo de objetos que interagem.
36 | Este paradigma é um modelo de análise, projeto e programação baseado na aproximação entre o mundo real e o mundo virtual, através da criação e interação entre classes, atributos, métodos, objetos, entre outros.
37 | São 4 os pilares principais do POO: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA E POLIMORFISMO.
38 |
39 |
40 |
41 |
🔺 ABSTRAÇÃO:
42 |
43 |
44 | Habilidade de concentrar-se nos aspectos essenciais de um domínio, ignorando características menos importantes ou acidentais. Nesse contexto, objetos são abstrações de entidades existentes no domínio em questão.
45 |
46 |
🔺 ENCAPSULAMENTO:
47 |
48 |
Encapsular significa esconder a implementação dos objetos. O encapsulamento favorece principalmente dois aspectos de um sistema: a manutenção e a evolução.
49 |
50 |
🔺 HERANÇA:
51 |
52 |
Permite que você defina uma classe filha que reutiliza (herda), estende ou modifica o comportamento de uma classe pai. A classe cujos membros são herdados é chamada de classe base. A classe que herda os membros da classe base é chamada de classe derivada.
53 |
54 |
🔺 POLIMORFISMO:
55 |
56 |
Capacidade de um objeto poder ser referenciado de várias formas. Cuidado, polimorfismo não quer dizer que o objeto fica se transformando, muito pelo contrário, um objeto nasce de um tipo e morre daquele tipo, o que pode mudar é a maneira como nos referimos a ele. A capacidade de tratar objetos criados a partir das classes específicas como objetos de uma classe genérica é chamada de polimorfismo.
57 |
58 |
‼️ CONCEITOS FUNDAMENTAIS POO ‼️
59 |
60 |
🔻 DOMÍNIO:
61 | Domínio da aplicação, também conhecida como camada de negócio ou de objetos de negócio, é aquela onde estão localizadas as classes que fazem parte do domínio do problema, ou seja, classes correspondentes a objetos que fazem parte da descrição do problema.
62 |
63 |
🔻 CLASSE:
64 | Um elemento do código que tem a função de representar objetos do mundo real. Dentro dela é comum declararmos atributos e métodos, que representam, respectivamente, as características e comportamentos desse objeto.
65 |
66 |
🔻 ATRIBUTO:
67 | Atributos são, basicamente, a estrutura de dados que vai representar a classe. Os atributos também são conhecidos como VARIÁVEL DE CLASSE, e podem ser divididos em dois tipos básicos: atributos de instância e de classe.
68 |
69 |
🔻 VARIÁVEL:
70 | Uma “região de memória (do computador) previamente identificada cuja finalidade é armazenar os dados ou informações de um programa por um determinado espaço de tempo”.
71 |
72 |
🔻 MÉTODO:
73 | Os métodos representam os estados e ações dos objetos e classes.
74 |
75 |
🔻 OBJETO:
76 | Em POO, objeto é um "molde" de uma determinada classe, que passa a existir a partir de uma instância da classe. A classe define o comportamento do objeto, usando atributos (propriedades) e métodos (ações).
77 | Objeto em ciência da computação, é uma referência a um local da memória que possui um valor. Um objeto pode ser uma variável, função, ou estrutura de dados.
78 |
79 |
🔻 INSTÂNCIA:
80 | Uma instância de uma classe é um novo objeto criado dessa classe, com o operador new. Instanciar uma classe é criar um novo objeto do mesmo tipo dessa classe. Uma classe somente poderá ser utilizada após ser instanciada.
81 |
82 |
83 |
84 | ------------
85 |
86 |
87 |
🧮 Linguagem de Programação vs Paradigma de Linguagem de Programação
88 |
89 |
90 |
✨ LINGUAGEM DE PROGRAMAÇÃO:
91 | É uma linguagem formal que, através de uma série de instruções, permite que um programador escreva um conjunto de ordens, ações consecutivas, dados e algoritmos para criar programas que controlam o comportamento físico e lógico de uma máquina.
92 | Seguem alguns exemplos de como as linguagens de programação podem ser classificadas:
93 |
94 | 🔺 Nível de abstração:
95 | Baixo Nível: Assembly
96 | Médio Nível: C, C++, D, Objective C, etc.
97 | Alto Nível: Java, C#, PHP, Javascript, etc.
98 | Altíssimo Nível: Python, Ruby, Elixir, etc.
99 |
100 | 🔺 Paradigma de programação:
101 | Programação Estruturada: C, Pascal, Ada, etc.
102 | Programação Orientada a Objetos: Java, C#, C++, Objective C, D, etc.
103 | Programação Funcional: Lisp, Scheme, Erlang, Elixir, etc.
104 |
105 | 🔺 Linguagens classificadas pela arquitetura da aplicação:
106 | Desktop: C, C++, Object Pascal, Java, etc.
107 | Web: PHP, Ruby, Javascript, Java, etc.
108 |
109 | 🔺 Tipo de execução:
110 | Linguagens compiladas: C, C++, Pascal, D, GO, etc.
111 | Linguagens Interpretadas: Python, Ruby, PHP, Javascript, etc.
112 | Linguagens Hibridas: Java, Erlang, Elixir, etc.
113 |
114 |
115 |
✨ PARADIGMA DE LINGUAGEM DE PROGRAMAÇÃO
116 |
117 | É um conjunto de características que podem ser utilizados para categorizar determinado grupo de linguagens. Um paradigma pode oferecer técnicas apropriadas para uma aplicação específica.
118 |
119 | PARADIGMAS PRINCIPAIS e SEUS SUBPARADIGMAS
120 |
121 | 🔸 1. Paradigma Imperativo
122 | Neste paradigma, o programa descreve o processamento necessário para solucionar o problema. Assim, o paradigma imperativo é caracterizado por execução sequencial de instruções, pelo uso de variáveis que representam posições de memória e pelo uso de instruções de atribuição que alteram os valores dessas variáveis.
123 | Vejamos alguns Subparadigmas do Paradigma Imperativo e exemplos linguagens de programação que adotam esses subparadigmas.
124 |
125 | 🔸 1.1 Paradigma estruturado: ALGOL 58 e ALGOL 60
126 | 🔸 1.2 Paradigma concorrente: Java e Ada
127 | 🔸 1.3 Paradigma Orientado a Objetos: Smalltalk e Java
128 |
129 | 🔹 2. Paradigma Declarativo
130 | Este paradigma é o modelo no qual os resultados são descritos, mas os passos para chegar aos resultados não são estabelecidos.
131 | Vejamos alguns Subparadigmas do Paradigma Declarativo e exemplos linguagens de programação que adotam esses subparadigmas:
132 |
133 | 🔹 2.1 Paradigma Funcional: Lisp e Haskell
134 | 🔹 2.2 Paradigma Lógico: Prolog
135 |
136 |
137 |
🤝 Contribuindo
138 |
139 |
140 | Este repositório foi criado para fins de estudo, então contribua com ele.
141 | Se te ajudei de alguma forma, ficarei feliz em saber. E caso você conheça alguém que se identidique com o conteúdo, não deixe de compatilhar.
142 |
143 | Se possível:
144 | ⭐️ Star o projeto
145 | 🐛 Encontrar e relatar issues
146 |