class Student extends Person int id Collection friends

  • Slides: 35
Download presentation

メソッド追加による影響波及(例) class Student extends Person { int id; Collection friends; Student(String n, int id){.

メソッド追加による影響波及(例) class Student extends Person { int id; Collection friends; Student(String n, int id){. . . } void add. Friend(Person p){. . . } int get. Friend. Count(){. . . } } String to. String(){. . . } class Student. Data { Map data; } void add(Student s){ data. put(s. to. String(), . . . ); } void output(){. . . } 実行結果の変化 2020/11/27 class Person { String name; } Person(String n){. . . } String to. String(){. . . } オーバーライド 関係の変化 推移的な  実行結果の変化 class Test { void test 1(){ Student s = new Student(“Tom”, 8); System. out. println(s. to. String()); } void test 2(){. . . } void test 3(){ Student. Data data = new Student. Data(); Student s = new Student(“Sam”, 19); data. add(s); } } ソフトウェアサイエンス研究会 6

1. 回帰テストへの適用(例) class Student extends Person { int id; Collection friends; Student(String n, int

1. 回帰テストへの適用(例) class Student extends Person { int id; Collection friends; Student(String n, int id){. . . } void add. Friend(Person p){. . . } int get. Friend. Count(){. . . } } String to. String(){. . . } class Student. Data { Map data; } void add(Student s){ data. put(s. to. String(), . . . ); } void output(){. . . } 実行結果の変化 2020/11/27 class Person { String name; } Person(String n){. . . } String to. String(){. . . } オーバーライド 関係の変化 推移的な  実行結果の変化 class Test { void test 1(){ Student s = new Student(“Tom”, 8); System. out. println(s. to. String()); } void test 2(){. . . } void test 3(){ Student. Data data = new Student. Data(); Student s = new Student(“Sam”, 19); data. add(s); } } ソフトウェアサイエンス研究会 10

2. プログラム保守への適用(例) class Student extends Person { int id; Collection friends; Student(String n, int

2. プログラム保守への適用(例) class Student extends Person { int id; Collection friends; Student(String n, int id){. . . } void add. Friend(Person p){. . . } int get. Friend. Count(){. . . } } String to. String(){. . . } class Student. Data { Map data; } void add(Student s){ data. put(s. to. String(), . . . ); } void output(){. . . } 実行結果の変化 2020/11/27 class Person { String name; } Person(String n){. . . } String to. String(){. . . } オーバーライド 関係の変化 推移的な  実行結果の変化 class Test { void test 1(){ Student s = new Student(“Tom”, 8); System. out. println(s. to. String()); } void test 2(){. . . } void test 3(){ Student. Data data = new Student. Data(); Student s = new Student(“Sam”, 19); data. add(s); } } ソフトウェアサイエンス研究会 12

メンバオーバーライドグラフ(MOG) n メンバ間のオーバーライド 関係を表現 n n n メソッドオーバーライド 抽象メソッドの実装 フィールドの隠蔽 MOG節点 MOG辺 メソッド override辺

メンバオーバーライドグラフ(MOG) n メンバ間のオーバーライド 関係を表現 n n n メソッドオーバーライド 抽象メソッドの実装 フィールドの隠蔽 MOG節点 MOG辺 メソッド override辺 フィールド implement辺 hide辺 interface Life { boolean is. Alive(); boolean is. Alive() } implement int ximplements class Animal Life { int x; boolean is. Alive(){ … } void move(int x){ … } void move(int) hide void eat(Animal x){. . . } void eat(Animal) } override class Human extends Animal { x dobledouble x; } 2020/11/27 void move(int x){. . . } void move(int) ソフトウェアサイエンス研究会 17

メンバアクセスグラフ(MAG) n メンバ間のアクセス関係 を表現 n n class Human extends Animal { doublex; x doble

メンバアクセスグラフ(MAG) n メンバ間のアクセス関係 を表現 n n class Human extends Animal { doublex; x doble メソッド, コンストラクタの use Human(){ …Human() } void move(int x){ this. x = x } 呼び出し void move(int) } フィールドの参照 MAG節点 MAG辺 メソッド call辺 フィールド use辺 コンストラクタ 2020/11/27 call class World { Human make. Human(){ call return new Human(); Human make. Human() } call void test. Human(){ Human h = this. make. Human(); void test. Human() h. move(10); } } ソフトウェアサイエンス研究会 18

メソッド追加による影響波及(例) class Student extends Person { int id; Collection friends; Student(String n, int id){.

メソッド追加による影響波及(例) class Student extends Person { int id; Collection friends; Student(String n, int id){. . . } void add. Friend(Person p){. . . } int get. Friend. Count(){. . . } } String to. String(){. . . } class Student. Data { Map data; } void add(Student s){ data. put(s. to. String(), . . . ); } void output(){. . . } 2020/11/27 class Person { String name; } Person(String n){. . . } String to. String(){. . . } class Test { void test 1(){ Student s = new Student(“Tom”, 8); System. out. println(s. to. String()); } void test 2(){. . . } void test 3(){ Student. Data data = new Student. Data(); Student s = new Student(“Sam”, 19); data. add(s); } } ソフトウェアサイエンス研究会 26

R 1 : アクセス発生メンバ抽出 (MAGの探索 ) MAG Person() Student String to. String() Test Student()

R 1 : アクセス発生メンバ抽出 (MAGの探索 ) MAG Person() Student String to. String() Test Student() void test 1() void add. Friend(Person) void test 2() int get. Friend. Count() String to. String() Student. Data void test 3() Student. Data() void add(Student) void output() 2020/11/27 ソフトウェアサイエンス研究会 27

R 2 : 関係変化メンバ抽出 (MOGの探索) MOG MAG Person() Student String to. String() Test Student()

R 2 : 関係変化メンバ抽出 (MOGの探索) MOG MAG Person() Student String to. String() Test Student() void test 1() void add. Friend(Person) void test 2() int get. Friend. Count() String to. String() Student. Data void test 3() Student. Data() void add(Student) void output() 2020/11/27 ソフトウェアサイエンス研究会 29

R 2 : 関係変化メンバ抽出 (MAGの探索) MAG Person() Student String to. String() Test Student() void

R 2 : 関係変化メンバ抽出 (MAGの探索) MAG Person() Student String to. String() Test Student() void test 1() void add. Friend(Person) void test 2() int get. Friend. Count() String to. String() Student. Data void test 3() Student. Data() void add(Student) void output() 2020/11/27 ソフトウェアサイエンス研究会 30