Last active
March 17, 2016 01:55
-
-
Save IuryAlves/00f5c9494d0613963d95 to your computer and use it in GitHub Desktop.
Responsabilidade única e orientação a objetos
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Uma boa forma de entender orientação a objetos é pensar na responsabilidade única que sua classe deve ter. | |
**O que é responsabilidade única?** | |
O princípio de responsabilidade única diz que cada componente do seu sistema seja ele classe, método, módulo, etc deve conter a responsabilidade de apenas uma parte do seu sistema. | |
Classes são abstrações de responsabilidades do seu sistema. | |
**Mas o que isso quer dizer em termos práticos?** Imagine o seguinte caso: | |
Qual a responsabilidade única da classe file do python? | |
Resposta: Lidar com arquivos, escrita e leitura. | |
Uma pseudo implementação dessa classe seria a seguinte: | |
```python | |
class Arquivo(object): | |
''' | |
Responsabilidade: Manipular arquivos escrita/leitura | |
''' | |
def __init__(self, nome_do_arquivo, modo='r'): | |
''' | |
"modo": | |
"r" para leitura | |
"w" para escrita | |
"r+w" leitura e escrita | |
''' | |
self.nome_do_arquivo = nome_do_arquivo | |
self.modo = modo | |
self._abrir() | |
def _abrir(self): | |
''' | |
Responsabilidade: Abrir o arquivo no modo | |
determinado por "modo" | |
''' | |
self.fechado = False | |
def ler(self): | |
''' | |
Responsabilidade: Ler o arquivo | |
''' | |
pass | |
def escrever(self, string): | |
''' | |
Responsabilidade: Escrever no arquivo | |
''' | |
if not self.fechado: | |
# lógica para escrever string no arquivo | |
pass | |
else: | |
raise ValueError('Operacao de escrita/leitura em arquivo fechado') | |
def fechar(self): | |
''' | |
Responsabilidade: Fechar o arquivo | |
''' | |
self.fechado = True | |
``` | |
Perceba que a classe Arquivo possui apenas uma responsabilidade, que é manipular arquivos. Cada método dentro da classe contém um comportamento mais específico, ler/escrever, abrir/fechar. | |
Os métodos alteram o estado da classe. No caso da classe Arquivo, o atributo 'fechado' é alterado pelo métodos _abrir/fechar. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment