1: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:37:27.01 ID:9iQhGYxE0

おはようございます。

スポンサードリンク

関連:2ちゃん式iOSプログラミング講座第9回「デリゲート」


2: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:38:18.27 ID:BOJaRg8z0

今日もよろしくお願いします


3: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:38:39.83 ID:0+hKBhIo0

あーざーっす


12: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:46:37.25 ID:xKnXWWwN0

第一回からやってんの?
シラバスください!


4: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:38:40.51 ID:9iQhGYxE0

第18回は「オブジェクト指向プログラミング」です。
最近では大部分のプログラミング言語がオブジェクト指向プログラミング(OOP)を採用しており、デ・ファクト・スタンダードになりつつあります。

ではOOPとは一体どういう考え方なのでしょうか?


5: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:39:20.23 ID:uGXCmF7y0

一言で言うと悪ですか


9: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:41:57.23 ID:9iQhGYxE0

オブジェクトとは「状態と振る舞いを持った物体」と思ってください。

オブジェクトは内部に自分自身の状態や振る舞いを持っています。

人間は、「血圧」という状態や「食事をする」という振る舞いを持ったオブジェクトということができますね。


11: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:44:46.88 ID:fFmJNA3R0

関数や変数を参照渡しやりまくってたら自然とまとまってきて
これって物じゃね?いやむしろ物だろて事になった


13: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:48:14.32 ID:9iQhGYxE0

2chのスレというオブジェクトを考えます
「レス数」や「勢い」などの変数(状態)を持ちます
また「送信された書き込みを受け付ける」などのメソッド(振る舞い)を持ちます

注意したいのは「書き込む」というメソッドではないということです。
これは強いて言えば我々「人間」オブジェクトのメソッドです。

スレそのものは1つのオブジェクトですのであくまで「書き込みを受け付ける」というメソッドしか持ちません。
(もっと厳密に言えば「送信された書き込みをスレの内容という変数(状態)に反映する」というメソッドになります)


14: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:50:11.90 ID:8RdQ4BkJ0

どれをクラスにすればいいのかわからず挫折する


20: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:57:28.52 ID:9iQhGYxE0

>>14
クラス設計というのはOOPにおいてとても重要なことです
ある状態・振る舞いをどのクラスに持たせるかというのを考えるのは難しいですよね

すべてオブジェクトとして設計して処理部ではそのオブジェクトの関連、連携を書いてやるだけ、というのが理想でしょう


15: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:52:14.32 ID:9iQhGYxE0

オブジェクト指向と非オブジェクト指向の違いをイメージする例を見てみましょう

我々 人間オブジェクト があるとします
「人間」に名前を言わせたいとします

オブジェクト指向であれば「名前をいう」というのは自分の動作、振る舞いですので

人間.sayName()

といった書式になります
非オブジェクト指向では例えば「人間の名前」という文字列を用意して

sayName(人間の名前)
print(人間の名前)

といった形になります。


16: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:53:48.99 ID:9iQhGYxE0

第18回をおわります

ありがとうございました


17: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:53:59.34 ID:8RdQ4BkJ0

はや


19: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:56:47.85 ID:N36vb9JU0

おい


21: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:57:48.63 ID:0+hKBhIo0

え?うそっwwwwwwww

このあいだのはそこそこ長くためになること言ってたのにwwwww


37: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:26:32.91 ID:Q1ifpO/40

終わるの速すぎワロタ


38: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:39:29.82 ID:LB9BYGZ/0

来たら終わってた


31: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:02:16.12 ID:fFmJNA3R0

もう終わりかよw
継承がもう一つの大事な特徴だね
継承とは逆に狂ったように抽象化したがる傾向があるけど大して役に立たないから騙されるな


23: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:58:37.09 ID:Nsj0R6r30

非オブジェクトはなにがだめなの?


26: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:59:51.82 ID:i/n5KQPC0

>>23
再利用しにくいとか手間がかかるとか?


24: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:59:24.57 ID:9iQhGYxE0

>>23
頭が疲れる


28: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:01:16.35 ID:hh1XwTwI0

>>23
ダメじゃないよ

そもそも開発の効率を良くしようとして生まれた発想がオブジェクト思考だよ

だから
わけわからないから使いたくないと思うなら使わなくて良い


25: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 11:59:31.38 ID:H74gaMgRO

オブジェクト思考とかソースが散らばってて追いにくい


30: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:01:31.46 ID:9iQhGYxE0

>>25
内部構造を理解してなくともわかるというのがポイント

人間.名前を言う()

こういうメソッドを見て「まず横隔膜を振動させてそれを声帯で……」みたいなのを知らなくても使えるということ


32: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:03:29.31 ID:Nsj0R6r30

素人がサンプルコードつぎはぎでプログラミングすると余計にこんがらがるとかそういうことってある?


34: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:05:46.35 ID:PthNfiZN0

>>32
オブジェクト指向はそういうのに強いな
正しい値さえ入れれば勝手に答えまで出してくれる
してほしいメソッド呼べばあとは勝手にやってくれる
フリーのライブラリとかいっぱいあるからそこからほしい物を探せばいい


35: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:08:25.43 ID:Nsj0R6r30

>>34
便利なんだな
やってみるか


39: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 12:43:46.37 ID:MJz8zTJe0

オブジェクト指向って元からあるものを読み出すだけ?


40: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 13:01:18.84 ID:PthNfiZN0

>>39
一つの入れ物に変数とそれを使った仕事や入出力処理まで全部入れてしまうテンプレートを定義することで
複数の似たようなクラスをそれぞれの変数等を定義しなくても独立して使う事ができる
これがカプセル化

またある程度のよく使う仕事それぞれをクラス化しておく事で実際の処理時にはそのクラスを呼ぶだけで使用できるからソースがわかり易い
これが自律分散協調モデル(名前は今ggったから間違ってるかも)

ようは細けえこと考えずにプログラミングしやすくするもんだと思えばいい


41: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 13:02:24.86 ID:3wSmr+jw0

ポリモーフィズムについて分かりやすい説明を


45: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 13:15:48.21 ID:PthNfiZN0

>>41
親クラスである程度決めた型を継承してそれぞれのクラス(子クラス)を作ることで
違うクラスでもある程度同じ様に扱う事ができるような設計概念
日本語訳すると多様性だからそのまんまだな


44: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 13:14:27.15 ID:2+Uvdjdy0

>>41
例えば普通の日付のクラスとか作るじゃん?
today()とかメソッド呼ぶと今日の日付返してくれるとするじゃん?

そのクラスを継承してタイ暦のカレンダーとかヒジュラ暦のカレンダー作るじゃん?
そうするとtoday()が返す日付はそれぞれの暦の日付なんだけど
使い方は普通の日付と変わらないじゃん?分かりやすいじゃん?

違うクラスなんだけど同じ使い方と振る舞いをするけど違う結果や動作になるみたいな
それがポリモーフィズム


46: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 13:21:20.39 ID:3wSmr+jw0

44-45
それは何となく分かってるんだけど
オーバーロード・オーバーライドとの違いというか言葉の使い分けが良く分からん
ポリモーフィズム=オーバーロード・オーバーライドと考えてもいいの?


48: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 13:28:31.49 ID:PthNfiZN0

>>46
ポリモーフィズムは設計「概念」
こういう風なプログラミングにしようって事
んでそれを実現するために使うのがオーバーライド・ロードや継承とかの「技術」

オーバーライドは継承前の親クラスにもあったメソッドを再定義する事で別の挙動をさせる事
オーバーロードは引き数の型が違うメソッドを複数用意しておく事で渡される型によって違うメソッドを呼ぶようにする事


49: 以下、\(^o^)/でVIPがお送りします 投稿日:2014/05/15(木) 13:36:08.78 ID:3wSmr+jw0

>>48
ありがとう
色々ごちゃごちゃになってたけどすっきりした


元スレ:http://viper.2ch.sc/test/read.cgi/news4vip/1400121447/