• 検索結果がありません。

Lecture 2 Slides (January 7, 2010)

N/A
N/A
Protected

Academic year: 2021

シェア "Lecture 2 Slides (January 7, 2010)"

Copied!
62
0
0

読み込み中.... (全文を見る)

全文

(1)

CS193P - Lecture 2

iPhone Application Development

Objective-C Foundation Framework 1 Thursday, January 7, 2010 日本語解説 小嶋 秀樹(宮城大学) xkozima@myu.ac.jp

(2)

Announcements

Enrollment process is almost done

Shooting for end of day Friday

Please drop the class in Axess if you are not enrolled.

おしらせ

履修登録(選抜)はほぼ終了

金曜じゅう(に終了)をめざす

(3)

Office Hours

David Jacobs

■ Mondays 4-6pm: Gates 360

Paul Salzman

■ Some time. Best to try all possible times until you hit it

■ Some place, probably in Gates. Just come by and yell real loud

3 Thursday, January 7, 2010

いつか.会えるまで何度でもトライしてね. どこか,たぶん Gates(建物).

(4)

iPhone SDK

Enrolled students will be invited to developer program

■ Login to Program Portal ■ Request a Certificate

■ Download and install the SDK

Will need your Device UDIDs - details to come

Auditors will need to sign up for Developer Program independently

■ Free for Simulator development ■ $99 for on-device development

履修学生は Developer Program に招待されます. デバイス(実機)の UDID が必要ですー詳細は後述. 証明書をリクエスト 聴講生は個別に Developer Program への加入が必要 シミュレータ上の開発は無料 実機上の開発は $99/年

(5)

Getting Help

The assignment walks you through it

Key spots to look

■ API & Conceptual Docs in Xcode ■ Class header files

■ Docs, sample code, tech notes

on Apple Developer Connection (ADC) site

■ http://developer.apple.com ■ Dev site uses Google search

5 Thursday, January 7, 2010

ヘルプを受けるには

宿題をとおして方法を把握 ここを見よ

(6)

Today’s Topics

Questions from Tuesday or Assignments?

Object Oriented Programming Overview

Objective-C Language

Common Foundation Classes

今日の話題

OOP 概論

Objective-C 言語

(7)

Object Basics

7 Thursday, January 7, 2010

(8)

OOP Vocabulary

Class: defines the grouping of data and code, the “type” of an object

Instance: a specific allocation of a class

Method: a “function” that an object knows how to perform

Instance Variable (or “ivar”): a specific piece of data belonging to an object OOP 用語 クラス:     データ(インスタンス変数)とコード(メソッド)の          まとまりの定義(設計図).オブジェクトの「型」. インスタンス:  クラスが(メモリ上に)実体化されたもの メソッド:    オブジェクトが実行できる「関数」. インスタンス変数:オブジェクトに含まれるデータ. 

(9)

OOP Vocabulary

Encapsulation

■ keep implementation private and separate from interface

Polymorphism

■ different objects, same interface

Inheritance

■ hierarchical organization, share code, customize or extend

behaviors 9 Thursday, January 7, 2010 OOP 用語 カプセル化(インタフェースと内部実装を分離) ポリモーフィズム(同じインタフェースをもつ       異なるオブジェクト) 継承(インヘリタンス) 階層構造,コード共有とカスタマイズ・拡張

(10)

Inheritance

Hierarchical relation between classes

Subclass “inherit” behavior and data from superclass

Subclasses can use, augment or replace superclass methods

Superclass Subclass NSObject UIControl UIButton UITextField 継承(インヘリタンス) スーパークラス (上位・祖先) サブクラス  (下位   子孫) クラス間の階層関係 下位は上位の動作とデータを         継承する

(11)

Inheritance

Memory management

Hierarchical relation between classes

Subclass “inherit” behavior and data from superclass

Subclasses can use, augment or replace superclass methods

Superclass Subclass NSObject UIControl UIButton UITextField 10 Thursday, January 7, 2010 継承(インヘリタンス) メモリ管理 クラス間の階層関係 下位は上位の動作とデータを         継承する 下位は上位のメソッドを拡張あるいは上書きしてもよい

(12)

Inheritance

Memory management

Generic behaviors

Hierarchical relation between classes

Subclass “inherit” behavior and data from superclass

Subclasses can use, augment or replace superclass methods

Superclass Subclass NSObject UIControl UIButton UITextField クラス間の階層関係 下位は上位の動作とデータを         継承する 継承(インヘリタンス) メモリ管理 共通的な動作

(13)

Inheritance

Memory management Generic behaviors Specific behaviors

Hierarchical relation between classes

Subclass “inherit” behavior and data from superclass

Subclasses can use, augment or replace superclass methods

Superclass Subclass NSObject UIControl UIButton UITextField 10 Thursday, January 7, 2010 継承(インヘリタンス) メモリ管理 共通的な動作 クラス間の階層関係 下位は上位の動作とデータを         継承する 下位は上位のメソッドを拡張あるいは上書きしてもよい 個別的な動作

(14)

More OOP Info?

Drop by office hours to talk about basics of OOP

Tons of books and articles on OOP

Most Java or C++ book have OOP introductions

Objective-C 2.0 Programming Language

■ http://developer.apple.com/documentation/Cocoa/Conceptual/

ObjectiveC

OOP についてもっと詳しく? 本や論文がいっぱい

(15)

Objective-C

12 Thursday, January 7, 2010

(16)

Objective-C

Strict superset of C

■ Mix C with ObjC

■ Or even C++ with ObjC (usually referred to as ObjC++)

A very simple language, but some new syntax

Single inheritance, classes inherit from one and only one superclass

Protocols define behavior that cross classes

Dynamic runtime

Loosely typed, if you’d like

C のスーパーセット(Cを完全に含む) C と ObjC をミックスしてよい さらに C++ も 新しい文法も少し 単一継承(つねに親は1人⇒木構造) プロトコル:  クラス間で共有される  メソッド名の集合 動的なランタイム  弱い型づけ (お好きなら)

(17)

Syntax Additions

Small number of additions

Some new types

■ Anonymous object ■ Class

■ Selectors

Syntax for defining classes

Syntax for message expressions

14 Thursday, January 7, 2010 文法のつけたし わずかなつけたし 新しい「型」   無名オブジェクト型(id)   クラス型   セレクタ型 クラス定義のための文法   @interface @implementation メッセージ式のための文法   [receiver message];

(18)

Dynamic Runtime

Object creation

■ All objects allocated out of the heap ■ No stack based objects

Message dispatch

Introspection 動的なランタイム オブジェクトの生成 すべてのオブジェクトは ヒープ領域に作られる スタック領域(ローカル変数) に置かれるオブジェクトはない メッセージの配達 (実行時に配達先  を決める) 「内省」 (オブジェクトの属するクラスを  実行時に調べることができる)

(19)

OOP with ObjC

16 Thursday, January 7, 2010

(20)

Classes and Instances

In Objective-C, classes and instances are both objects

Class is the blueprint to create instances

Class

Data method method method method method method method method Data method method method method Data method method method method Data method method method method Data method method method method Data クラスとインスタンス    どちらも 「オブジェクト」 クラスはインスタンスを生成するための「設計図」 設計図 実際に生成されたインスタンス

(21)

Classes and Objects

Classes declare state and behavior

State (data) is maintained using instance variables

Behavior is implemented using methods

Instance variables typically hidden

■ Accessible only using getter/setter methods

18 Thursday, January 7, 2010 クラスとオブジェクト ・クラスは「(内部)状態」と「動作」を定義. ・(内部)状態は「インスタンス変数」として保持. ・動作は「メソッド」として実装. ・インスタンス変数は,通常,隠されていいる.    getter / setter のみを使ってアクセス可能.

(22)

OOP From ObjC Perspective

Everybody has their own spin on OOP

■ Apple is no different

For the spin on OOP from an ObjC perspective:

■ Read the “Object-Oriented Programming with Objective-C”

document ■ http://developer.apple.com/iphone/library/documentation/ Cocoa/Conceptual/OOP_ObjC ObjC の視点からみたOOP 「OOP」の解釈は各人各様   Apple も同様 ObjeC の視点からみた OOP の解釈:

 ・"Object-Oriented Programming with Objective-C" を読む?  ・"... /OOP ObjC" も読む?

(23)

Messaging syntax

20 Thursday, January 7, 2010

(24)

Class and Instance Methods

Instances respond to instance methods

- (id)init;

- (float)height;

- (void)walk;

Classes respond to class methods

+ (id)alloc; + (id)person; + (Person *)sharedPerson; クラスメソッドとインスタンスメソッド インスタンスは インスタンスメソッドに 応答する クラスは クラスメソッドに応答する (宣言が − で始まる) (宣言が + で始まる)

(25)

Message syntax

[receiver

message

]

[receiver

message:

argument]

[receiver

message:

arg1

andArg:

arg2]

22 Thursday, January 7, 2010

メッセージの文法 受け手

(26)

Message examples

Person *voter; //assume this exists

[voter castBallot];

int theAge = [voter age];

[voter setAge:21];

if ([voter canLegallyVote]) {

// do something voter-y }

[voter registerForState:@"CA" party:@"Independant"];

NSString *name = [[voter spouse] name];

メッセージの例 投票者 人 投票する 法的に投票できるか (有権者か) 州への登録 居留する州 無所属 政党 配偶者

(27)

Person *voter; //assume this exists

[voter castBallot];

int theAge = [voter age];

[voter setAge:21];

if ([voter canLegallyVote]) {

// do something voter-y }

[voter registerForState:@"CA" party:@"Independant"];

NSString *name = [[voter spouse] name];

- (void)castBallot;

- (int)age;

- (void)setAge:(int)age;

- (BOOL)canLegallyVote;

- (void)registerForState:(NSString*)state

party:(NSString*)party;

- (Person*)spouse;

- (NSString*)name;

Method definition examples

24 Thursday, January 7, 2010 メソッド定義の例        投票 年齢(getter) 年齢(setter) 有権者か? 州への登録 政党 配偶者(たぶん getter) 名前(たぶん getter)

(28)

Message expression

[receiver method: argument]

Message

[receiver method: argument]

Selector

[receiver method: argument]

Method

The code selected by a message

Terminology

用語 メッセージ式 メッセージ セレクタ メソッド 引数 メッセージによって選択されるプログラムコード

(29)

Dot Syntax

Objective-C 2.0 introduced dot syntax

Convenient shorthand for invoking accessor methods

float height = [person height]; float height = person.height; [person setHeight:newHeight]; person.height = newHeight;

Follows the dots...

[[person child] setHeight:newHeight]; // exactly the same as

person.child.height = newHeight; 26 Thursday, January 7, 2010 ドット記法 ObjC 2.0 で導入 アクセサ(getter/setter) を呼び出すための略記法 ドットをたどる… (上と下は同じ意味) (上と下は同じ意味) getter setter

(30)
(31)

Dynamic and static typing

Dynamically-typed object

! id anObject

■ Just id

■ Not id * (unless you really, really mean it...)

Statically-typed object

! Person *anObject

Objective-C provides compile-time, not runtime, type checking

Objective-C always uses dynamic binding

28 Thursday, January 7, 2010 動的な型づけ,静的な型づけ 動的に型づけられるオブジェクト 静的に型づけられたオブジェクト (人クラス) (ポインタになっていることに注意) ObjC はコンパイル時に型チェック(実行時ではない) ObjC は実行時にバインディング(実行するメソッドの同定)

(32)

The null object pointer

Test for nil explicitly

! if (person == nil) return;

Or implicitly

! if (!person) return;

Can use in assignments and as arguments if expected

! person = nil;

! [button setTarget: nil];

Sending a message to nil?

! person = nil;

! [person castBallot];

空オブジェクト nil または暗黙的に… 明示的に nil かどうかをテスト 代入にも引数にも使える nil へメッセージを送ると…

(33)

BOOL typedef

When ObjC was developed, C had no boolean type (C99 introduced one)

ObjC uses a typedef to define BOOL as a type

BOOL flag = NO;

Macros included for initialization and comparison: YES and NO

if (flag == YES)

if (flag)

if (!flag)

if (flag != YES)

flag = YES;

flag = 1;

30 Thursday, January 7, 2010 BOOL 型定義 ObjC 開発当時,C には boolean 型がなかった ObjC では BOOL 型を定義   値は YES (1), NO (0)

(34)

Selectors identify methods by name

A selector has type SEL

! SEL action = [button action];

! [button setAction:@selector(start:)];

Conceptually similar to function pointer

Selectors include the name and all colons, for example:

!

-(void)setName:(NSString *)name age:(int)age;

would have a selector:

! SEL sel = @selector(setName:age:);

セレクタはメソッドを(名前によって)同定する セレクタ型

概念的には

関数へのポインタに似ている

(35)

Working with selectors

You can determine if an object responds to a given selector

! id obj;

! SEL sel = @selector(start:);

! if ([obj respondsToSelector:sel]) {

! [obj performSelector:sel withObject:self] ! }

This sort of introspection and dynamic messaging underlies many Cocoa design patterns

! -(void)setTarget:(id)target; ! -(void)setAction:(SEL)action; 32 Thursday, January 7, 2010 セレクタの扱い 与えられたセレクタに オブジェクトが応答できるか? このような「内省」や 動的なメッセージ配達が Cocoa デザインパターンの 根底にある

(36)
(37)

Class Introspection

You can ask an object about its class

! Class myClass = [myObject class];

! NSLog(@"My class is %@", [myObject className]);

Testing for general class membership (subclasses included):

! if ([myObject isKindOfClass:[UIControl class]]) { ! // something

! }

Testing for specific class membership (subclasses excluded):

! if ([myObject isMemberOfClass:[NSString class]]) { ! // something string specific

! } 34 Thursday, January 7, 2010 クラスの内省 あるオブジェクトに 直属するクラスを尋ねる あるオブジェクトが あるクラスの下位に位置するか あるオブジェクトが あるクラスの直属であるか

(38)
(39)

Identity versus Equality

Identity—testing equality of the pointer values

if (object1 == object2) {

NSLog(@"Same exact object instance"); }

Equality—testing object attributes

if ([object1 isEqual: object2]) {

NSLog(@"Logically equivalent, but may

be different object instances"); } 36 Thursday, January 7, 2010 同一性と同値性 全く同一のインスタンス(ポインタ比較) 論理的に同値のインスタンス2つ (ただし同一インスタンスかは不明)

(40)

-description

NSObject implements -description

- (NSString *)description;

Objects represented in format strings using %@

When an object appears in a format string, it is asked for its description

[NSString stringWithFormat: @”The answer is: %@”, myObject];

You can log an object’s description with:

NSLog([anObject description]);

Your custom subclasses can override description to return more specific information

description というメソッド NSObject で実装 (つまり何にでも使える) %@ とすると… …description を書き出す ログに書き出すことも可 (コンソールに出力) あなたがカスタム化した サブクラスは,親クラスの description メソッドを 上書きして,より詳しい

(41)

Foundation Classes

38 Thursday, January 7, 2010

(42)

Foundation Framework

Value and collection classes

User defaults

Archiving

Notifications

Undo manager

Tasks, timers, threads

File system, pipes, I/O, bundles

・数,文字列,配列,辞書など ・アプリ個人設定など ・アーカイブなど ・通知など ・アンドゥなど ・タスク,タイマ,スレッドなど ・入出力など

(43)

NSObject

Root class

Implements many basics

■ Memory management ■ Introspection ■ Object equality 40 Thursday, January 7, 2010 ルート(最上位)クラス オブジェクトの基本機能を実装   メモリ管理   内省   同値性の判定

(44)

NSString

General-purpose Unicode string support

■ Unicode is a coding system which represents all of the world’s

languages

Consistently used throughout Cocoa Touch instead of “char *”

Without doubt the most commonly used class

Easy to support any language in the world with Cocoa

ユニコード文字列 ユニコードとは世界中の言語を表現するコード体系

・char * に代って Cocoa Touch 全般で一貫して使われる. ・疑いもなく最もよく使われるクラス.

(45)

String Constants

In C constant strings are

! ! ! “simple”

In ObjC, constant strings are

! @“just as simple”

Constant strings are NSString instances

! NSString *aString = @”Hello World!”;

42 Thursday, January 7, 2010 C の文字列定数(char *) ObjC の文字列定数 文字列定数は NSString のインスタンス

(46)

Format Strings

Similar to printf, but with %@ added for objects

NSString *aString = @”Johnny”;

NSString *log = [NSString stringWithFormat: @”It’s ‘%@’”, aString];

log would be set to It’s ‘Johnny’

Also used for logging

NSLog(@”I am a %@, I have %d items”, [array className], [array count]);

would log something like:

I am a NSArray, I have 5 items

文字列の書式付生成

printf と似ているが オブジェクト

のために %@ を追加

(47)

NSString

Often ask an existing string for a new string with modifications

- (NSString *)stringByAppendingString:(NSString *)string; - (NSString *)stringByAppendingFormat:(NSString *)string; - (NSString *)stringByDeletingPathComponent;

Example:

NSString *myString = @”Hello”; NSString *fullString;

fullString = [myString stringByAppendingString:@” world!”];

fullString would be set to Hello world!

44 Thursday, January 7, 2010

既存の文字列を要求(入力)し,

変更を加えた新しい文字列をつくる(出力)

(48)

NSString

Common NSString methods

- (BOOL)isEqualToString:(NSString *)string; - (BOOL)hasPrefix:(NSString *)string;

- (int)intValue;

- (double)doubleValue;

Example:

NSString *myString = @”Hello”; NSString *otherString = @”449”; if ([myString hasPrefix:@”He”]) {

// will make it here }

if ([otherString intValue] > 500) { // won’t make it here

一般的な NSString のメソッド

prefix = 接頭辞

(49)

NSMutableString

NSMutableString subclasses NSString

Allows a string to be modified

Common NSMutableString methods

+ (id)string;

- (void)appendString:(NSString *)string;

- (void)appendFormat:(NSString *)format, ...;

NSMutableString *newString = [NSMutableString string]; [newString appendString:@”Hi”];

[newString appendFormat:@”, my favorite number is: %d”, [self favoriteNumber]]; 46 Thursday, January 7, 2010 可変(可変長)文字列        NSString のサブクラス 文字列の内容を変更できる

(50)

Collections

Array - ordered collection of objects

Dictionary - collection of key-value pairs

Set - unordered collection of unique objects

Common enumeration mechanism

Immutable and mutable versions

■ Immutable collections can be shared without side effect ■ Prevents unexpected changes

■ Mutable objects typically carry a performance overhead

データの集まり 配列:順序づけられた… 辞書:K-Vペアの集まり 集合:順序なし重複なし 列挙 変更不可 / 変更可能 ・変更不可の「集まり」は副作用なく共有できる ・(よって)不意の改変を避けることができる ・変更可能なオブジェクトは(便利だが)パフォーマンスが悪い

(51)

NSArray

Common NSArray methods

! + arrayWithObjects:(id)firstObj, ...; // nil terminated!!! ! - (unsigned)count;

! - (id)objectAtIndex:(unsigned)index; ! - (unsigned)indexOfObject:(id)object;

NSNotFound returned for index if not found

NSArray *array = [NSArray arrayWithObjects:@”Red”, @”Blue”, @”Green”, nil];

if ([array indexOfObject:@”Purple”] == NSNotFound) { NSLog (@”No color purple”);

}

Be careful of the nil termination!!!

48 Thursday, January 7, 2010 配列 末尾に nil を!! 見つからなかった場合に インデックスとして NSNotFound が返る 末尾に nil を置くことに注意 (arrayWithObjects メソッド)

(52)

NSMutableArray

NSMutableArray subclasses NSArray

So, everything in NSArray

Common NSMutableArray Methods

+ (NSMutableArray *)array; - (void)addObject:(id)object; - (void)removeObject:(id)object; - (void)removeAllObjects;

- (void)insertObject:(id)object atIndex:(unsigned)index;

NSMutableArray *array = [NSMutableArray array]; [array addObject:@”Red”]; [array addObject:@”Green”]; [array addObject:@”Blue”]; 可変配列 NSArray のサブクラス だから NSArray(の機能) のすべてを使える

(53)

NSDictionary

Common NSDictionary methods

+ dictionaryWithObjectsAndKeys: (id)firstObject, ...; - (unsigned)count;

- (id)objectForKey:(id)key;

nil returned if no object found for given key

NSDictionary *colors = [NSDictionary

dictionaryWithObjectsAndKeys:@”Red”, @”Color 1”, @”Green”, @”Color 2”, @”Blue”, @”Color 3”, nil]; NSString *firstColor = [colors objectForKey:@”Color 1”];

if ([colors objectForKey:@”Color 8”]) { // won’t make it here

} 50 Thursday, January 7, 2010 辞書 与えられたキーに対応するオブジェクト         がなければ nil を返す

(54)

NSMutableDictionary

NSMutableDictionary subclasses NSDictionary

Common NSMutableDictionary methods

+ (NSMutableDictionary *)dictionary;

- (void)setObject:(id)object forKey:(id)key; - (void)removeObjectForKey:(id)key;

- (void)removeAllObjects;

NSMutableDictionary *colors = [NSMutableDictionary dictionary];

[colors setObject:@”Orange” forKey:@”HighlightColor”];

可変辞書

NSDictionary の サブクラス

(55)

NSSet

Unordered collection of objects

Common NSSet methods

! + setWithObjects:(id)firstObj, ...; // nil terminated ! - (unsigned)count; ! - (BOOL)containsObject:(id)object; 52 Thursday, January 7, 2010 集合 オブジェクトの順序なしの「集まり」       (重複もなし)

(56)

NSMutableSet

NSMutableSet subclasses NSSet

Common NSMutableSet methods

! + (NSMutableSet *)set; ! - (void)addObject:(id)object; ! - (void)removeObject:(id)object; ! - (void)removeAllObjects; ! - (void)intersectSet:(NSSet *)otherSet; ! - (void)minusSet:(NSSet *)otherSet; 可変集合 NSSet のサブクラス

(57)

Enumeration

Consistent way of enumerating over objects in collections

Use with NSArray, NSDictionary, NSSet, etc.

NSArray *array = ... ; // assume an array of People objects // old school

Person *person;

int count = [array count];

for (i = 0; i < count; i++) {

person = [array objectAtIndex:i]; NSLog([person description]);

}

// new school

for (Person *person in array) {

NSLog([person description]); } 54 Thursday, January 7, 2010 列挙 「集まり」 なら何でも // new school Person *p; for (p in array) { NSLog(...); } としてもよい

(58)

NSNumber

In Objective-C, you typically use standard C number types

NSNumber is used to wrap C number types as objects

Subclass of NSValue

No mutable equivalent!

Common NSNumber methods

+ (NSNumber *)numberWithInt:(int)value; + (NSNumber *)numberWithDouble:(double)value; - (int)intValue; - (double)doubleValue; 数(整数・実数) ObjC では,普通,標準的な C の数(整数・実数など)を使うことが多い NSNumber は C の数を オブジェクトに包んだもの NSMutableNumber はない

(59)

Other Classes

NSData / NSMutableData

■ Arbitrary sets of bytes

NSDate / NSCalendarDate

■ Times and dates

56 Thursday, January 7, 2010

その他のクラス

バイトデータ 時刻と日付

(60)

Getting some objects

Until we talk about memory management:

■ Use class factory methods

■ NSString’s +stringWithFormat: ■ NSArray’s +array

■ NSDictionary’s +dictionary

■ Or any method that returns an object except alloc/init or copy.

メモリ管理について 学ぶまでの間は… クラスファクトリメソッドを使って     オブジェクトを生成しよう もしくは, alloc/init/copy 以外の オブジェクトを返すメソッドを使って オブジェクトを生成しよう

(61)

More ObjC Info?

http://developer.apple.com/documentation/Cocoa/ Conceptual/ObjectiveC

Concepts in Objective C are applicable to any other OOP language

58 Thursday, January 7, 2010

ObjC における諸概念は

(62)

参照

関連したドキュメント

Evolution by natural selection results in changes in the density of phenotypes in the adaptive space.. An adaptive trait is a set of values (say height, weight) that a

心嚢ドレーン管理関連 皮膚損傷に係る薬剤投与関連 透析管理関連 循環器関連 胸腔ドレーン管理関連 精神及び神経症状に係る薬剤投与関連

In addition, it is claimed that fuzzy Edelstein’s contraction theorem is true whenever we consider the fuzzy metric space in the Kramosil and Mich´alek’s sense.. Finally, the

FROM CHIANGMAI THAILAND TO TOKYO JAPAN BY SEA ON BOARD DATE : January 12, 2011 VESSEL : ZEIKANMARU.

She has curated a number of major special exhibitions for the Gotoh Museum, including Meibutsu gire (From Loom to Heirloom: The World of Meibutsu-gire Textiles) in 2001,

Tokyo Electric Power Company Annual Report 2010.. Rising awareness of global warming has created new social expectations for TEPCO. We are conscious of global warming as a

42 UNHCR, The Democratic Republic of the Congo Regional Refugee Response Plan January 2019-December 2020, June 2019, page 7. 43 UNHCR, UNHCR UGA_Monthly Operational

『手引き 第 1 部──ステーク会長およびビショップ』 (2010 年),8.4.1;『手引き 第 2 部──教会の管理運営』 (2010 年),.