PHP 上手なクラス化の方法!

こんにちは。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

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree