質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
UML

UML(統一モデリング言語)は、主にオブジェクト指向分析や設計を目的に記法の統一が図られたモデリング言語です。要求分析・システム分析・設計・テストなど幅広いシステム開発のフェーズを網羅しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

1回答

726閲覧

UML クラス図の書き方について

guijiu

総合スコア35

UML

UML(統一モデリング言語)は、主にオブジェクト指向分析や設計を目的に記法の統一が図られたモデリング言語です。要求分析・システム分析・設計・テストなど幅広いシステム開発のフェーズを網羅しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2022/10/05 01:19

編集2022/10/05 19:30

質問

結城著「Java言語で学ぶデザインパターン入門(増補改訂版)」(以下、当該書籍)にて、デザインパータンを勉強しています。(新刊の第3版はこちら

第1章Iteratorパターンに以下のようなクラス図が記述されています。

イメージ説明

ソースコードをみると、Aggregateインタフェース、Iteratorインタフェース、BookShelfクラス、BookShelfIteratorクラス、Bookクラスの5つの他に、Mainクラスがあります。

Mainクラスは、説明上、イテレータパターンでは重要でないのでクラス図に描かかれていないのだと思いますが、敢えて記載すると次のクラス図の赤線部分のように、「MainクラスとBookShelfクラスの間に関連の線を引き、名前をUses(使う)」と記述すればいいでしょうか?(あるいは、別の線種でしょうか?)

イメージ説明

Mainクラス、BookShelfクラス他のソースコードを、以下のソースコード一覧の項目に示します。

ご教示の程、よろしくお願いします。

ソースコード一覧

上記クラス図のソースコードを以下に示します。

Java

1public class Main { 2 public static void main(String[] args){ 3 // 本棚を作る 4 BookShelf bookShelf = new BookShelf(4); 5 6 // 本棚に本を登録する 7 bookShelf.appendBook(new Book("Around the world in 80 Days")); 8 bookShelf.appendBook(new Book("Bible")); 9 bookShelf.appendBook(new Book("Cinderella")); 10 bookShelf.appendBook(new Book("Daddy-Long-Legs")); 11 12 // 本棚に収納した本を数えだすためにイテレータのインスタンスを呼び出す 13 Iterator it = bookShelf.iterator(); 14 while(it.hasNext()){ 15 Book book = (Book)it.next(); 16 System.out.println(book.getName()); 17 } 18 } 19} 20

Java

1// ConcreteAggregate役 2public class BookShelf implements Aggregate { 3 private Book[] books; 4 private int last = 0; 5 6 // 本棚を作るコンストラクタ(本棚にしまえる本の最大冊数を指定) 7 public BookShelf(int maxsize){ 8 this.books = new Book[maxsize]; 9 } 10 11 // 指定したインデックスの本を取り出す(返す) 12 public Book getBookAt(int index){ 13 return books[index]; 14 } 15 16 // 本を追加する 17 public void appendBook(Book book){ 18 this.books[last] = book; 19 last++; 20 } 21 22 // 現在本棚に収納されている本棚の冊数を返す 23 public int getLength() { 24 return last; 25 } 26 27 28 public Iterator iterator(){ 29 return new BookShelfIterator(this); 30 } 31}

Java

1public interface Aggregate{ 2 public abstract Iterator iterator(); 3}

Java

1public interface Iterator{ 2 public abstract boolean hasNext(); // 次の要素があるかどうか調べるメソッド 3 public abstract Object next(); // 次の要素を得るためのメソッド 4}

Java

1// ConcreteIterator役 2public class BookShelfIterator implements Iterator { 3 private BookShelf bookShelf; 4 private int index; // 要素の数をカウントアップするインデックス 5 6 // コンストラクタ 7 public BookShelfIterator(BookShelf bookShelf){ 8 this.bookShelf = bookShelf; 9 this.index = 0; 10 } 11 12 // 次の要素の有無を調べるメソッド 13 // 現在のインデックスが本棚に収納されている冊数を超えていないか調べることで 14 // 次の要素が歩かないかを返す 15 public boolean hasNext(){ 16 if(index < bookShelf.getLength()){ 17 return true; 18 } else { 19 return false;} 20 } 21 22 // 次の本を取り出すメソッド 23 // 現在のインデックスを本棚に与えその番号の本を取り出す 24 public Object next(){ 25 Book book = bookShelf.getBookAt(index); 26 index++; 27 return book; 28 } 29}

Java

1public class Book{ 2 private String name; 3 4 public Book(String name){ 5 this.name = name; 6 } 7 8 public String getName(){ 9 return name; 10 } 11}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2022/10/05 03:26

BookShelfのBookに対する集約(◇)の向きが逆になっていませんか。初めから間違っていると思います。
guest

回答1

0

「MainクラスとBookShelfクラスの間に関連の線を引き、名前をUses(使う)」と記述すればいいでしょうか?

あるいは 「MainはBookShelfをhas(持っている/内包している)」と考えれば"集約(aggregate)"ですかね。

投稿2022/10/05 02:39

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guijiu

2022/10/05 10:30

捉え方によって、色々な表現ができてしまうのですね。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問