アフィリエイト広告を利用しています


スキル無しのシステムインストラクターから、システムエンジニアへの転身日記。
◇◆◇ 2013年取得資格
LPICレベル1
LPICレベル2
LPICレベル3 Core
LPICレベル3 Speciality 302
LPICレベル3 Speciality 303
LPICレベル3 Speciality 304

Cisco CCENT
Cisco CCNA

Java SE 7 Silver
Java SE 7 GOLD

OSS-DB Silver

◇◆◇ 2014年取得資格
HTML5 Professional レベル1

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

Webアプリケーションを作りましょう! その6 データベースとの連携

さて、データベースの環境も整いまして、
データベースのデータを引っ張り出してウェブページに表示したいと思います。

JSPを用意して、DBに接続するコードを書いて、そのあとに情報を引っ張り出す。
という風に一つに処理を書いてもいいのですが、
また新たなJSPを作るときに、また接続のためのコードを頭から書かなければいけません。

逆に、DBに接続するクラスを一つ用意して、
データベースに接続して情報を表示するだけのJSPを用意するようにすれば、
今後JSPをいくつ量産しても、そのDB接続用のクラスを使いまわせばいいので、
コードに無駄がありません。

それでは、最初に、DBに接続するためのクラスを用意します。

1.DBに接続するクラスを用意


Eclipse→新規→クラス→「ConnctorManager」(名前は適当)

package testWeb;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectorManager {
final static String DRIVER = "com.mysql.jdbc.Driver";
final static String URL ="jdbc:mysql://localhost/webapp";
final static String USER ="root";
final static String PASS ="pass";

public static Connection getConnection() throws SQLException{

try{
Class. forName(DRIVER);
} catch (ClassNotFoundException e){
e.printStackTrace();
throw new IllegalStateException("クラスのロードに失敗しました: "+e.getMessage());
}
Connection con = DriverManager. getConnection(URL,USER, PASS);
return con;

}
}


はい、残念なことにいろいろと解説しなければならないですね。

まず、import文で、下記3つを用意しています。
データベースに、url,user,passwordを持たせて接続するために必要とだけ思ってもらえれば。
import java.sql.Connection;
import java.sql.DriverManager; 
import java.sql.SQLException;

そして、try-catch これは例外処理で、tryで囲った部分を試して、
catchで指定したエラーが返ってきたら、catchで囲った内容を実施してね。
といったものです。あらかじめ発生する可能性のある例外処理を記載しておくのです。

なので、難しそうではありますが、ConnctorManagerのgetConnectionが呼ばれたら、
例外でなければ、DriverManager. getConnection( URL, USER, PASS );の値を呼び出したプログラムに
渡してね。といった内容。

つまり、DBの場所と、ユーザー名とパスワードを定義しているだけなんですね。

2.JSPからDBの内容を表示する

JSPを作成します。

accountinfo.jsp

<%@page contentType="text/plain; charset=UTF-8" %>
<%@page import= "testWeb.ConnectorManager,java.sql.*" %>>

<%
try{
Connection con = ConnectorManager.getConnection();
Statement smt = con.createStatement();
ResultSet rs = smt.executeQuery("select * from testaccount");
while(rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:"+rs.getString("USERNAME" )+",PASS:" +rs.getString("USERPASS"));
}
smt.close();
con.close();

}catch (SQLException e){
e.printStackTrace();
}
%>


JSPでもAPIのインポートは実施できます。
<%@ page import= "testWeb.ConnectorManager,java.sql.*" %>>行で、
ConnectorManagerクラスと、java.sql.*をインポートしました。

Statement … データベースにSQL文を送信するためのStatementオブジェクトを生成。
ResultSet … 指定されたSQLを実行

この2つの中身がどうやって動いているかまでは理解しなくても、
Connectionで接続して、Statementでオブジェクトを生成して、ResultsetでSQL文を実行。
といった順番で処理を行っているのはわかります。

そして、
while (rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:" +rs.getString("USERNAME" )+",PASS:" +rs.getString( "USERPASS"));
にて、テーブルの行一つ一つを最終行まで、ループさせて、そのつどテーブルの中身をプリントしています。

そして、http://localhost/testWeb/accountinfo.jspを実行すると、

このように、select * from testaccount が実行され、
その中身の1行1行がプリントされました。

WCP_06.jpg

このようにjsp(サーブレット)ではテーブルの中身を表示させることができます。
お分かりかと思いますが、
ResultSet rs = smt.executeQuery( "select * from testaccount");
この行のSQL文でINSERT INTOのような追加分を発行すれば、DBのデータを上書きすることができます。
こういったやり取りで、入力出力をDBとの連携させて行うことができ、
その結果をWEBに表示することで動的なページを生成しているわけです。

あとは、この応用で動的なページはどうにでも作れるかと思います。

いったん、Webアプリケーションを作ってみよう!は、休憩しましょうか。
1記事1記事にすごい時間がかかるww



Webアプリケーションを作りましょう! その5 データベース環境の準備

Webアプリケーションといえば、データベース。これは切っても切れない関係です。
Javaからデータベースに接続するためには、Java側としては「JDBC API」というAPIを利用して接続を行います。
そして、接続先のDBも自分で準備します。
好きなものでいいと思いますが、私自身がMySQLを勉強したいので今回はMySQLを利用します。
APIについては、DB環境を作成してから説明しましょう。

1.データベースのインストール

MySQL.com http://www.mysql.com/

MySQL Community Serverから
MySQL Installer 5.6.15をダウンロードします。
OracleIDとパスワードが必要です。
登録して、入力し MySQL Database 5.6.15 ZIP for Windows x86 (64bit) を取得しました。
(この辺の下り、手順が多くて面倒ですよね。)

そしてインストールします。
とりあえず、全てデフォルトでインストールしてしまいます。

そして、Java環境とDBの接続に使用するJDBCドライバも、
同じページでダウンロードできますが、Msi形式のインストーラーでダウンロードしたら、
MySQL ConnectorsからConnector/Jも一緒にインストールしてくれました。

Windows8環境ですが、MySQL Serverは、
C:\ProgramData\MySQL\MySQL Server 5.6に保存されたようです。

2.データベースの作成

Msiファイルでインストールするメリットとして、
MySQL WorkbenchというGUIでデータベースを操作できるツールもインストールしてくれます。

インストール時のアカウントやサーバの情報が既に設定されてインストールされているので、
パスワードの入力のみでサーバにログインできます。

webappというデータベースを作成します。

CREATE DATABASE webapp;
作ったwebappというデータベースに接続します。
use webapp;
テスト用のテーブルを作ります。
CREATE TABLE TESTACCOUNT (
USERID INT PRIMARY KEY,
USERNAME VARCHAR(30),
USERPASS VARCHAR(30)
);

テーブルの中身を入れていきます。

insert into testaccount values (1,'shade','001');
insert into testaccount values (2,'taro','002');
insert into testaccount values (3,'jiro','003');

テーブルの中身を確認します。

SELECT * FROM TESTACCOUNT;

WCP_04.jpg

これでデータベースの作成と、その中身を作成することができました。

3.JDBCドライバの配置

MySQLをダウンロードするときに、一緒にインストールされた
「Connector/J」をEclipseで立ち上げた「TestWeb」プロヘクトのWEB-INF/libディレクトリにコピーします。
デフォルトでインストールしたなら、C:\Program Files (x86)\MySQL\Connector J 5.1.27にあるはずです。
ファイル名は、「mysql-connector-java-5.1.27-bin.jar」です。

WCP_05.jpg

コピーが完了したら、ビルドパスに追加します。Connectorのjaraファイルを右クリックして、
ビルド・パス→ビルド・パスの追加を実行します。

これでデータベース環境を使う準備ができました。
次回、プログラムからデータベースに接続し、jspからデータベースの値を取得してみましょう。
接続の構文は、一個一個理解すれば、そんなには難しくないです。
一回接続のクラスを作ってしまえば、あとはそのクラスを読み込んで使うだけです。

うーん、Java楽しいな。

Webアプリケーションを作りましょう! その4 JSPとサーブレットでWEBアプリ入門!後編


昨日、JSPを体験していただきましたが、JSPは、やはり手軽です。
HTMLと似た感覚で書けますので、ウェブデザイナーが動的ページを作る際に、
JSPでウェブページを作成し、本格的な処理はプログラマがサーブレットに処理を書く
といった分担ができるわけですね。

3.サーブレットを作成する

では、サーブレットのクラスを作成します。
サーブレットはプログラムなので、WEB-INF/srcに配置します。
上記を右クリックし、新規→クラス→名前に「TestServlet」としました。

ここでは詳しく触れませんが、Servletを動かすには、javax.servlet〜のAPIのimport文を記述します。
(しなくてかけないというわけではありません)
という私も、APIに関しては知識が浅く、たいして語れる知識も持ち合わせていません。

またまたぶっ飛びますが、Javaの重要な技術「継承」もひつようになります。
この「TestServlet」クラスは、親クラスとして「HttpServlet」クラスを継承しています。
継承をすると、親が持っている値やメソッドを自分が定義したように使えるようなイメージです。
例えば、人クラスが鳥クラスを継承すると、空を飛べる。みたいなイメージです。
下記に示すdoGetというメソッドは、「HttpServlet」のメソッドを継承しています。

throwsという表現も出てきますね。
ここでは例外が発生する可能性があるものを書いていると思ってください。

恐らくいないと思いますが、このサイトで1からJavaをやってみた人には、
いきなりぶっ飛んだ記述になってますが、お許しください。


package testWeb;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse;

@WebServlet (name="testsrv" ,urlPatterns= "/testsrv")
public class TestServlet extends HttpServlet{
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws IOException,ServletException{
resp.setContentType( "text/html;charset=UTF-8" );
PrintWriter out = resp.getWriter();
String msg = "Servlet動くかなぁ・・・" ;
out.println( "<!DOCTYPE html><html><head><meta charset='UTF-8' />" );
out.println( "<title>Servletで作る動的ページ</title>" );
out.println( "</head><body>" );
out.println(msg);
out.println( "</body></html>" );
}
}

コードの前に書いた補足を読み取れば、何とかコードは読み取れるレベルかな。
タグを打つにも、print文の中に入れなければなりません。
あとは、やたらimportしなければいけませんね。
補足してないところで言うと、
import javax.servlet.annotation.WebServlet;
を使うことで、サーブレットの場所を指定しています。

実行結果は、下記です。

WCP_03.jpg

昨日の記事と比較すればわかるように、ただ単に、ウェブページの内容を表示したいだけなら
JSPで作った方が楽です。逆にコードが多くなるなら、サーブレットのほうが楽ですね。
結局、JSPもサーブレットなのです。JSPは実行されるときに、サーブレットソースに変換されてから
コンパイルされて実行しているのに過ぎないのです。
だから、昔の人はJSPなんてなかったから、全部サーブレットで書いていたんだぞ!なんて話をこの間、聞きました。

この技術を応用すれば、ウェブ上で動的ページを作ることが可能なわけです。
意外と簡単でしょう。ウェブアプリ。
ただこれをセキュリティ面、処理速度、I/O、データストアなど、
商用レベルで設計、構築しなければならないと考えると難しくなるのですね。

次は、データベースと連携させてみましょうか。
これができれば、データの受け渡しができるようになるので、
さらにアプリケーションっぽくなりますね。

Webアプリケーションを作りましょう! その3 JSPとサーブレットでWEBアプリ入門!前編

こう記事を書いていると気づくことがあります。
Webアプリケーションのプログラマを目指して転職したくせに、
結局インフラに配備され、すっごい遠回りしているというのが表面にはありますが、
今のインフラの知識は、開発をするうえで重要なものであることも事実です。

Webアプリケーションは、プログラムだけで完結するようなものではありません。
データベースは、ほぼ必須でしょうし、処理の一部は既存のアプリケーションを
活用することもあるかもしれません。
Tomcatを使うにしても、設定ファイルのどこをどういじると、
プログラムに影響が出るのかなど、挙げればきりがありません。
その辺を理解したプログラマは、やはり強いんじゃないかと思います。
やっぱり、いろいろ吸収したうえで、目指していかないとなぁ。。。

と、前置きが長くなりました。
今日は、jspとサーブレットをTomcat上で動かしていきます。
今まで、JavaEEの前に…シリーズで、クラスファイルをEclipse上で実行してきましたが、
サーブレットやTomcatのようなアプリケーションサーバがあって初めて起動します。
なので、練習するにも環境づくりは必須なのです。

jspとサーブレットって何?ってところから触れると、
この記事がそれだけで終わってしまいますので、簡単に。

サーブレット…HTMLの出力
JSP…HTMLに埋め込み

わかりそうでわからないような書き方ですが、
javaプログラムの中に、print文としてHTMLタグを入力するのがサーブレット。
HTML記述の中に、javaのコードを埋め込むのがjsp。

プログラムよりか、HTMLよりかといった感じで考えるとわかりやすいかもしれません。

1.プロジェクトを立てる

EClipse ファイル→新規→その他→Tomcatプロジェクト

プロジェクト名:testWeb
コンテキスト名:/testWeb

これで、testWebというプロジェクトが作成されて、
http://localhost/testWeb
というアドレスが作成されました。

このプロジェクトは以下のWEB-INF配下にJSPやサーブレットを作成していきます。

2.JSPファイルを作成する

Eclipseのパッケージ・エクスプローラから、testWebプロジェクトを右クリックして、
新規→ファイル→「test.jsp」と入力して完了。

すると、WEB-INFの下にjspファイルが作成されます。

では、jspの中身を書いていきます。

test.jsp

<%@ page contentType= "text/html;charset=UTF-8" %>
<%! String msg ="こんにちは。" ;%>

< html>
< head>
< meta charset= "UTF-8" />
< title> <%= msg %> ようこそ!私のホームページへ!

< body>
<%
for (int i=1;i<4;i++){
out.println(msg + i + "回目のあいさつ
" );
}
%>



今までのJavaEEの前に…で書いた内容+@の内容です。
恐らく、<% %>で囲まれたところがわからないだけで、
他はHTMLのタグと、一般的なJavaのコードだというのがわかると思います。

では、http://localhost/testWeb/test.jspにアクセスします。
Tomcatを立ち上げていなかった場合は、昨日設定したEclipseのメニューバーにある
Tomcatプラグインから起動させてください。

WCP_02.jpg

こういう感じで表示されました。jspが動きました。
ウェブページとプログラムがコラボしています。ちょっとウェブアプリっぽさが出ますね。

まずは、JSPを体験していただきました。
環境さえ構築してしまえば、バンバンJSPが書けるようになります。
そして、サーブレットに続きたいところですが、
ページの容量の関係上、サーブレット編は翌日に持ち越します。

Webアプリケーションを作りましょう! その2 開発環境を整える。

このブログで過去にTomcat入れたことあったかな…。
まぁ、いいや。Tomcatはいろんな入れ方がありますが、とてもシンプルに行きます。
それ以前に、Eclipseはインストールしてある前提ですよ。
入れ方は過去記事を参照ください。

まず、自分のローカル環境でテストが必要なので、そのテスト用のTomcatですね。

1.ローカル環境にTomcatをインストールする

Apache Tomcat http://tomcat.apache.org/

こちらのサイドバーから、Download→Tomcat7.0と選択し、ローカル環境へダウンロード!自分の環境のファイルをダウンロードしてくださいね。
(8.0でもよいですが、このあと紹介するプラグインが対応していません)
私の場合は、64-bit Windows zip (pgp, md5)こちらですね。
ダウンロードが終わったら解凍して、任意の場所へ配置してください。

Tomcatの開始プログラムは、ダウンロードしてきたフォルダのbinフォルダにあります「start.bat」です。これをダブルクリックをすればTomcatが起動します。

コマンドプロンプトが開いて、

25-Jan-2014 18:19:09.776 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
25-Jan-2014 18:19:09.776 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"]
25-Jan-2014 18:19:09.776 INFO [main] org.apache.catalina.startup.Catalina.start
Server startup in 1253 ms


こんな画面が開いたらTomcatが起動しています。

確認としては、

http://localhost:8080/

をたたいて、Tomcatの画面が見れれば成功です。

もし、startup.batを実行しても、コマンドプロンプトが瞬時に閉じてしまって
なにもおきない場合は、失敗です。
恐らく、環境変数の設定ができていません。

システム変数に、
変数名 JAVA_HOME
変数地 JDKの場所(デフォルトだと、C:\Program files\Java\jdk○○とかかな)

そして既存のシステム変数のPathにも、
%JAVA_HOME%\bin;
これを追記してあげてください。前のPathを消さないように注意してください。

これで、コマンドプロンプトで、
path
set JAVA_HOME
などをたたいても登録した変数が表示されなければ再起動。

これでいけなければ、apache_tomcatのフォルダ自体のアクセス権を疑ってください。

トラブルシューティングまで書いてたら、文字数が膨れ上がってきた・・・。
今日はまだまだ行きますからね。



2.EclipseにTomcatプラグインをインストール

プラグインはなくても、何とかなった気がしますが、
あると便利だと評判の、「Sysdeo Tomcat」を入れてみます。
これがあると、Eclipse上でTomcatの起動・停止・デバッグが行えるそうです。

Eclipseのプラグインはヘルプ→Eclipseマーケットプレイスからも入れられますが、
最新版が表示されなかったので、URLからダウンロードします。

Sysdeo Tomcatプラグイン
http://www.eclipsetotale.com/tomcatPlugin.html


画面をちょっと下に下げると、「Download」という画面が出てきます。
tomcatPluginV33.zip
こちらをダウンロードしました。そして解凍をしたら、EclipseのDropins
というフォルダに放り込んでください。

そして、Eclipseを起動すると、下の画像のように
Tomcatの起動・停止ができるメニューが追加されました。うーん、シンプル。

WCP_01.jpg

そしたら、プラグインの設定をしてあげましょう。
Eclipseのウィンドウ→設定からTomcatというメニューを選択します。

Tomcatのバージョンを、ダウンロードしてきたバージョンに。
(管理人は、8をダウンロードしてきてしまったため、バージョン7までしかないので、
7で登録をしています)

Tomcatホームを、Tomcatを保存したフォルダに設定。

とりあえず、これでTomcatプロジェクトというプロジェクトを使って開発できる環境が整いました。

お疲れ様でした。今日はここまで。
Webアプリケーションですので、サーバ上で動かします。
なので、最終的には、ローカル環境以外にサーバにTomcatをインストールして
アプリケーションをその上に配備するという作業があります。
なので、自分でWebアプリケーションを動作させるには、サーバ知識0ではいけないのですね。

そういう意味では、AWSは開発者にも、割とわかりやすい環境で、
ネットワーク知識や、Linuxサーバの立ち上げなどの作業は、省いてサーバを立てられるので、合わせてAWSも覚えていければ、今後楽なのかもしれません。

これは、まさに私のことをさしていて、サーバ知識は多少ありますが、
オンプレミス環境で一から立ち上げしたことはないので、AWSを通して
サーバ構築ってどういう感じで行われるのかを実感しています。

私は、ソースコードが読めるインフラエンジニアではない。
インフラ環境を組めるプラグラマーになるのです!

え?今はどっちかって? 前者よりですね・・・。

Webアプリケーションを作りましょう! その1 え?もう脱線なの?

JavaEEの前に復習をしてみるシリーズを中断しまして(また戻ります)
Webアプリケーション開発についても並行して進めていきます。

Webアプリとして、Todoリストだったり、掲示板やショッピングサイトなどが
これにあたり、ブラウザを通してサーバとDBの処理が絡んでデータを返す
といった仕組みです。

私は、これをメインでやりたくて、今の会社に入社しましたが、
Webアプリを乗せて動かすサーバサイドの仕事を主にさせられています。
勿論、この辺の知識があるのとないのでは、雲泥の差…。
DBやインフラを理解せずして、設計はもちろんコーディングも難しくなります。
そこに向けて、LinuxやOSS-DBを学習してきた。CCNAもね。

しかし、今インフラメインでWEBに携わっていますが、OSS-DBのSILVERを持っていても
DBが違えば、何の役にも立たなかった…ということ。
MySQLやOracleを使っていたら、障害対応とか、すごいパニクってしまう。
というか、PostgreSQLだったとしてもそうだ。全然役立ててないな…。
MySQLも資格試験あるんですよ。でも、ねぇ…。といった感じでしょうか。
MySQLは恐らく、衰退する一方だと思います。この業界が詳しい人は理由はわかると思います。それでも、PostgreSQL!PostgreSQL!とはなっていない気もします・・・。
どうしたもんですかね。

さて、Webアプリケーションは、

ブラウザ ←→ アプリケーションサーバ ←→ データストア

という関係で、リクエストとレスポンスで成り立っております。


具体的には、

アプリケーションサーバは、Tomcatやglassfishなど。
データベースは、MySQL,PostgreSQL,Oracleなどでしょうか。

この環境があって、初めて動くのでサーバサイド、データベースの知識もあるにこしたことはないです。プロジェクト単位で動いているので、役割がしっかり分かれていて、
サーブレットだけかければいいという場合もあると思います。
しかし、パーツパーツによっては、画面側なのか、DBの処理を主に扱うのか、
または他サーバサイドの技術に近いのかで、持つべき知識は複雑に絡み合ってきます。

大丈夫です。今あげたところを一通り独学で触ってきた私も、
実務になれば、全然わかりません。お手上げです。(大丈夫じゃないだろw)


とにかく、勉強もいいけど練習も必須ということで、
簡単なWebアプリケーションも作っていきましょう。

おいおい、JavaEEの前に・・・シリーズ途中だろ!とお思いのあなた。
大丈夫です。技術的には、そこまでぶっ飛んできません。
今まで覚えた知識に、TOMCATとサーブレットをちょこっと絡める程度から始めます。
複雑になってきたら、戻りましょう!!

では、前置きが長くなったので、また次回に続きましょう。

久々のセミナー参加 Google Cloud PlatformでJavaコーディング

はじめて渋谷のヒカリエのオフィスフロアに侵入しまして、セミナーに参加してきました。
Google Cloud PlatformのGoogle Apps Engineを使ってWebアプリケーションを
ライブコーディングするといった内容でした。

参加者の皆さんはベテランのプログラマーでしたので、
ライブコーディングで打たれるJavaに抵抗はなかったかもしれませんが、
私にはレベルが少し高かった。

ローカル環境と実装のサーバ環境とほぼ差異なくテストしながら実装できる
というのが売りなようで、1時間ちょっとで、Todoリストの様なウェブアプリケーションを完成させました。

AWSと、Google Cloud Platformの比較などのようなお話もいただき、
AWSだけでも手いっぱいの自分は、いろんなクラウド環境に目を向けるのも大事だなと思いました。

正直、Google Apps Engineの内容は殆どついていけませんでしたが、
ライブコーディングがJavaだったので、サーブレットのコーディングや、Junitなどでクラスを
立ち上げながらJUnitで随時テストをしながらコーディングしていくさまは美しく、
あぁ、こういう風にコードを書けたらなんて素晴らしいのだろう。
といった、皆様とは違った価値観をこの時間に見出すことができました。

懇親会の内容

1時間ほど懇親会に参加し、数名と名刺交換をしてきました。
経営者や10年以上のJavaの開発経験のある方とお話することができ、
大変勉強になりました。短い時間でしたが、以下の事を話してきました。

・インフラエンジニアの需要

やはり、不足していると。そして育てるのが困難と言う事。
インフラも構築レベルであればできるいるが、設計ができる人間が特に不足している

・インフラエンジニアは、プログラマーにシフト可能か

上記でふれたとおり、インフラエンジニアは不足しており、開発でのダブルスキルであれば、
インフラに引っ張られてしまっても仕方ないとの検討。

他の方とお話しした時は、独学でプログラマーに転身するなら、自分でプロジェクトを作って
提出するくらいの勢いがないと難しいとのこと。
Javaではなく、今の時代であればChefやfluentd、RedmineなどがRubyで書かれていることから
構築時点でプログラムをガシガシ書き、Rubyできるよ!というアピールをする。
プログラムも出来てインフラもできる!という証明を示すのにはRubyを学習するのもいいかもしれないとのことでした。

まとめ

やはり、自分の知識や経験は浅い。浅すぎる。ずっとこれをやってきたという人は、その分野が深いのはもちろん。
それに付随する周囲の環境の知識もしっかりある。自分の知識は広いから、深いものがなくていいなんて話はない。
やはり、一本勝負できる武器を一本ないし、2,3本持っていないとこのIT時代を活躍することはできないと感じました。

なんか、ひさびさに中身のある記事を書いた気がするなw

JavaEEの前に復習をしてみる その11 クラスを分けてみる。

やっと、来ました。クラス分け。
今まで、単一のクラスで全部処理していましたが、
処理を分割したいと思います。

勇者を表すクラスと、アクションを担当するクラスを作ります。

まず、勇者のクラス

package test;

public class Yuusha {
public static void main (String [] args) {
String name = "勇者";
int attackPower = 5;
int damage = ActionLogic. attack(attackPower);

System. out .println("勇者は○○に" +damage +"のダメージを与えた" );
}
}


そして、アクションのクラス

package test;

public class ActionLogic {

public static int attack( int point){
return point*2;

}
}

結果は、
勇者はゴブリンに10のダメージを与えた。

処理の流れとしては、
攻撃力が5の勇者さん。敵にどれくらいのダメージを与えるか計算するクラスを
「ActionLogic」としました。そして、そのメソッドに「attack」を作って、

int damage = ActionLogic. attack(attackPower);

damageは、ActionLogicのattackというメソッドに、attackPowerの値を渡してね。

public static int attack( int point){
return point*2;

attackPowerの値を、pointという変数で受け取って、2倍した値を返します。

そして、返された値の 10 が damageに入ります。

そして、出力される結果は、「勇者はゴブリンに10のダメージを与えた。」となるわけです。


カプセル化とかが出てくると、こんなコードは書けない(セキュリティ上)のですが、
まずは、他のクラスを動かして値を取得できるといった動きの確認でした。

JavaEEの前に復習をしてみる その10 オーバーロード

オーバーロードと聞くと、オーバーワークを思い浮かべてしまいます。
そんなのは、私だけ。。。
昨日、メソッドを実行する際に、値を直接もたせて処理させる。
なんてことをさせましたが、Javaにはオーバーロードという考え方がありまして、
もたせる値の型が違えば、同一の名前のメソッドを複数立てても構わないというルールがありました。

え?どういうこと?

薬剤師というクラスがあって、compaundというメソッドを3つ作ります。
通常、同じ名前のメソッドが3つあると、 compaund(); と実行させても、

おい、どのcompaundだよ!どれでもいいのか?いや、そんなことはできない!!
とエラーを返されます。

ですが、下記のプログラムのように、メソッドが持つ引数の中身が違えば、
同じ名前でも、一致する引数のものを動かせばいいと判断できるので、同一でも可能なのです。


package test;

public class Pharmacist {

public static void main (String [] args){
compound( "薬草");
compound( "薬草",3);
compound( "薬草", "毒消草" );
}

public static void compound(String item1){
System. out .println(item1+"を手に取って眺めた" );
}

public static void compound(String item1, int num1){
System. out .println(item1+"を" +num1+"個重ねてすり潰した" );
}
public static void compound(String item1,String item2){
System. out .println(item1+"と" +item2+"を調合して、新たなアイテムを作った" );

}

}



結果

薬草を手に取って眺めた
薬草を3個重ねてすり潰した
薬草と毒消草を調合して、新たなアイテムを作った


これを応用すると、同じメソッドへの命令でも、もたされた値によって動きを変えるということができるようになります。
薬剤師さんも、持っているアイテムや数量によって、処理する結果を変えることができるんですね。

オーバーロードとか、オーバーライドとか、このあたりから、じゃんじゃん出てきますね。
まだまだ入門の入門という感じです。

JavaEEの前に復習をしてみる その9 メソッドを分けてみる。

JavaEEの前に復習をしてみる その6で、Shadeがスイッチ文で行動を分岐しました。
それを一つのメソッドの中に処理を全部書くと、とても見づらいですし、
1つの処理を直すために、全部の処理を書き直す。なんてことになります。
なので、まず、メソッドを分けることについて考えます。

今までだと、1つのクラスの中に、1つのメソッドでしたが、
1つのクラスに4つのメソッドを入れてみます。

mainメソッドと、attackメソッドと、defenceメソッドと、recoveryメソッドです。

package test;

public class Renshu3{
String job = "勇者" ;
static String name = "Shade" ;
static int hitpoint = 10;
static int maxHitpoint = 20;
int at = 5;
static int df = 5;

public static void main (String [] args){
System. out .println( "1.攻撃 / 2.防御 /3.回復" );
int select = new java.util.Scanner(System. in ).nextInt();
switch (select){
case 1:attack( "ゴブリン" );
break ;
case 2:defence();
break ;
case 3:recovery();
default :System.out .println ("なにもしなかった。" );
}
}

public static void attack(String enemyName){
System. out .println(enemyName+ "に攻撃!" );
}

public static void defence(){
System. out .println( name +"は身を守っている。" );
df = df * 2;
}

public static void recovery(){
System. out .println( name +"は、けがの治療に専念した。" );
hitpoint = maxHitpoint ;
}


}



その6ではケースごとに、コンソールへ結果を出力していましたが。
ケースごとに、メソッドを呼び出すことによって、そのメソッドの内部のコードを処理させています。
それぞれ役割が別れているため、コードも見やすいですし、対象メソッドの中身だけ修正すれば、
mainメソッドの中身は変える必要がないのです。

また、
case 1:attack( "ゴブリン" );
メソッドを実行させる際に、値を持たせることができます。

public static void attack(String enemyName){
System. out .println(enemyName+ "に攻撃!" );

メソッド側で、その値を受け取って処理を継続させることもできます。

結果は、下記のように。

1.攻撃 / 2.防御 /3.回復
1
ゴブリンに攻撃!


ここまでの知識で、ある程度のプログラムは組めるような気がしてきますが、
このプログラムはJavaらしさ0です。上司にこのプログラムを見せて、プラグラミングやらせてください!
とか言ったら、お前はインフラにずっといるがよい。フハハハハ!!という魔王並みの発言をされますね。(※ そんな上司はいません)
正直、オブジェクト指向は、あまり得意ではありません。復習と同時に得意にならねばならないな・・・。
<< 前へ     >>次へ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。