オブジェクト指向入門

オブジェクト指向入門
インスタンス変数
public class Student {
public String name;
public int id;
}
インスタンスの生成
class StudentTest {
public static void main(String[] args) {
Student s = new Student();
s.name = “Hagiya”;
s.id = 1;
System.out.println(s.name);
s = new Student();
s.name = “Turing”;
s.id = 2;
}
}
インスタンス・メソッド
public class Student {
public String name;
public int id;
public void setName(String n) {
this.name = n; // もしくは name = n;
}
}
インスタンス・メソッドの呼び出し
class StudentTest {
public static void main(String[] args) {
Student s = new Student();
s.setName(“Hagiya”);
System.out.println(s.name);
}
}
スタティック変数(クラス変数)
public class Student {
public String name;
public int id;
static int nextid = 1;
public void setName(String n) {
name = n;
id = nextid;
nextid++;
}
}
インスタンス・メソッドの呼び出し
class StudentTest {
public static void main(String[] args) {
Student s = new Student();
s.setName(“Hagiya”);
s = new Student();
s.setName(“Turing”);
System.out.println(s.id);
}
}
コンストラクタ
public class Student {
public String name;
public int id;
static int nextid = 1;
public Student(String n) {
name = n;
id = nextid;
nextid++;
}
}
コンストラクタの呼び出し
class StudentTest {
public static void main(String[] args) {
Student s = new Student(“Hagiya”);
s = new Student(“Turing”);
System.out.println(s.id);
}
}
参照(reference)
public class Cell {
public int value;
public Cell next;
public void print() {
System.out.println(value);
if (next != null)
next.print();
}
}
リンク構造(リスト)の作成
class CellTest {
public static void main(String[] args) {
Cell c = new Cell();
c.value = 1;
c.next = new Cell();
c.next.value = 2;
c.next.next = new Cell();
c.next.next.value = 3;
c.next.next.next = null; // not necessary
c.print();
}
}
c:
value : 1
next :
value : 2
next :
value : 3
next : null
継承
public class ForeignStudent extends Student {
public String country;
public void setCountry(String c) {
country = c;
}
}
• Student は次のスライドの定義を用いる。
public class Student {
public String name;
public int id;
static int nextid = 1;
public void setName(String n) {
name = n;
id = nextid;
nextid++;
}
public Student(String n) {
name = n;
id = nextid;
nextid++;
}
public Student() {}
}
サブクラスのインスタンス
class StudentTest {
public static void main(String[] args) {
ForeignStudent s = new ForeignStudent();
s.setName(“Potter”);
s.setCountry(“USA”);
System.out.println(s.name);
System.out.println(s.country);
}
}
型と継承
class StudentTest {
public static void main(String[] args) {
Student ss = new ForeignStudent();
ss.setName(“Potter”);
System.out.println(ss.name);
}
}
演習
• 様々な方法でStudentオブジェクトを
生成してみよ。
• Cellオブジェクトを用いて実際に
リンク構造(リスト)を作ってみよ。
グラフィック・オブジェクト
(タートル・グラフィクス)
public class T21 {
public static void main(String[] args){
TurtleFrame f;
//変数 f の型宣言
f = new TurtleFrame();
//TurtleFrameを作成し
//fに代入
Turtle m = new Turtle();
//Turtle を作成し,
//m の初期値として代入
Turtle m1 = new Turtle();//もう1つ作成し,
//m1 の初期値として代入
f.add(m);
//f に m を追加
f.add(m1);
//f に m1 を追加
m.fd(100);
//m よ前に 100 進め
m.rt(90);
//m よ右に 90 度回れ
m.fd(150);
//m よ前に 150 進め
m1.rt(90);
//m1 よ右に 90 度回れ
m1.fd(100);
//m1 よ前に 150 進め
}
}
public class T45 {
public static void main(String[] args){
TurtleFrame f = new TurtleFrame();
Turtle m = new Turtle();
f.add(m);
for(int j = 0; j < 8; j++){
for(int i = 0; i < 5; i++){
m.fd(50);
m.lt(72);
}
m.fd(50);
m.rt(45);
}
}
}
public class House extends Turtle { //Turtle を拡張する
public House() {
super();
}
public House(int x, int y, int a) {
super(x,y,a);
}
public void polygon(int n, int s){
//polygonメソッドの定義
int a = 360/n;
//曲がる角度を求めておく
for(int j = 0; j < n; j++){
//n 回繰り返す
fd(s);
//s 前に進んで
rt(a);
//a 曲がるのを
}
}
public void house(int s){
//house メソッドの定義
polygon(4,s);
// polygon を利用
fd(s);
rt(30);
polygon(3,s);
lt(30); bk(s);
//元の場所に戻しておく
}
}
public class T61 {
public static void main(String[] args){
TurtleFrame f = new TurtleFrame();
House m = new House();
int s = 50;
f.add(m);
m.house(s);
m.up(); m.fd(s * 2); m.down();
m.polygon(3, s / 2);
m.up(); m.fd(s); m.down();
m.polygon(10, s / 5);
}
}