4

私は、スタンフォードのオンライン コース iPhone および iPad 用の iOS 7 アプリの開発 ( iTunes U のコースへのリンク) をフォローしています。

最初の課題では、メモに記載されているいくつかのクラス (Card、PlayingCard、Deck、PlayingCardDeck) を作成し、View Controller を更新してトランプのデッキにランダムなカードを表示するように生徒に求めます。

必要なタスクには次の 2 つがあります。

  1. タイプ Deck * のプライベート プロパティを CardGameViewController に追加します。
  2. 遅延インスタンス化を使用して、このプロパティを (プロパティの getter で) 割り当てて初期化し、PlayingCards の完全なデッキで開始するようにします。

コードに以下を追加しました。

// CardGameViewController.m
#import "PlayingCardDeck.H"

@interface CardGameViewController ()
...
@property (strong, nonatomic) Deck *deck;
@end

@implementation CardGameViewController
- (Deck *)deck
{
    if (!_deck) _deck = [[PlayingCardDeck alloc] init];
    return _deck;
}
...
@end

ヒントは次のことを示します。

  1. 追加する必要があるプロパティのタイプは (PlayingCardDeck ではなく) Deck である必要がありますが、PlayingCardDeck を使用して遅延インスタンス化する必要があることは明らかです。PlayingCardDeck は Deck を継承するため、これはオブジェクト指向プログラミングでは完全に合法です。オブジェクト指向プログラミングのこの概念に混乱している場合、このコースはかなり難しいかもしれません。

PlayingCardDeck は Deck のサブクラスです。それが「デッキ」であることを理解しています。

私が理解できないのは、PlyaingCardDeck の代わりに Deck のプロパティが使用されている理由です。

4

1 に答える 1

1

Deckプロパティのタイプとして使用すると、CardGameViewControllerより一般的なままになります。将来、別のタイプのデッキを使用したい場合は、デッキが作成されたコードの 1 行を変更するだけで済みます。

また、単にそのプロパティを公開した場合、と となどCardGameViewControllerではなく、さまざまな種類のデッキでさまざまなを作成できます。PlayingCardDeckGameViewControllerTarotCardDeckGameViewControllerPinochleCardDeckGameViewController

一般に、Deck代わりにを使用するとPlayingCardDeck、より多くのオプションが開かれたままになり、 の再利用性が向上しますCardGameViewController

于 2013-11-07T19:32:07.303 に答える