サーバサイドスクリプトPHPを実感しよう

Similar documents
サーバサイドスクリプトPHPを実感しよう

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

プログラミング基礎I(再)

Microsoft PowerPoint - prog03.ppt

Javaプログラムの実行手順

PowerPoint プレゼンテーション

Prog2_12th

※ ポイント ※

Microsoft PowerPoint - chap10_OOP.ppt

PowerPoint プレゼンテーション

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Webデザイン論

PowerPoint プレゼンテーション

Microsoft PowerPoint - 第3回目.ppt [互換モード]

PowerPoint プレゼンテーション

Si 知識情報処理

スライド 1

スクールCOBOL2002

PowerPoint プレゼンテーション

レコードとオブジェクト

C言語講座 ~ファイル入出力編~

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

データ構造とアルゴリズム論

ファイル入出力

Microsoft PowerPoint - prog04.ppt

プログラミング入門1

GEC-Java

PowerPoint プレゼンテーション

JavaプログラミングⅠ

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

PowerPoint プレゼンテーション

ファイル入出力

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

Prog1_6th

デザインパターン第一章「生成《

第1章 ビジュアルプログラミング入門

演算増幅器

Microsoft Word - no11.docx

Microsoft PowerPoint - kougi6.ppt

Java言語 第1回

◎phpapi.indd

Android Layout SDK プログラミング マニュアル

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

Taro-ファイル処理(公開版).jtd

基本的な利用法

1. ファイルにアクセスするには ファイルにアクセスするには 1. ファイルを開く 2. アクセスする 3. ファイルを閉じるという手順を踏まなければなりません 1.1. ファイルを読み込む まずはファイルの内容を画面に表示させるプログラムを作りましょう 開始 FILE *fp char fname

プログラミング実習I

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

Prog2_9th

基礎プログラミング2015

テキストファイルの入出力1

Prog1_12th

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

ガイダンス

情報処理演習 B8クラス

スライド 1

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

Microsoft Word - Cプログラミング演習(9)

ホームページ・ビルダー16

2006年10月5日(木)実施

Webプログラミング演習

Microsoft PowerPoint - prog09.ppt

計算機プログラミング

Microsoft PowerPoint - prog09.ppt

プログラミング基礎

モバイルアプリを Azure で作る - データを扱う Azure Storage を利 してデータを保存する 本稿では PHP と Windows Azure を使って 画像などのファイルを扱うアプリケーションを開発する方法を説明します Windows Azure Platform では データの

Prog2_15th

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ

Prog2_10th

Microsoft PowerPoint - ruby_instruction.ppt

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

TestDesign for Web

WEBシステムのセキュリティ技術

JavaScriptプログラミング入門 2.JavaScriptの概要

図 2 Excel スプレッドシートの世界 のウィンドウ 図 3 Visual Basic の世界 のウィンドウ 図 3 の VBA ウィンドウは 図 2 の Excel ウィンドウのメニューの ツール をクリックし 開か れるプルダウンメニューで マクロ /Visual Basic Editor

Microsoft Word - no06.doc

Microsoft PowerPoint - prog04.ppt

メソッドのまとめ

Microsoft Word - VB.doc

PowerPoint Presentation

グラフの探索 JAVA での実装

第2回講義

PowerPoint プレゼンテーション

Prog2_9th

Microsoft Word - Android_SQLite講座_画面800×1280

プログラミングA

KDDI ホスティングサービス G120 KDDI ホスティングサービス G200 WordPress インストールガイド ( ご参考資料 ) rev.1.2 KDDI 株式会社 1

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

XMLとXSLT

slide4.pptx

Microsoft PowerPoint - kougi2.ppt

スライド 1

Transcription:

第 4 講オブジェクト指向プログラミングを体験しよう! 第 3 講で体験したのは 1 input_text.php で フォームからデータを入力して送信 2 file_writer.php で 受信したデータを整形してテキストファイルに保存 3 file_reader.php で テキストファイルからデータを読み込んで表示というものでした その際 保存には 1) テキストファイルを開く 2) ファイルに書き込む 3) ファイルを閉じるという作業が 読込表示には 1) テキストファイルを開く 2) ファイルから読み込む 3) ファイルを閉じるという作業が必要でした ということは 今後 テキストファイルとの間でデータのやり取りをする場合 その都度 これらの処理のためのコードを記述しなければならないということになりそうです これらは いわば お決まりの処理 です にもかかわらず その都度 同じようプログラムとして記述しなければならないというのは 面倒かつ無駄な気がします もし これらの お決まりの処理 をどこかにまとめておいて 必要な時に呼び出して使えるなら file_writer.php は 保存のためのデータの整形だけに力を注げますし file_reader.php では 読み込んできたデータの表示に注力することができます 本講で体験する オブジェクト指向プログラミング (Object Oriented Programming) では こうしたお決まりの処理は クラス と呼ばれるプログラムとして作成しておいて 必要に応じて呼び出して使うことができます つまり よく行う定型的な処理 ( 業務ロジック といいます) は 部品 化しておいて使いまわそうという発想です そこで オブジェクト指向プログラミングとは何か を概観した上で ファイル入出力専用クラスの作成と利用 を体験しておきましょう

司令塔プログラムオブジェクト指向プログラミング (Object Oriented Programming) とは 私たちが普通に ソフトウェア といっているのは 売上管理とか会計処理といった目的を達成するための1つのシステムです オブジェクト指向プログラミングでは このシステムを 司令塔プログラム ( 全体の流れをコントロールする側 ) と 部品プログラム ( 司令塔からの命令で実際に働く側 ) に分けて作り上げていく手法を採ります 部品プログラム B 部品プログラム A 部品プログラム C この部品に該当するのが オブジェクト (Object) です 問題は 何を部品 =Object にするかです プログラミングは しばしば 現実世界の事象をコンピュータ上で再現すること と定義されます この定義を前提にすると オブジェクトとは コンピュータ上で再現したい事象に登場する " モノ " であり それが部品化の対象となります ここでいう " モノ " とは 必ずしも形のある物 ( 有体物 ) とは限りません 目には見えないけれども 私たちが頭で観念することができるものであれば データベースとのやり取り 仕訳 評価 といった仕組みや制度でも " モノ " と考えることができます 本講の冒頭で述べた テキストファイルとのやり取り ( の仕組み ) も 目には見えませんが オブジェクト ( 部品 ) となりうるわけです

オブジェクト指向プログラミングの オブジェクト指向 とは プログラミングのモデルとなる現実世界の事象に登場するモノ =Object の再現を目指す といった意味だと考えてよいと思います もともと Object とは 対象 とか モノ のことであり Oriented( オリエンティド ) とは ~を目指した という意味です オブジェクト指向プログラミングを実践するためには 現実世界の事象をモデルにして そこにはどんな モノ が登場するのか そのモノはどんなデータを持ち どんな働きをすればいいのか また 複数のモノが登場するのなら モノ同士の関係はどうなっているのかの分析が欠かせません ( これを モデリング といいます ) そして 分析結果から 再現目的を達成するのに必要な範囲で モノ とそのモノが持つ データ と 機能 を洗練し それをその モノ にふさわしい名前をつけた クラス としてひとまとめにします 人間プレイヤー名前武器 ( グー チョキ パー ) 勝点名前を答える () 出す手を決める () 決めた手を出す () 勝点を加算する () 勝点を答える () クラスの候補 データ 機能 ジャンケンゲームにおける 人間プレイヤー のモデリング結果 最後に オブジェクト指向に対応するプログラミング言語のルールにしたがって これをそのままコードとして記述すれば プログラムとしての クラス の出来上がりです あとは 全体の流れをコントロールする司令塔プログラムから呼び出して使うだけです 司令塔プログラムでは 1 部品クラスの実体を生成し 2その実体が持つ機能 ( メソッド ) を呼び出すという方法で利用します 部品化されたクラスは 実体を作り出すための設計図 ( 雛形 ) であり その雛形をもとに生成される実体の方を オブジェクト と言うのが一般です そこで 混乱を避けるために 実体の方は インスタンス と呼んで クラスと区別するのが通例です

ファイル入出力専用クラスを作る では 実際に Forget-Me-Not システムで使える ファイル入出力専用クラス を作ってみましょう なお このクラスのデータと機能は下図のものとします ( クラス候補図 ) ( クラス図 ) ファイル入出力 FileIO パス ファイルへの経路 $path ファイル名 パス + ファイル名 $dirfile ファイルハンドル ファイルオブジェクト名 $handle ファイルをオープンする () open( $mode ); ファイルをロックする () lock( $lock ); ファイルに書き込む () write( $line ); ファイルから読み込む () read(); ファイルを閉じる () close(); [1] FileIO クラスを作成する 新規にメモ帳を開いて 以下のコードを入力します class FileIO { // フィールド ( 共通データ ) private $path; // private( プライベート ) は private $dirfile; // 他のクラスからアクセスできない private $handle; // ことを意味する修飾子 // コンストラクタ ( このクラスの実体を生成するための特殊なメソッド ) function construct( $path, $fname ) { $this->path = $path; フィールドへのアクセスに $this->dirfile = $path.$fname; は $this-> フィールド名 という方法をとる

// ファイルをオープンするメソッド function open( $mode ){ if(!file_exists( $this->path ) ) { // 指定パスが存在しない場合には mkdir( $this->path ); // 必要なディレクトリを作成する $this->handle = fopen( $this->dirfile, $mode ); // ファイルをロックするメソッド function lock( $lock ){ flock( $this->handle, $lock ); メソッドの ( ) 内の変数は 引数 といい このメソッドの処理には指定のデータが必要であることを宣言するもの // ファイルに書き込むメソッド function write( $line ) { $flag = false; if( fputs( $this->handle, $line ) ) return $flag; $flag = true; // ファイルから読み込んで値を返すメソッド function read() { $content = ""; while(!feof( $this->handle ) ) { $content.= fgets( $this->handle); return $content; return $content の部分は このメソッドの処理結果を呼び出し元に返す宣言 // ファイルを閉じるメソッド function close() { $flag = false; if( fclose( $this->handle ) ) return $flag; // クラス終わり $flag = true;

[2] FileIO クラスを保存する 以下の要領でファイルを保存します < 手順 > 1.notebook フォルダを丸ごとコピーして [oop_notebook] とする 2. ファイルを保存する 保存先 : oop_notebook ファイル名 : FileIO.class.php ファイルの種類 : すべて文字コード : UTF-8 [3] file_writer.php を変更する oop_notebook フォルダ内の file_writer.php を修正します < 手順 > 1.file_writer.php をメモ帳で開く 2. 中身を次のように変更する require_once ( 'FileIO.class.php' ); // FileIO クラスの読込み $line = date( 'Y 年 m 月 d 日 H:i:s' )." t"; // 書き込みデータの設定 $line.= $_POST['subject']." t"; // データの受け取り $line.= $_POST['topic']." t"; // データの受け取り $line.= $_POST['comment']." t"; // データの受け取り $fio = new FileIO( "./data/", "note.txt" ); // インスタンス ( 実体 ) 生成 $fio->open( 'ab' ); $fio->lock( LOCK_EX ); $fio->write( $line ); $fio->close(); // 後処理 : リダイレクトのためにヘッダ情報を出力 header( 'Location: http://localhost/oop_notebook/input_text.php' ); 3. 修正後 上書き保存する

[4] システムを実行する 以下のように URL アクセスする < 手順 > 1.xammp-control.exe を実行 2.Apache を start する 3. ブラウザを起動する 4. 以下の URL にアクセスする http://localhost/oop_notebook/input_text.php 5. データを入力する科目 : プログラミングⅠ 項目 : オブジェクト指向コメント : 現実世界の事象に登場するモノを部品として再現することを目指すこと 6.[ 送信 ] する エラー表示なく 最初の画面に戻れば OK [oop_notebook] フォルダ内に [data] フォルダが作られ その中に note.txt ファイルがあれば成功です データをもう一件入れておきましょう ネタは何でも OK です 次ページで行う修正による結果を確認するのに必要です

[5] file_reader.php を修正する file_reader.php を開いて 次のように変更し 上書き保存します require_once '../Encode.php';?> <html> <title> プログラミングⅠ:Forget-Me-Not</title></head> <body> <h1>read from Text</h1> require_once ( 'FileIO.class.php' ); // FileIO クラスの読込み $fio = new FileIO( "./data/", "note.txt" ); // インスタンス ( 実体 ) 生成 $fio->open( 'rb' ); $fio->lock( LOCK_SH ); $data = $fio->read(); $row = explode( " n", $data ); $i=0; while($i<count($row)-1){ $buf = explode( " t", $row[$i] );?> <ul> <li> print( $buf[1] );?></li> <li> print( $buf[2] );?> </li> <li> print( $buf[3] );?></li> <li> print( $buf[0] );?></li> </ul> <hr color="#ffaa66" /> $i++; $fio->close(); // ファイルを閉じる?> 上書き保存後は ブラウザから実行し </body> 結果を確認しましょう </html>