kuntalog

頭の整理と書く練習。師匠募集中。

オブジェクト指向のこころ(1)

オブジェクト指向以前のプログラミング

機能分解から始める既存の構造化プログラミングの問題に触れる部分からスタート。 アンチパターンとして

  • 問題領域に存在する実体と出て来る動詞を書き出してしまう方法
  • オブジェクトをメソッド一緒になったデータと考える事

機能分解をすると個々の機能自体やそれらを呼び出すための手順を把握したオーガナイザー的なものが必要になる。オーガナイザーが複数の機能を扱うということはそれだけ多くの責任を持っているということ。機能の変更の際は機能自体だけでなくその操作を行うオーガナイザーに関しても修正を必要とする。 機能分解分解をすると

  • 凝縮度(Cohesion)が下がる
    • ある機能を叶えるために必要なコード群がいろいろな場所にあること
    • 明快度(Degree of Clarity?原文だとなんてなってるんだろ)が下がるとも言える
      • 色々な場所を見る必要があり見通しが悪い
    • 副作用(unwanted side effect)を引き起こしやすい
      • 変更の際に全てを網羅できずバグを生む

オブジェクト指向やっていき

単一の責任だけを持つように責任の移譲をしたい

  • 責任の移譲をするということはつまりは相手を信頼し機能を任せているということ
  • 任せるというのは相手のやり方や手順(実装やアルゴリズム)に関して一切感知をしないという意味(とりあえず機能を叶えてくれればそれでよい)
  • これによってオブジェクト間で「汚れのついた皿を集め洗剤とスポンジを用意してこすったり泡を流したあと乾かしてくれ」とかやんないといけなかったのを「"皿洗い"をしてくれ」という抽象的なやり取りに簡単化できる
  • "どうするか"ではなく"なにをするか"
  • 例えば「手順のみを知っているやつ」や「どうするかだけを知っているやつ」にするってこと?

考えるレイヤーによってオブジェクトの捉え方は変わる

  • 概念 - 登場するオブジェクトを洗い出し何に責任をもつものなのか考える
  • 仕様 - オブジェクト間のインターフェースを決定する
  • 実装 - どうやって自分の責任を達成するか。責任の分離が出来ているので他のオブジェクトのことは考えなくてもいい(そうなっているはず)

カプセル化

変わり得る(と考えられる)部分(データだろうが振る舞いだろうが)を他のオブジェクトから隠蔽すること。他のオブジェクトからは特定の部分(公開インターフェース)にだけ依存させるようにする。 もしカプセル化が出来ていない場合は依存している部分が変更されてしまったときに修正箇所を増やすことになる。

ポリモーフィズム

異なる振る舞いを持つオブジェクト群に共通のインターフェースをもたせ同じように扱えるようにする。継承によってインターフェースの共通化を行い、そのインターフェースに紐づく挙動を個々のオブジェクトに任せる

おまけ

オブジェクトは自分が何の責任をもつクラスから作られたものなのかを知っている必要があるってのが明示的に書いてあったのが気になった。 オブジェクトが自分が誰なのか知ってるのは当たり前なのだけれどこういうのをはっきり書くのは理論屋さんとかが考えるときの公理みたいな扱いになってるからなのかな

オブジェクト指向のこころ(0)

 

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

オブジェクト指向のこころ (SOFTWARE PATTERNS SERIES)

 

なんか気分というかそれぶって(翔泳社の半額セールのせい)エリック・エヴァンスのDDDを読み始めたらオブジェクト指向が全く分かってないな。。となり。。設計実践ガイドを読み始めたらそれでも難しかったのでこの本にした。

完全に舐めてた。。 

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

 

書く理由

思想とか概念的なものをすぐに出せるようにするには常に考えておいて頭に染み付ける必要があると思っているけど、それには文脈とかをちゃんと思い出して再現しないといけない。そのためにはとりあえず暗記が必要だろうと。暗記のためにはやっぱり自分の言葉で説明するのが良いはずなのでそこを頑張ってみようかなって感じ。あと自分が他人に説明するときに構成力が足りないと感じることがよくよくあるので文章書く練習をする。誰でも読めるように頑張る。

"メディアアーティスト"の話を聞いてきました

話の流れを押さえているというか自分が気になった部分をメモったものです。

メモを書いて考えたりしてたせいで結構聞いてない話とかありました()

コンテンポラリーアートメディアアート

既存技術の様式を批判する(という意味で技術の上に存在する、技術ありき)コンテンポラリアート
技術と人間の横並びを目指したメディアアート
既存の分野の"隣"にはあるものの直接には属さない、間(media)に存在する


e.g. ASMRは既存の枠組にには入れるのは難しい

Art&Science と Art&Technology の違い

個から世界をみるのがArt
世界から個をみるのはScience

人が産んだものがArt
科学が産んだものがTechnology

技術との協調について

arch365bilgi.blogspot.jp

 

脇田さんの話と資本社会


物質社会・消費社会の象徴としてのインスタへの批判。副作用を顕現させる、議論する。


- 衆からの理解
- お金?
- 資本社会は単純消費をどれだけ推し進められるかを追求している。世界の深さ面白さを捨てて。
- 議論自体の難しさ、飽食、考える事選ぶことを辞めた人たち

- 世界のすばらしさの片鱗を知っているからこそ議論をしようと思える

  - そういう世界にしたい

デプロイを高速化したい

やりたいこと

  • デプロイに時間かかるのなんとかしたい
  • Rails環境をDockerで作りたい
    • イメージを作っておいてそれをデプロイすれば早いはず!!
  • 環境はAWS
    • Elasticbeanstalkへのデプロイ
    • 今回はMulti-Containerやりません、ECSがつらいので
    • さらにこの辺を自動化したい(CI, CD)
続きを読む

ミック本読みました

 

いわゆるミック本を読みました。 

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ

 
続きを読む