こんにちは。hirafujiです。
今日のPHPでは、「電話帳を作る」というお題のもと、上手なクラス化の方法について学びました。
【目次】
- どんな機能が必要か洗い出せ!
- 名詞を探せ!
- 動詞を探せ!
- コードはアウトラインから書け!
【どんな機能が必要か洗い出せ!】
まずこれから書いていくコードの大まかな流れを把握するために、どんな機能・処理が必要なのかざっくりと、しかし限界まで書き出していきます。
本日のお題「電話帳」に関しては、私は以下の様に書き出しました。
- 【電話帳に必要な機能・処理】
-
- top画面
-
・一覧表 ・何も操作しなくても、デフォルトで表示されている ・50音順で表示 ・名前、電話番号、住所の順に表示 ・追加ボタン ・クリックで入力画面に飛ぶ
- 入力画面
-
・各種入力フォーム ・名前(姓名にわけて2マスで入力/特に制限無し) ・読みがな(かな入力で1マスで入力/ひらがな以外の入力はNG) ・電話番号(3マスにわけて入力/半角数字以外の入力はNG/それぞれ4文字以下で入力) ・住所(都道府県、市区町村、番地・マンション名、郵便番号を2マス、合計5マスにわけて入力/郵便番号は半角数字以外の入力はNG) ・追加ボタン ・クリックで確認画面に飛ぶ
- エラー画面
-
・エラー文の表示 ・入力画面に戻るボタン ・クリックで入力画面に飛ぶ ・戻った入力画面には記入内容が書き込まれている
- 入力内容確認画面
-
・入力内容一覧表示 ・入力内容を表示 ・OKボタン ・クリックで完了画面に飛ぶ ・入力内容をカンマ区切りのファイルに保存する ・書き直しボタン ・クリックで入力画面に戻る ・戻った入力画面には記入内容が書き込まれている
- 追加完了画面
-
・完了しましたメッセージ ・一覧にもどるボタン ・クリックすると一覧に戻る
実はこの作業がなかなか面白く、書き出す内容から、注目点から、何から何まで十人十色な結果になります。
また、人によって詳しく分けれる部分が異なっているので、みんなの結果を総合すると見事な「書き出し」になったりします。
【名詞を探せ!】
次に、上で書き出した内容から、重要そうな名詞を取り出します。
実はこの名詞は、クラス名または属性名になります!
では早速ですが、上記で私が書き出した内容から名詞を取り出してみます。
すると、以下の様なものがありました。
- 電話帳
- 名前
- 読みがな
- 電話番号
- 郵便番号
- 住所
などなど…。
他にもたくさんありますが、今回の講義の範囲ではこんな感じでしょうか。
【動詞を探せ!】
続けて、動詞を取り出します。
先ほどは、名詞がクラス名や属性名になりましたが、今度は動詞がメソッド名になります!
- 表示する
- 入力する
などなど…。
【アウトラインから書け!】
では、今回の講義の最終段階です!
先ほど取り出した名詞をクラス名または属性名に、動詞をメソッド名にして、細かい処理内容は後回しにコードのアウトラインを書いてみると、以下の様になります。
<?php
class AddressBook //「電話帳」
{
private $people = array() ;
public function setPerson($person) {
}
public function getList() {
}
}
class Person
{
private $fname ; //「名前」
private $lname ;
private $fkana ; //「ふりがな」
private $lkana ;
private $tel1 ; //「電話番号」
private $tel2 ;
private $tel3 ;
private $zip1 ; //「郵便番号」
private $zip2 ;
private $pref ; //「住所」
private $adress1 ;
private $adress2 ;
public function setName($fname, $lname) { //「入力する」
}
public function setKana($fkana, $lkana) {
}
public function setZip($zip1, $zip2) {
}
public function setAdress($pref, $adress1, $adress2) {
}
public function setTel($tel1, $tel2, $tel3) {
}
public function getName($fname, $lname) { //「表示する」
}
public function getKana($fkana, $lkana) {
}
public function getZip($zip1, $zip2) {
}
public function getAdress($pref, $adress1, $adress2) {
}
public function getTel($tel1, $tel2, $tel3) {
}
}
?>
じゃじゃーん!どうでしょうか!
まだ内容は空っぽですが、今回の講義の目標であった「上手なクラス化」はしっかりできました。(少なくとも、私はできたと思います!)
今回の内容は、ものすごくタメになりました。これで、これから上手にクラス分けできそうです!
ということで、次回からはこのアウトラインをもとに、実際にコードを書き進めていきます。
(08/07/16 irisawa追記)
お待たせしました。動画上がりました。
part.1
part.2

コメントをどうぞ