プログラム理論特論 第8回 亀山幸義 kam@is.tsukuba.ac.jp http://logic.is.tsukuba.ac.jp/~kam/progtheory.

Slides:



Advertisements
Similar presentations
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
Advertisements

ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
情報システムプロジェクト I 第2回 FileScanner.java ~ファイル入力、文字切り出し機能を持つ プログラムの作成~
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
Scala + Liftフレームワーク その2.
東京工科大学 コンピュータサイエンス学部 亀田弘之
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
基本情報技術概論 I 演習(第5回) 埼玉大学 理工学研究科 堀山 貴史
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
情報伝播によるオブジェクト指向プログラム理解支援の提案
プログラミング演習(2組) 第12回
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
2007/1/18 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
RMI ソフトウェア特論 第6回 /
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
プログラミング言語入門.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
国立情報学研究所 ソフトウェア研究系 助教授/
 型推論1(単相型) 2007.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
VBで始めるプログラミング こんにちは、世界。 /28 NARC.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向プログラミング クラス 継承
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
コレクション・フレームワーク J2EE I (データベース論) 第6回 /
コレクション・フレームワーク データベース論 第7回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
JSPの基本 J2EE I (データベース論) 第8回 /
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
プログラム分散化のための アスペクト指向言語
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
18. Case Study : Imperative Objects
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

プログラム理論特論 第8回 亀山幸義 kam@is.tsukuba.ac.jp http://logic.is.tsukuba.ac.jp/~kam/progtheory

中間レポートについて 必ず返事します。5日以上たって返事がこないときはもう一度メイルしてください。 書式上の問題がいくつか散見されました。 6月2日17:00までに到着したレポートについては受理した旨の返事をメイルしました。 それ以降も順次メイルします。 書式上の問題がいくつか散見されました。 「テキスト、PS, PDFのどれか」と指定しているのにWORDで送ってくる 学籍番号と名前をレポートに冒頭に書かない(メイル自身の署名とは別に、レポートのファイルにも名前を書くのは当然) メイル本文に、何の断り書きもなく、いきなりレポートが添付されている。(当然、どの授業の何というレポートを提出しようとしているか、書くべき。書類を誰かに郵送するときには、必ず「送り状」をつけるべきであるのと同様) ただ、中間レポートの採点で問題にすることはありません。 レポートの解答等は後に web page に掲載します。

今日のあらすじ 今回: オブジェクト指向言語の型システム 抽象データ型 6月10日は休講です。 次回は6月17日です。

Pointクラスのオブジェクトたち y (3,5) (-1,2) (1,1) x

ColoredPointクラスのオブジェクトたち y (3,5) (-1,2) (1,1) x

オブジェクト指向 Object-Oriented 制御中心ではなくデータ中心の記述 プログラムは、手続きや関数の定義の集まりではなく、データ定義の集まり 特徴 情報の隠蔽、カプセル化 クラスの定義で列挙された操作関数(メソッド)以外では、オブジェクトの内部構造をさわることはできない 継承:プログラムの再利用 Pointクラスの定義を利用してColoredPointクラスを定義する サブタイピング Pointクラスのオブジェクトを引数にとる関数には、ColoredPointクラスのオブジェクトも適用できる self/super を用いた再帰呼び出し

抽象データ型 「普通」のデータ型(具体的なデータ型、抽象データ型でないデータ型) この講義でこれまで対象としてきたデータ型 どのように型を構成するかを具体的に指定することによって、データ型を定める。 例: real ×(int→ string) 型の構成方法から自動的に以下のことが定まる その型をもつデータ(プログラム)をどうやって構成するか  例 MとNから(M,N)を構成する その型をもつデータをどうやって使うか 例 (M,N)からその left や right をとる

抽象データ型 Abstract Data Type, ADT 型をどのように構成するか、ではなく、その型を持つデータをどうやって構成するか、どうやって使うかを定める [逆転の発想] データ型の実現ではなく、データ型の仕様

例:「学生名簿」データ型 具体的データ型 学籍番号と氏名のペアをリストにしたもの 学生を一人追加、学籍番号に対応する学生の氏名を探す

例:「学生名簿」データ型 抽象データ型 学生名簿型のデータには以下の操作だけを使う 空の学生名簿を作る new 学生を一人追加 add 学籍番号に対応する学生の氏名を探す assoc

例:「学生名簿」データ型 具体的なデータ型と抽象データ型の関係 具体的なデータ型は、抽象データ型の条件(仕様)を満たす。 抽象データ型の条件を満たす具体的なデータ型の構成方法は、ここで与えたものに限らない。

例:「スタック」抽象データ型 スタックは、new, push, pop 操作と、スタックトップの要素を知る関数、スタックが空かどうか知るための関数が備わっているデータ構造 これ以外の性質は一切 仮定しない pop(new)、top(new)の値 は何でも良い

抽象データ型の有用性 抽象データ型は「(外部)仕様」、具体的なデータ型は「実装」 記述された型情報、等式は外から見え、それ以外のこと(その抽象データ型をどう実装しているか)は見えない[情報の隠蔽, information hiding] 具体的なデータ型 実装方法を外から見ることができる meibo型データにおいて、「”Nakajima” の次に “Ito” が登録されているかどうか」を知ることはできるか? ソフトウェアの段階的開発 stepwise refinement 最初に、抽象データ型を用いてアルゴリズムを設計し、 次に、これを具体的なデータ型で置き換える ソフトウェアの保守(更新)において 同じ抽象データ型を満たす、より高速のデータ型に置き換えることが可能(ソフトウェアの性能向上) 大規模ソフトウェアの分散開発 ソフトウェア部品の再利用

抽象データ型の理論[参考] 等式のみで記述されている場合、抽象データ型を満たす「最も一般的な(具体的な)データ型」が存在することが保証できる。[initial algebra, 始代数] 最も一般的 OBJなどの言語では、ADTを書けばそのまま具体的な定義と思って実行してくれる 抽象データ型を満たす 具体的なデータ型

ADTからオブジェクトへ オブジェクトは、ADTの考え方に影響されている しかし、ADTと同じではない。 クラスの定義には、「具体的な実装方法」も記述されている。 さらに、JAVA言語などでは、「外に見せるもの」「外に見せないもの」を細かく指定できるようになっている。

継承inheritanceとサブタイピング 一番上の クラス Pointクラス ColoredPoint クラス ○○Point ○○ColoredPoint f: Point → int  f(x) の x の位置に 書けるオブジェクトの クラスは? x: ColoredPoint f: Point→int から f(x): int を導けるようにしたい

OO言語を型理論で表現・理解する OO言語 型理論 クラス レコード型 オブジェクト レコード型をもつ項 メソッド 関数 継承 サブタイプ

OO言語の型理論:レコード型

OO言語の型理論:サブタイピング1

OO言語の型理論:サブタイピング2

サブタイピングの例 int ≦ real と仮定する int →int ≦ int →real {x:int,y:real,z:real} ≦ {x:int,y:real,z:real} real→int ≦ int→int real→int ≦ int→real ! int→int と real→real の間に≦関係は成立しない {x:int,y:int,z:int} ≦ {x:int} {xy:{x:int,y:real}, z:int} ≦ {xy:{x:real,y:real},z:real}

例(の準備) 要素を1つしか持たない型 Unit 要素の値に意味がないときに使用する 0引数の関数を、1引数の関数とみなしたいとき print文を、関数とみなしたいとき Unit型はレコード型の一種とみなすこともできる。Unit ={}

例:Pointクラス

例:ColoredPointクラス

例:ColoredPointクラス

例:ColoredPointクラス

OO言語の型理論 型付きラムダ計算に、レコード型とサブタイピングを加えた体系 型の健全性定理は成立する 型推論は困難

OO言語の型理論 ここで述べた方法は、基本的な仕組みのみ定式化した 副作用をもたない部分に限定 サブタイピングと継承の違い 代入文を定式化していないので、get_x などのメソッドの中身を項として表現できなかった サブタイピングと継承の違い 型情報が失われることがある moving_color_point の例 継承した側で、メソッドの中身を書き換えることができる その場合、どのメソッドが適用されるべきかは型情報(静的な情報)だけではわからない。-> 型を動的に決める必要がある

次回(以降) 次回(6月17日、6月24日) やり残した事 講義のまとめ 最終レポートの出題 6月10日は休講です。