Successfully reported this slideshow.
Your SlideShare is downloading. ×

オブジェクト指向プログラミングの現在・過去・未来

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 39 Ad

オブジェクト指向プログラミングの現在・過去・未来

Download to read offline

1995年まで:イノベータとアーリーアダプターの時代; 1995-2005 : オブジェクト指向ブームと混乱の始まり; 2005-2015 : さらなる混乱と収束の兆し; 2015- ; 現在の状況とこれからの20年

1995年まで:イノベータとアーリーアダプターの時代; 1995-2005 : オブジェクト指向ブームと混乱の始まり; 2005-2015 : さらなる混乱と収束の兆し; 2015- ; 現在の状況とこれからの20年

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to オブジェクト指向プログラミングの現在・過去・未来 (20)

Advertisement

More from 増田 亨 (20)

Recently uploaded (20)

Advertisement

オブジェクト指向プログラミングの現在・過去・未来

  1. 1. オブジェクト指向プログラミングの 現在・過去・未来 2020年2月16日 増田 亨
  2. 2. 自己紹介 2019/11/23 2 増田 亨 (@masuda220) 最近の仕事:JavaとSQLでプログラミング(したい) 今日は、この本の背景にある オブジェクト指向プログラミングの 基本的な考え方を説明します 仕事レベルで使った言語 Z80アセンブラ, C, PL/SQL, C++, COBOL, FORTRAN, BASIC, Lisp, Prolog, Smalltalk, awk, Perl, PHP, Ruby, Python, Groovy, Objective-C, JavaScript … 試したことのある言語 Haskell, OCaml, Schema, Scala, Kotlin, Go, Rust, IO, TypeScript, … 面白いと思っている言語 Haskell, Prolog, Rust
  3. 3. オブジェクト指向プログラミングとはなにか? 2020/2/14 3
  4. 4. オブジェクト指向プログラミングとは データの抽象化 抽象データ型が導くモジュール構造 2020/2/14 4 この観点からのオブジェクト指向プログラミングの現在・過去・未来 +部分型 with 動的ディスパッチ
  5. 5. 2020/2/14 5 モジュール オブジェクト 型 値(データ) クラス メモリ上に保持 (ビット列) 分類 抽象化 型の仕様と実装を プログラミング言語で記述 独立したプログラム単位 (データ+ロジック)
  6. 6. もう少し説明すると 2020/2/14 6 オブジェクト メモリ上に割り当てた値 (実体はビット列) すべてのオブジェクトはなんらかの型に分類される 型 値に対して実行できる操作(計算・判断)のセット + 有効な値の範囲 データ抽象 データの本質的な特徴を抜き出す(型の定義) ⇒ 実行できる操作セット+有効な値の範囲 クラス 型の仕様と実装を記述するためのプログラミング言語の構文 モジュール プログラミング単位。 オブジェクト指向プログラミングでは、 型=クラス=モジュール
  7. 7. 型 こわくないです プログラミングしていれば、無意識に使っている それを意識的に使うようにすればよい オブジェクト指向プログラミングとは 型を意識するプログラミング 2020/2/14 7
  8. 8. 型とはなにか? 2020/2/14 8
  9. 9. 型の具体例 2019/11/23 9 int quantity; quantity = 1; boolean isEmpty; isEmpty = false; (1 + 2); // int型 (1 > 0); // boolean型
  10. 10. 型とは何か 2019/11/23 10 値の範囲を制限 int型 -21億~+21億 boolean型 trueかfalse
  11. 11. 型とは何か 2019/11/23 11 値の範囲を制限 可能な操作を定義 int型 -21億~+21億 boolean型 trueかfalse int型 +, -, *, /, %, ==, !=, >, < boolean型 &&, ||, ==, !=
  12. 12. 可能な操作の定義 ⇒ データの抽象化 データの抽象化とは、値の分類 同じ操作ができる値=同じ種類の値 可能な操作(計算・判断)で値の種類を定義する データ表現(具象)ではなく、データ操作(本質)を抽出する char[] ⇒ 具体的なデータ表現 String ⇒ 文字の配列への可能な操作 length(), substring(), isEmpty(), … 2020/2/14 12
  13. 13. データ抽象で何がうれしいか? 2019/11/23 13 具体的なデータ型 抽象的なデータ型 char[] name; String name; Object[] list; List<Type> list; int[] value; int scale; BigDecimal value; int year, short month, short day LocalDate date; どちらでプログラミングするほうが、楽で安全か?
  14. 14. データ抽象で何がうれしいか? ✓型は問題領域を記述する「語彙」を提供する ✓型(クラスとメソッド)は計算のアイデアの表現である ✓型は問題領域の記述とプログラムの構造を直接的にマップする ✓型はソフトウェア仕様の記述手段である(自己文書化) ✓型(クラスとメソッド)で関心事を明示的に表現する 2020/2/14 14 バーバラリスコフ ストラウストラップ バートランドメイヤー エリックエヴァンス
  15. 15. データ抽象の具体例 定義済:String型、 BigDecimal型、 LocalDate型、 List型、 Set型、 Map型、 … 独自定義: 金額型、数量型、期日型、明細リスト型、スキルセット型、地域別送料型、… ✓ とりえる値の範囲の制限、実行可能な操作の制限、実行結果の値の種類の制限 ✓ 契約による設計 (事前条件としての引数の型、事後条件として返す値の型) ✓ ビジネスルールに基づく計算判断の意図を表現する基本手段 ✓ 計算判断の実装の詳細を隠蔽する基本手段 2020/2/14 15
  16. 16. オブジェクト指向プログラミングとは データの抽象化 抽象データ型が導くモジュール構造 2020/2/14 16 この観点からのオブジェクト指向プログラミングの現在・過去・未来 +部分型 with 動的ディスパッチ
  17. 17. オブジェクト指向プログラミングの歴史 2020/2/14 17
  18. 18. 2020/2/14 18 イノベーターとアーリーアダプターの時代 「オブジェクト指向」ブームと混乱のはじまり さらなる混乱から収束への兆し 現在の状況とこれからの20年 1956 - 1995 1995 - 2005 2005 - 2015 2015 -
  19. 19. 1956 - 1995 イノベーターとアーリーアダプターの時代 2020/2/14 19
  20. 20. イノベーターとアーリーアダプターの時代 1956 FORTRAN ビット列を、整数型と実数型に分類して扱うようになった 1960年代 Simula 67 オブジェクトとクラスを使ったプログラミングの誕生 1970年代 CLU 抽象データ型とカプセル化という考え方の提案 1980年代 C++ Smalltalk Eiffel オブジェクト指向プログラミングの研究と実験 1995 Java, UML 「オブジェクト指向」ブームと混乱の始まり 2020/2/14 20
  21. 21. 1995 - 2005 「オブジェクト指向」ブームと混乱の始まり 2020/2/14 21
  22. 22. 90年代後半 ブームの到来と混乱の始まり Javaの登場と爆発的な普及 オブジェクト指向分析設計(OOAD) UML GoF デザインパターン オブジェクト指向設計原則(SOLID, GRASP, …) モデリングパターン 2020/2/14 22
  23. 23. 1995-2000年 Javaの登場と爆発的な普及 インターネットブーム Sun Microsystemsのすざまじいマーケティング クラスってなんかかっこいいな なんでもいいからオブジェクト指向って言っちゃえ Javaという名前にあやかろう オブジェクト指向というキャッチフレーズとクラス構文は広がったが… 2020/2/14 23
  24. 24. 90年代 オブジェクト指向分析:混乱の始まり UML, モデリング本 GoFデザインパターン本 SOLID, GRASP, … データ抽象 抽象データ型によるモジュール構造と問題記述 たいせつなもの(型の発見と定義)を見失ってしまった時代 クラス図を使ったデータモデリング、ユースケースモデルという機能分割 クラスを使った手続き的なプログラミングの普及 怪しげな例え話の横行 2020/2/14 24 OOAD
  25. 25. 2005 - 2015 さらなる混乱から収束への兆し 2020/2/14 25
  26. 26. さらなる混乱 2004年 Javaの大きな進化があったが… 時代は 型のないスクリプティング言語で オブジェクト指向プログラミング? 2020/2/14 26
  27. 27. 2004年 Javaの大変身 総称性(ジェネリクス) List<T> enum (区分値を抽象データ型に) 型の観点からは、それ以前とは別の言語 本格的なオブジェクト指向プログラミング言語の登場 2020/2/14 27
  28. 28. 型のない言語でオブジェクト指向プログラミング? PHP, Ruby, Python, JavaScript, … 悪い冗談かと思った(抽象データ型の観点から) 動的な型付け?、ダックタイピング?、構造的部分型?、漸進的型付け? メッセージング? 遅延結合? プロトタイプベース? なに言っているか、よくわからないんですけど… そう呼ぶのは自由だけど、ほんとうに意味がわかって使っていますか? 2020/2/14 28
  29. 29. 収束の兆し:実験結果がではじめたこと 実装継承・差分プログラミング UML/OOAD 普及しなかったという現実 型がないのはつらい 怪しげな例え話 2020/2/14 29
  30. 30. 2015年頃 PHP7 Python 3.5 ES2015 TypeScript やっぱり型なんじゃないか? 2020/2/14 30 型付け言語Javaの進化: Date and Time API, Math.addExact()
  31. 31. オブジェクト指向プログラミングの進化 状態のカプセル化 参照透過性、immutable、stateless nullはあかんやろ IDEというすてきな相棒 型ネットワークのリアルタイム解析/可視化 サジェション/リファクタリングサポート 2020/2/14 31
  32. 32. 現在の状況とこれからの20年 2020/2/14 32
  33. 33. 現在の状況 クラス構文は普及した 定義済の型(標準ライブラリなど)を使うのが当たり前になった しかし 定義済の型を使った手続き的なプログラミングが主流 アプリケーション独自の型の発見・定義は少数派 2020/2/14 33
  34. 34. これからの20年 2020/2/14 34
  35. 35. 予想されるシナリオ ✓スクリプティング言語の型対応の進化 ✓IDEの型サポートの進化と普及 ✓型の検査・可視化・生成ツールの広がり ✓独自の型を設計するためのパターンカタログ/サンプルコード ✓金銭型、期間型、不変コレクション型などのライブラリの進化 ✓型の発見・定義を重視した開発手法の提案 2020/2/14 35
  36. 36. まとめ 2020/2/14 36
  37. 37. オブジェクト指向プログラミングとは データの抽象化 抽象データ型が導くモジュール構造 型を意識するプログラミング 2020/2/14 37 +部分型 with 動的ディスパッチ
  38. 38. 2020/2/14 38 モジュール オブジェクト 型 値(データ) クラス メモリ上に保持 (ビット列) 分類 抽象化 型の仕様と実装を プログラミング言語で記述 独立したプログラム単位 (データ+ロジック)
  39. 39. データ抽象(型)で何がうれしいか? ✓型は問題領域を記述する「語彙」を提供する ✓型(クラスとメソッド)は計算のアイデアの表現である ✓型は問題領域の記述とプログラムの構造を直接的にマップする ✓型はソフトウェア仕様の記述手段である(自己文書化) ✓型(クラスとメソッド)で関心事を明示的に表現する 2020/2/14 39 バーバラリスコフ ストラウストラップ バートランドメイヤー エリックエヴァンス

×