Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IuryAlves/00f5c9494d0613963d95 to your computer and use it in GitHub Desktop.
Save IuryAlves/00f5c9494d0613963d95 to your computer and use it in GitHub Desktop.
Responsabilidade única e orientação a objetos
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