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

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

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

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

Java

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

オブジェクト指向

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

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

解決済

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

guijiu
guijiu

総合スコア35

UML

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

Java

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

オブジェクト指向

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

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

2回答

0リアクション

0クリップ

324閲覧

投稿2022/10/03 13:03

編集2022/10/03 13:06

質問

結城著「デザインパターン(増補改訂版)」(以下、当該書籍)にて、デザインパータンを勉強しています。

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

Iteratorパターンのクラス図
(尚、本クラス図は、原本にはないMainクラスを追記しています。またMainクラスからBookShelfクラスへの関連の線が、破線になるのか実線になるのか、矢印が必要か否かわからないので、とりあえず破線でつないでいます。悪しからず、ご了承ください。)

さて本題に移ります。赤線で強調した部分ですが、AggregateインタフェースとIteratorインタフェースの間の関連の説明「Creates(生成)」になっています。なぜ、AggregateインタフェースとIteratorインタフェースの間に関連として「Creates(生成)」の線が引けるのか、疑問に思い質問します。

「Creates」の意味は、「AAAクラスがBBBクラスを生成する」と言うことだと理解しています(当該書籍、xxxiiページに記述)。私の理解でソースコードを書けば、次のようにAAAクラスの中のメソッドでBBBクラスをnewすることだと考えています。

Java

class AAA { public BBB abc() { ........ return new BBB(); } }

しかし、当該書籍に記述されたAggregateインタフェースのソースコード(上記クラスを記述したソースコードは、下の方にまとめて掲載)には、上記に類するコードはありません。それらしいコードは、BookShelfクラスのiterator()メソッドではないかと思います。

Java

// ConcreteAggregate役 public class BookShelf implements Aggregate { ...... public Iterator iterator(){ return new BookShelfIterator(this); } }

なぜ、赤線で強調した関連が「Creates(生成)」がになっているのでしょうか?またこのCreatesが意味するソースコードは、どの部分なのでしょうか?
お手数をお掛けしますが、ご教示の程よろしくお願いします。

ソースコード

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

Java

public interface Aggregate{ public abstract Iterator iterator(); }

Java

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

Java

// ConcreteAggregate役 public class BookShelf implements Aggregate { private Book[] books; private int last = 0; // 本棚を作るコンストラクタ(本棚にしまえる本の最大冊数を指定) public BookShelf(int maxsize){ this.books = new Book[maxsize]; } // 指定したインデックスの本を取り出す(返す) public Book getBookAt(int index){ return books[index]; } // 本を追加する public void appendBook(Book book){ this.books[last] = book; last++; } // 現在本棚に収納されている本棚の冊数を返す public int getLength() { return last; } public Iterator iterator(){ return new BookShelfIterator(this); } }

Java

// ConcreteIterator役 public class BookShelfIterator implements Iterator { private BookShelf bookShelf; private int index; // 要素の数をカウントアップするインデックス // コンストラクタ public BookShelfIterator(BookShelf bookShelf){ this.bookShelf = bookShelf; this.index = 0; } // 次の要素の有無を調べるメソッド // 現在のインデックスが本棚に収納されている冊数を超えていないか調べることで // 次の要素が歩かないかを返す public boolean hasNext(){ if(index < bookShelf.getLength()){ return true; } else { return false;} } // 次の本を取り出すメソッド // 現在のインデックスを本棚に与えその番号の本を取り出す public Object next(){ Book book = bookShelf.getBookAt(index); index++; return book; } }

Java

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

UML

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

Java

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

オブジェクト指向

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

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。