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

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

1回答

0リアクション

0クリップ

247閲覧

投稿2022/10/05 01:19

編集2022/10/05 02:02

質問

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

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

イメージ説明

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

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

イメージ説明

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

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

ソースコード一覧

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

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()); } } }

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

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

Java

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

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 Book{ private String name; public Book(String name){ this.name = name; } public String getName(){ return name; } }

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

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

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

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

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

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

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

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

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

xebme

2022/10/05 03:26

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

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

UML

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

Java

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

オブジェクト指向

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