--- title: Object Oriented Programming (OOP) localeTitle: Programação Orientada a Objetos (OOP) --- ## Esboço * Por que orientado a objeto (doravante abreviado como OO)? * Conceitos OO * Qual o proximo? ## Porquê OO? Nesse paradigma, entidades são representadas como dados do mundo real. Por exemplo, queremos representar um cachorro. No paradigma OO, nós simplesmente criamos uma classe chamada "dog", e damos a ela atributos (cor, idade, sexo, etc) e comportamento (latir, correr, comer, etc). Comportamento é alterado através de "métodos" (funções em palavras simples) que fazem alterações nos atributos. ## Conceitos OO O que torna a programação OO poderosa é sua capacidade de fazer o seguinte: * Herança * Polimorfismo * Encapsulamento * Abstração Na programação procedural, simplesmente criamos variáveis ​​e as modificamos quando necessário. No entanto, na programação OO, podemos literalmente simular objetos do mundo real. O encapsulamento é conseguido através da criação de uma classe específica para uma entidade, por exemplo, cão. Objetos dessa classe são criados, e nada mais são do que instâncias da classe. Cada objeto possui seus próprios valores de atributo. Outro conceito extremamente útil é o da herança. A ideia é que uma classe possa herdar atributos e comportamentos de uma classe base. Por exemplo, ao criar um jogo, temos um jogador e um inimigo. Podemos criar uma classe base chamada pessoa e dar a ela atributos como nome, idade, sexo, etc. O comportamento da pessoa pode ser caminhar e pular. Um jogador e um inimigo podem então herdar essas "qualidades" da pessoa e podem ter qualidades adicionais como matar, pontuar, comer, etc. Isso ajuda a reutilizar o código e tornar a estrutura do rcode muito mais limpa. A ocultação de dados é outro recurso interessante. Em OO, temos a noção de atributos privados e públicos. Atributos privados podem ser acessados ​​e modificados somente por métodos dessa classe em particular, enquanto dados públicos podem ser modificados de qualquer lugar no programa (dentro do escopo obviamente). ## Qual o proximo? Escolha uma linguagem OO e construa um jogo básico baseado em terminal para ilustrar esses conceitos.