Conceitos gerais de Programação Orientada a Objetos – 01
Programação Orientada a Objetos – Alguns conceitos explicados
Olá pessoal! Neste artigo vou explicar, de forma sucinta, alguns dos principais conceitos presentes na disciplina de Programação Orientação a Objetos. Meu intuito não é o de me aprofundar nesses conceitos, mas sim de apresentá-los inicialmente, como uma espécie de sumário, de modo a apresentar e esclarecer algumas ideias fundamentais da matéria.
Posteriormente vamos nos aprofundar em cada conceito, inclusive com exemplos de aplicações nas linguagens de programação mais comuns da atualidade.
Definição
Programação Orientada a Objetos – POO (Object-Oriented Programming – OOP) é um método de programação (estilo) que usa tipos de dados personalizados. Em vez de operar apenas com tipos de dados primitivos, podemos construir novos tipos de dados, conforme nossa necessidade (necessidade da aplicação).
Esses novos tipos de dados, que chamamos de classes, podem conter estruturas semelhantes a funções, denominadas métodos, e variáveis internas, chamadas de atributos.
As classes são estruturas semelhantes a strucutures e unions, utilizadas em programação estruturada, porém tem características diferenciadas, como:
- Classes possuem suas próprias funções (métodos)
- Podem ter dados privados ou protegidos
- Podem herdar características de outras classes para absorver sua funcionalidade
- Cada classe pode agir como se fosse uma entidade completamente separada do resto do programa
Uma das principais ideias em orientação a objetos é o conceito de Abstração, que consiste em esconder do usuário os detalhes de um processo. Em OOP, o programador (que é o usuário) não precisa conhecer todos os detalhes de implementação intrincados de uma classe, basta que saiba como utilizá-la em seu programa.
Membros de Classe
Existem dois tipos de membros (elementos internos) em uma classe: atributos e métodos.
- Atributos: “Conteineres” onde um objeto armazena dados, de forma similar a Variáveis. Armazenam informações sobre um objeto. Por exemplo, um objeto “Pessoa” pode ter um atributo “Nome” e um atributo “Altura” para armazenar essas duas propriedades de uma pessoa em particular.
- Métodos: São funções e procedimentos vinculados a um objeto, as quais permitem que o objeto realize (ou sofra) ações. Por exemplo, um objeto Pessoa pode ter os métodos “andar()”, “comer()” e “dormir()”, que descrevem como essas ações são realizadas. Note o uso dos parênteses para descrever o nome do método.
Tipos de linguagens OO (Orientadas a Objetos)
Existem, fundamentalmente, dois tipos de linguagens orientadas a objetos:
- OO Suportada: Tratam-se de linguagens procedurais que possuem um componente de programação OO inserido. Como exemplos, podemos citar as linguagens PHP, Visual Basic, COBOL e Objective C.
- OO Pura: São linguagens nativamente orientadas a objetos, como Java, Scala, Smalltalk e C#. Algumas dessas linguagens, como o Java, possuem alguns elementos procedurais disponíveis.
Níveis de acesso
Os níveis de acesso em uma classe determinam a visibilidade de seus componentes (métodos e atributos). Temos três níveis de acesso no geral:
- Público: Elementos acessíveis a todo o código da aplicação, em toda a parte.
- Privado: Um elemento privado pode apenas ser acessado pelo próprio objeto (internamente) ou por funções “amigáveis”.
- Protegido: Um elemento protegido somente é acessível pelo próprio objeto e por objetos herdeiros dele.
Além disso, o acesso pode ser classificado em:
- Acesso em nível de classe (estático): Os membros pertencem ao objeto, e não à instância
- Acesso em nível de instância (não-estático): Os membros pertencem À instância e não ao objeto.
As instâncias não possuem os métodos e atributos estáticos do objeto que representam.
Métodos Construtor e Destrutor
Tratam-se de dois métodos especiais que possuem funções bem-definidas em um objeto.
- Método Construtor: É um método que é executado automaticamente quando uma classe é instanciada (objeto é criado), sendo utilizada normalmente para inicializar determinados atributos do objeto. Pode aceitar parâmetros para criar um objeto de forma personalizada, e permite a manipulação de campos (atributos) estáticos.
- Método Destrutor: Este método é executado automaticamente quando uma instância existente de uma classe (objeto) é destruída (eliminada da memória). Também manipula atributos estáticos.
Setters e Getters
Um Setter é um método especial que permite configurar indiretamente valores dentro de um objeto (atributos).
Um Getter é outro método especial, usado para obtermos de forma indireta os valores armazenados dentro do objeto.
Ambos previnem o acesso direto à informações privadas do objeto, permitindo o acesso controlado aos dados.
Polimorfismo
O conceito de Polimorfismo é a habilidade em uma linguagem de permitir que múltiplos tipos da dados apareçam e sejam utilizados como outro tipo. Podemos classificar as linguagens de duas formas com relação a tipos de dados:
- Fortemente tipada: Os tipos de dados sempre derivam de um outro tipo.
- Fracamente tipadas: Os tipos de dados são implicitamente polimórficos.
Para que serve o polimorfismo?
- Desenvolvedores não precisam conhecer os tipos de dados (internamente) ao codificar.
- Os tipos de dados serão reconhecidos e manipulados em tempo de execução (processo denominado dynamic binding)
- Tipos diferentes de dados podem compartilhar os mesmos operadores, por meio de um processo chamado de Sobrecarga de Operadores.
Com a sobrecarga de operadores, uma mesma classe pode fornecer múltiplos métodos para manipular diferentes operadores.
O polimorfismo permite, por exemplo, que as funções de atributos ou métodos sejam modificados quando uma classe é criada herdando de outra classe-pai. Esse é um dos pilares da Programação Orientada a Objetos.
Sobrecarga de Métodos
Podemos também sobrecarregar métodos, o que significa que podemos fornecer múltiplos métodos com uma variedade de parâmetros, tornando-os mais genéricos. Por exemplo, podemos ter um método que, ao receber duas strings, as concatena, formando uma terceira, mas se receber dois inteiros realiza sua soma em vez de concatená-los.
Method Overriding
Este conceito diz respeito à substituição de um método em uma classe por uma função externa, quando de seu uso.
Os métodos que podem ser sobrescritos assim são chamados de Métodos Virtuais.
Recursão aberta
É a habilidade de uma linguagem de programação que permite o acesso a membros de uma instância do objeto. Tipicamente, é usada com palavras-chave específicas e construída em nomes de variáveis.
Por exemplo, temos palavras-chave como this, self, me, que são ponteiros para a instância real na qual eles são utilizados.
É isso aí! Vimos neste tutorial alguns conceitos iniciais importantes para o estudo de Programação Orientada a Objetos.
Na parte 02 deste tutorial vamos tratar de mais conceitos, como Delegates, Namespaces e Encapsulamento, entre outros.
Prezado Professor, vc poderia indicar algum livro para aprofundar os estudos de orientação a objetos, estou tentando aprender este paradigma a algum tempo, comprei na Novatec: https://novatec.com.br/livros/introducao-orientacao-objetos/
Para estudar, mas estou acabando e quero ler mais sobre o assunto?