---
# System prepended metadata

title: 2019/10/21 class等
tags: [knowledge]

---

# 2019/10/21 class等
## 再利用、カプセル化、Classの分割、自動販売機、MVC、Singletonパターン、デザインパターン
![](https://i.imgur.com/YCciAXP.png)
- 再利用するためにまとめる。
  - methodやfunction。pythonだとdef。
- def をまとめたものを class という。
- 例えば、誰かが退職してパスワードを変えるとき、数カ所を変更するのはだるいので、一つの場所に書いておき、それを参照するようにする。そうすれば一箇所変更すれば良くなる。

#### なぜclassにするのか
- Dataはいじらない方が良い
```python
def plus(num):
    a = 10
    return a + num

def minus(num):
    a = 10
    return a - num
```
上記コードだと、`a = 10`を２箇所で使用している。
それを下記のようにする。
```python
class calc(object):
    def __init__(self):
         a = 10
         
    def plus(self, num):
         return self.a + num
         
    def minus(self, num):
         return self.a - num        
```
このように、データをいじらず外から処理するのを、**データカプセル化**という。
```
pでもそう。
例えば、targetmanager.py 
誰がマッチしてメッセージして、みたいなデータがある。
そこに、マッチさせるdefやメッセージさせるdefで外から処理している。
classにしているのは、「マッチしたらメッセージ、マッチしていなかったらメッセージを送れない」
というようなことをしないといけないから。
```

## オブジェクト指向（自動販売機）
自動販売機で考えてみる
- 自動販売機を使う人は中がどうなっているか知る必要はない。
#### 自動販売機を使う人に必要なことは何か？
```
- コインを入れる
- ドリンクを選択する
- ドリンクが出てくる
```
  上記それぞれを**UI**といい、それらを**view**という。
  
#### 自動販売機に必要なものは何か？
```
- coin
  - 10
  - 50
  - 100
  - 500
  - 1000
  
- bottle
  - name
  - size
  - price
```
上記を**model**という。

#### 自動販売機を動かすにはどうすれば良いか？
```
- coinが投入される
- 買えるかどうか
- bottleを選択する
.
.
.
```
上記を**controller**という。
このように、model, view, controller に分けるのを**MVC**という。

★良いコードほど、「どうしてそう書いたのか」がわかるので、いろんなコードを見ると良い。

-------

## デザインパターン
- 例えば一回しか処理してはいけないとき。
- singleton という書き方がある。
- singleton のようなものをデザインパターンという。


###### tags: `knowledge`