プログラムの気持ちを理解したいから逆ポーランド表記法

勉強のきっかけになった問題

式A+B×Cの逆ポーランド表記法による表現として,適切なものはどれか。
ア. +×CBA イ.×+ABC ウ. ABC×+ エ.CBA+×
平成23年秋期問1 逆ポーランド表記法|情報処理安全確保支援士.com

f:id:ponsuke_tarou:20180219230542j:plain

逆ポーランド表記法とは、コンピュータが理解しやすい記述方法です。

  • 別名 : Reverse Polish Notation / 後置記法
  • 数式やプログラムを記述する方法の一種。
  • コンピュータで処理するのに都合のいい形の、数式の書き方。

ポーランド記法をコンピュータでの利用に適した形に改変したものである。
逆ポーランド記法 - Wikipedia

コンピュータのプログラミングにおいて、算術式を表記する手法の一つである。
www.weblio.jp

コンピュータで数式を計算する時、逆ポーランド法が都合が良い方法ため利用します
数式を逆ポーランド法に変換するための事柄

演算子を被演算子の後に記述します。

・カッコが不要
・左から順に処理していけば計算結果が得られる
www.zealseeds.com

問題を逆ポーランド表記法で書くと「ABC×+」です。

演算子を被演算子後に記述するので
A + B × C = A + (B × C) = A + BC× = ABC×+

小学校で習いましたが「+-」より「×÷」を先に計算します。

A + B × C = AB+ × C = ABC+×は間違いです。
f:id:ponsuke_tarou:20180219230633j:plain

「逆」じゃないポーランド表記法とは、演算子を数値の前に置く記法です。

  • 別名 : Polish notation / 前置記法

ポーランド記法とは、数式表現の表記法の一つで、演算子を数値の前に置く記法のことである。考案者がポーランド人の論理学者であったことからこのように呼ばれる。
www.weblio.jp

問題をポーランド表記法で書くと「+A×BC」です。

演算子を被演算子前に記述するので
A + B × C = A + (B × C) = A + ×BC = +A×BC

人がよく使うのは、中置記法です。

問題をポーランド表記法で書くと「A+(B×C)」です。

A + B × C = A + (B × C)

参考サイト

qiita.com
smdn.jp
f:id:ponsuke_tarou:20180219230726j:plain

MacにHomebrewでPostgreSQLをインストールしてデータベースを作る

環境
OS : macOS Hight Sierra v10.13.2
Homebrew : 1.5.2

HomebrewでPostgreSQLをインストールして起動する

Homebrewを最新化してインストールする準備をする

# 異常がないか確認する
$ brew doctor
Your system is ready to brew.

# アップデートする
$ brew update
Updated 5 taps (homebrew/science, homebrew/core, homebrew/php, homebrew/versions, caskroom/cask).
==> New Formulae
amber                                    kallisto
<省略>

# バージョンを確認する
$ brew -v
Homebrew 1.5.2
Homebrew/homebrew-core (git revision 5c4df; last commit 2018-01-25)

HomebrewでPostgreSQLをインストールする

# どんなバージョンがあるか確認する
$ brew search postgresql
==> Searching local taps...
postgresql          postgresql@9.4      postgresql@9.5      postgresql@9.6
==> Searching taps on GitHub...
caskroom/cask/navicat-for-postgresql     caskroom/cask/photo-supreme-postgresql
==> Searching blacklisted, migrated and deleted formulae...

# 今回はv9.6をインストールする
$ brew install postgresql@9.6
<省略>
==> Caveats
If builds of PostgreSQL 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
  https://github.com/Homebrew/legacy-homebrew/issues/2510

To migrate existing data from a previous major version (pre-9.0) of PostgreSQL, see:
  https://www.postgresql.org/docs/9.6/static/upgrading.html

To migrate existing data from a previous minor version (9.0-9.5) of PostgreSQL, see:
  https://www.postgresql.org/docs/9.6/static/pgupgrade.html

  You will need your previous PostgreSQL installation from brew to perform `pg_upgrade`.
    Do not run `brew cleanup postgresql@9.6` until you have performed the migration.

This formula is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/postgresql@9.6/bin:$PATH"' >> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/postgresql@9.6/lib
    CPPFLAGS: -I/usr/local/opt/postgresql@9.6/include


To have launchd start postgresql@9.6 now and restart at login:
  brew services start postgresql@9.6
Or, if you don't want/need a background service you can just run:
  pg_ctl -D /usr/local/var/postgresql@9.6 start
==> Summary
🍺  /usr/local/Cellar/postgresql@9.6/9.6.6: 3,273 files, 36.8MB

環境変数を設定する

# PATHを設定する
$ echo 'export PATH="/usr/local/opt/postgresql@9.6/bin:$PATH"' >> ~/.bash_profile
$ source .bash_profile
$ printenv PATH
/usr/local/bin:/Users/mana/.phpenv/shims:/Users/mana/.phpenv/bin:/usr/local/bin:/Users/mana/.phpenv/shims:/Users/mana/.phpenv/bin:/usr/local/opt/postgresql@9.6/bin:/usr/local/Cellar/ant/1.10.0/libexec/bin:/usr/local/bin:/usr/local/sbin:/Users/mana/.nodebrew/current/bin:/Users/mana/bin/Sencha/Cmd/6.0.2.14/..:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

# デフォルトのデータディレクトリの場所を設定する
$ echo 'export PGDATA="/usr/local/var/postgres"' >> ~/.bash_profile
$ source .bash_profile
$ printenv PGDATA
/usr/local/var/postgres

PostgreSQLのデータベースクラスタを作成する

$ pg_ctl initdb -o "-E utf8 -U postgres"
The files belonging to this database system will be owned by user "mana".
This user must also own the server process.

The database cluster will be initialized with locale "ja_JP.UTF-8".
initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.

creating directory /usr/local/var/postgres ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /usr/local/Cellar/postgresql@9.6/9.6.6/bin/pg_ctl -D /usr/local/var/postgres -l logfile start

概要
pg_ctl init[db] [-s] [-D datadir] [-o initdb-options]
説明
initまたはinitdbモードはPostgreSQLの新しいデータベースクラスタを作成します。 データベースクラスタとは、単一のサーバインスタンスで管理されるデータベースの集合です。 このモードはinitdbコマンドを呼び出します。 詳しくはinitdbを参照して下さい。
オプション
-D datadir
データベース設定ファイルのファイルシステム上の場所を指定します。 これが省略された場合、環境変数PGDATAが使われます。
-o initdb-options
initdbコマンドに直接渡すオプションを指定します。
このオプションは、確実にひとまとめとして渡すために、通常は単一引用符または二重引用符で囲まなければなりません。
pg_ctl

initdb — PostgreSQLのデータベースクラスタを新しく作成する
概要
initdb [option...] [ --pgdata | -D ] directory
オプション
-E encoding
テンプレートデータベースの符号化方式を選択します。
-U username
データベースのスーパーユーザのユーザ名を選択します。 initdbを実行している実効ユーザの名前がデフォルトです。 スーパーユーザの名前はあまり重要ではありませんが、慣習的に使われているpostgresを(オペレーティングシステムのユーザ名と異なっていても)使っても良いでしょう。
initdb

PostgreSQLサーバを起動してみてみる

$ pg_ctl status
pg_ctl: no server running

# 起動する
$ pg_ctl -D /usr/local/var/postgres -l logfile start
server starting

$ pg_ctl status
pg_ctl: server is running (PID: 68826)
/usr/local/Cellar/postgresql@9.6/9.6.6/bin/postgres "-D" "/usr/local/var/postgres"

# バージョンをみてみる
$ psql -V
psql (PostgreSQL) 9.6.6

# データベース一覧をみてみる
$ psql -l -U postgres
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)

# ユーザ一覧をみてみる
$ psql -c 'select * from pg_user' -U postgres
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig 
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 postgres |       10 | t           | t        | t       | t            | ******** |          | 
(1 row)

# ロール一覧をみてみる
$ psql -c 'select * from pg_roles' -U postgres
      rolname      | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid  
-------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+------
 postgres          | t        | t          | t             | t           | t           | t              |           -1 | ********    |               | t            |           |   10
 pg_signal_backend | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           | 4200
(2 rows)

psqlPostgreSQLの対話的ターミナル
概要
psql [option...] [dbname [username]]
オプション
-c command
psqlに対し、指定のコマンド文字列commandを実行するよう指示します。 このオプションは繰り返すことができ、また-fオプションと任意の順序で組み合わせることができます。 -cまたは-fが指定されると、psqlは標準入力からコマンドを読み取りません。 その代わりに、すべての-cオプションおよび-fオプションを順に処理した後、終了します。
-l
利用可能な全てのデータベースを一覧表示し、終了します。 この他の接続に関連しないオプションは無視されます。
-U username
デフォルトのユーザではなくusernameユーザとしてデータベースに接続します (当然、そうする権限を持っていなければなりません)。
-V
psqlのバージョンを表示し、終了します。
psql

pg_user
pg_userビューはデータベースユーザに関する情報へのアクセスを提供します。 これはパスワードフィールドを隠蔽したpg_shadowを公に読めるようにしたビューです。
50.81. pg_user

pg_roles
pg_rolesビューはデータベースのロールに関する情報を提供します。 これは単に一般に公開されているpg_authidのビューですが、パスワード列が空白になっています。
50.72. pg_roles

データベースを作ってつなげる

PostgreSQLのユーザを作成する

$ createuser -d -e -P mana -U postgres
Enter password for new role: 
Enter it again: 
CREATE ROLE mana PASSWORD 'md5a6747d5690695f2d69c556af98aca23b' NOSUPERUSER CREATEDB NOCREATEROLE INHERIT LOGIN;

# ユーザ一覧で確認する
$ psql -c 'select * from pg_user' -U postgres
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig 
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 postgres |       10 | t           | t        | t       | t            | ******** |          | 
 mana     |    16384 | t           | f        | f       | f            | ******** |          | 
(2 rows)

# ロール一覧で確認する
$ psql -c 'select * from pg_roles' -U postgres
      rolname      | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig |  oid  
-------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
 postgres          | t        | t          | t             | t           | t           | t              |           -1 | ********    |               | t            |           |    10
 pg_signal_backend | f        | t          | f             | f           | f           | f              |           -1 | ********    |               | f            |           |  4200
 mana              | f        | t          | f             | t           | t           | f              |           -1 | ********    |               | f            |           | 16384
(3 rows)

createuser — 新しいPostgreSQLのユーザアカウントを定義する
概要
createuser [connection-option...] [option...] [username]
オプション
username
作成するPostgreSQLユーザの名前を指定します。
-d
新しいユーザに対してデータベースの作成を許可します。
-D
新しいユーザに対してデータベースの作成を禁止します。 これはデフォルトです。
-e
createuserが生成しサーバに送信するコマンドを出力します。
-U username
接続に使用するユーザ名です(作成するユーザの名前ではありません)。
-P
このオプションが指定されると、createuserは新しいユーザのパスワードのプロンプトを表示します。 もしパスワード認証を使う予定がなければ、これは必要ありません。createuser

データベースを作成する

$ createdb -e -O mana first-db "はじめてのPsgreSQLのDB" -U postgres
CREATE DATABASE "first-db" OWNER mana;
COMMENT ON DATABASE "first-db" IS 'はじめてのPsgreSQLのDB';

# データベース一覧で確認する
$ psql -l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 first-db  | mana     | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

createdb — 新しいPostgreSQLデータベースを作成する
概要
createdb [connection-option...] [option...] [dbname [description]]
オプション
dbname
作成するデータベースの名前を指定します。 この名前はクラスタ内の全てのPostgreSQLデータベースの中で一意でなければなりません。 デフォルトでは、現在のシステムユーザと同じ名前でデータベースを作成します。
description
新しく作成されるデータベースに関連付けるコメントを指定します。
-e
createdbが生成し、サーバに送信するコマンドをエコー表示します。
-O owner
新しいデータベースの所有者となるデータベースユーザを指定します。 (この名前は二重引用符で囲まれた識別子として処理され
createdb

データベースに繋いでみる

$ psql -U mana -d first-db
psql (9.6.6)
Type "help" for help.

# データベース一覧をみてみる
first-db=> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 first-db  | mana     | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

# ロール一覧をみてみる
first-db=> \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 mana      | Create DB                                                  | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

# テーブル一覧をみてみる(まだ何もない)
first-db=> \d
No relations found.

# 終了してみる
first-db=> \q

psqlPostgreSQLの対話的ターミナル
概要
psql [option...] [dbname [username]]
オプション
-d dbname
接続するデータベースの名前を指定します。 コマンドラインでオプション以外の最初の引数としてdbnameを指定するのと同じ効力を持ちます。
-U username
デフォルトのユーザではなくusernameユーザとしてデータベースに接続します (当然、そうする権限を持っていなければなりません)。
psql

思い出の一枚

f:id:ponsuke_tarou:20180131231929j:plain

EclipseでMavenプロジェクトを作成する

環境
OS : macOS Serria
Eclipse : Luna Service Release 2 (4.4.2)
Maven : 3.2.5

EclipseMavenプロジェクトを作成する

HomebrewでMaveをインストールする

# 1. インストール可能な Maven を確認する
$ brew search maven
# 2. インストール
$ brew install homebrew/versions/maven32
# 3.バージョン確認
$ mvn --version

Eclipseプラグインを設定する

  1. m2eをインストールする
    • [Help] > [Eclipse Marketplace...] > 「 m2e」を検索してインストール+ Mavenに設定する
    1. [Preferences] > [Maven] > [Installentions] > [Add] で [New Maven Runtime ] ダイアログを開く
    2. Installentions home : 1.の「$ mvn — version」で表示された「Maven home」のパスを設定する
    3. Installentions name : 手頃に分かる名前を設定する

Maven Project を作る

  1. [ Package Explorer] > [New] > [Project] > [Maven Project] > [Next
  2. [ Use default Workspace location ] にチェクを入れる > [Next]
  3. [ Artifact Id] が 「 maven-archetype- webapp」を選択 > [Next]
  4. 下記を入力して[Finish]
    • GroupId : プロジェクトのルートパッケージ名
    • ArtifactId : プロジェクト名
    • Version : プロジェクトのバージョン ( 今回はデフォルトのまんま)
  5. 完成

聞いたことはあるけどよく知らないMyBatisにちょっと近づいてみる

http://www.mybatis.org/images/mybatis-logo.png

MyBatisは、O/Rマッパーです。

O/Rマッパーっていうのはオブジェクト指向のプログラムとリレーショナルデータベースをつなげてくれます。

O/RマッパーはObject/Relationalマッパーの略で、オブジェクト指向のプログラムと、RDBをライブラリで橋渡ししようという考え方です。
cfm-art.sakura.ne.jp

https://thinkit.co.jp/images/article/0606/13/1/2.gif
thinkit.co.jp

ということでMyBatisは、リレーショナルデータベースとJavaプログラムを手軽につなげてくれるフレームワークです。

MyBatis はカスタム SQL、ストアドプロシージャ、高度なマッピング処理に対応した優れた永続化フレームワークです。 MyBatisを使うことで、直接 JDBC を扱うコードを書いたり、クエリ引数やクエリ結果を手動で設定する必要がほとんどなくなります。 MyBatis の設定やデータベースレコードと Java オブジェクトの関連付けは、XML またはアノテーションを使って行うことができます。
MyBatis – MyBatis 3 | イントロダクション

JDBCは、リレーショナルデータベースにアクセスするための標準Java APIです。

Java Database Connectivityの省略という噂はありますがホントの名称はわからないっぽいです。
JDBCを使って「データベースへの接続」「SQLの実行」「データベースからの結果取得」ができます。

http://image.itmedia.co.jp/ait/articles/0106/26/r5fig1.gif
http://image.itmedia.co.jp/ait/articles/0106/26/r5fig3.gif
JDBCとは何か?:Javaデータアクセスの基礎(1) - @IT

http://www.atmarkit.co.jp/fjava/javafaq/jdbc/jdbc1.gif
Java Solution FAQ:JDBCとは何でしょうか?

このJDBCを直接使うよりもMyBatisをJDBCの手前に置いて使うほうがカンタンにデータベースとプログラムをつなげることができます。

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatis3Scope.png
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation

設定やSQLXMLに書けばMyBatisが頑張ってくれます。

XML 形式の設定ファイルを使って SqlSessionFactory を生成する
XML 形式の設定ファイルには、MyBatis システムの基本設定が含まれます。 例えば、データベースから Connection のインスタンスを取得する DataSource や、トランザクションの制御方法を決定する TransactionManager などです。
XML 形式の設定ファイルの詳細については後ほど改めて説明しますが、ここでは簡単なサンプルを挙げておきます。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

Mapped SQL Statements について
以下は、先ほどの例で SqlSession のメソッドを呼び出したときに実行されることを想定した XML ベースの Mapped Statement です。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

BloggerMapper のような Mapper クラスなら、実は XML を使う必要はありません。 代わりに、Java アノテーションを使って下記のように Mapped Statement を記述することができます。

public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

MyBatis – MyBatis 3 | スタートガイド

https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatis3RelationshipOfComponents.png
https://terasolunaorg.github.io/guideline/5.1.0.RELEASE/ja/_images/DataAccessMyBatisSpringRelationshipOfComponents.png
5.2. データベースアクセス(MyBatis3編) — TERASOLUNA Server Framework for Java (5.x) Development Guideline 5.1.0.RELEASE documentation

クライアントサーバの3階層システムの基本

3階層システムとは

別名 : 3層システム / 3層クライアントサーバシステム / 3階層アーキテクチャ / 3-tier system

クライアントサーバシステムを

  1. プレゼンテーション層(ユーザインターフェース部分)
  2. アプリケーション層(ビジネスロジック部分)
  3. データ・アクセス層(データベース部分)

の3層に分割して構築したシステム。
クライアントおよびサーバの処理を複数の階層に分離して配置することで、ある階層へ変更を加える必要が生じた際にも柔軟に対応できるようなっている。
3階層システムでは、クライアント側にはユーザインターフェース部分のみを残し、あとはサーバ側に実装する。クライアントはユーザからの操作を受け付け、アプリケーション層からの処理結果を表示することのみを行う。
アプリケーション部分をクライアントから分離してサーバに実装することにより、ビジネスロジックが変更された場合でもサーバ側のアプリケーションを変更するだけでよく、変更がシステム全体に及ぶことは無い。また、大量のデータを扱うシステムでは、ネットワークを通じてクライアントとサーバの間で大量のデータのやり取りをする必要が無くなる。
f:id:ponsuke_tarou:20180203092127p:plain

各層の役割

プレゼンテーション層(ユーザインターフェース層 / UI層)

  • ユーザーに情報を表示したり、ユーザーからの入力を受け付けたりする機能を担当するレイヤ
  • 細かな変更や拡張が発生しやすい
  • 使い勝手を向上させるためのインターフェイスの改善
  • 新デバイス対応など(PDAや携帯電話対応など)

などなど
プログラムは、ユーザー・インターフェイスの実装なので、ほかの層に比較すれば、実装やテストにかかるコストはそれほど大きくない


アプリケーション層(ビジネス・ロジック層 / ファンクション層)

  • アプリケーションの実際の情報処理を担当するレイヤ
  • 業務フローや各種データ処理など、ビジネスで必要な情報処理をソフトウェアとして実装するレイヤ
  • 本質的な部分は比較的長期にわたって変わりにくい
    • ビジネスの処理そのものをプログラムとして表現したもの
  • ユーザー認証やトランザクション処理など、プログラム実装やテストには多大な工数が必要になることが多い

データ層

  • データベース・システムへのアクセス・保存機能を組み込むレイヤ
  • データベースの構造を変更することはそれほどない
    • 本質的なデータ構造自体は何十年も変わらず使い続けられるというケースも少なくない
    • ただ・・・
      • あらかじめ業務分析をきちんと実施してデータ構造を決定しておく必要はある
      • アクセス効率や可用性、セキュリティ性能向上など、運用面からデータベース構造の見直しが発生することはある
  • 利用するデータベース・システム(例えばSQL Serverか、Oracleかなど)によって内容が大きく影響を受ける
    • 逆に考えると・・・
      • データ層を独立させることで、データベース・システムの違いから、ビジネス・ロジック層を分離できるというメリットがある

3層構造はMVCと一緒のものでしょうか?

層構造をお勉強していて思った、「MVCモデルと似てない?」「一緒?」

  • プレゼンテーション層 - View
  • アプリケーション層 - Controll
  • データ層 - Model

な感じ?
「3層構造」「MVC」なんかでググるとすぐにわかります。それは間違いです。

違い : 3層構造は直線でつながる

MVCは三角でつながる -> プレゼンテーション層とデータ層はつながらないが、ViewとModelはつながる

違い : 表しているものが違う

という訳で違う、その違うものを対応させようとしたのがおかしいという結果です。

思い出の一枚

f:id:ponsuke_tarou:20180203092344j:plain

NetBeansにGlassFishを設定する方法

NetBeansをインストールしたのでGlassFishを設定します。
ponsuke-tarou.hatenablog.com

GlassFishをインストールします

qiita.com

NetBeansGlassFishを設定します

  1. f:id:ponsuke_tarou:20171115224411p:plain
  2. f:id:ponsuke_tarou:20171120223311p:plain
  3. GlassFishをインストールした場所を指定します。
  4. f:id:ponsuke_tarou:20171115224605p:plain
  5. f:id:ponsuke_tarou:20171115224642p:plain

GlassFishが設定できました。

f:id:ponsuke_tarou:20171115224728p:plain

GlassFishを起動してみます。

  1. [Service]タブ > [Server] > [GlassFish(追加した時に設定したName)] > [Start]f:id:ponsuke_tarou:20171120223411p:plain
  2. 動きました。
  3. f:id:ponsuke_tarou:20171120223514p:plain

MacにNetBeansをインストールする方法

dmgをダウンロードします

  1. NetBeansのサイトをブラウザで表示します。
  2. 言語とOSを選択します。f:id:ponsuke_tarou:20171115222238p:plain
  3. .dmgをダウンロードします。
  4. f:id:ponsuke_tarou:20171115221646p:plain

NetBeansをインストールします

  1. NetBeans8.2.pkgを押下します。
  2. f:id:ponsuke_tarou:20171115221754p:plain
  3. [Continue]ボタンを押下して進みます。
  4. f:id:ponsuke_tarou:20171115221835p:plain
  5. f:id:ponsuke_tarou:20171115221840p:plainf:id:ponsuke_tarou:20171115221854p:plain
  6. ライセンスの説明を読んで[Agree]を押下します。
  7. f:id:ponsuke_tarou:20171115221936p:plain
  8. [Install]を押下します。
  9. f:id:ponsuke_tarou:20171115222210p:plain
  10. f:id:ponsuke_tarou:20171115222230p:plain
  11. 使い終わったものはゴミ箱へ。f:id:ponsuke_tarou:20171115222435p:plain

NetBeansを起動します

  1. f:id:ponsuke_tarou:20171115222636p:plain
  2. f:id:ponsuke_tarou:20171115222720p:plain

次はNetBeansGlassFishを設定します

ponsuke-tarou.hatenablog.com