javadb Derby インストール
javaDB⇒「Derby」のインストール手順
1.アパッチのサイトにアクセスして derbyをダウンロードします。
Apache Derby Downloadページ
2.JAVA_HOMEを設定して、パスを通す
※Windowsの場合は"$VAL"を"%VAL%"に読み替えてください
・~/.bash_profileに JAVA_HOME=jdkへのパス と記載する
・同様にPATH = $JAVA_HOME/bin:$PATH と記載する
3.ダウンロードしたderby-binに環境変数を設定:derbyは使用しやすい場所に配置
※JDKの中に入っているのでそちらでも良い(JAVA_HOME/db/lib/derby.jar)
>sudo vi(vim) ~/.bash_profile
DERBY_HOME = ダウンロードしたderbyのフォルダへのパス/bin
CLASSPATH=$SERBY_INSTALL/lib/derby.jar:$DERBY_INSTALL/lib/derby-tools.jar
>source ~/.bash_profile →これでPATHを反映する
3.DERBYをインストールした場所に移動してセットアップバッチ(シェル)を叩く
>cd $DERBY_INSTALL /bin
>. setEmbeddedCP
4.インストール確認にDerby情報を出力する
>java org.apache.derby.tools.sysinfo
以上で、セットアップ完了です。
C++ PostgreSQL library インストール
参考にしたページは以下になります
このページよりダウンロードしたいファイルを選ぶ
以下のコマンドでインストールする
wget http://pqxx.org/download/software/libpqxx/libpqxx-4.0.tar.gz tar xvfz libpqxx-4.0.tar.gz cd libpqxx-4.0 ./configure make make install
「libpqxx-」の後ろにバージョンが示されています
wget http://pqxx.org/download/software/libpqxx/libpqxx-2.5.5.tar.gz
一番上のファイルをダウンロードするコマンドになります。
例えばターミナルを開いて、カレントディレクトリ→「pwd」コマンドで表示されます
ターミナルで現在開いているディレクトリ=カレントディレクトリになります。
引き続き「tarコマンド」x, v, f, zと4つのオプションをつけて実行します。(実行結果)
tarファイルを解凍するコマンドになります。
カレントディレクトリに解凍されます。
mac wgetコマンド インストール方法
はじめに、「brewコマンド」がMacにインストールされていませんでした。
その代わり、「rubyコマンド」はインストールされていましたので
「ruby -help」とターミナルにコマンドを入力してやるとインストールされていれば下記の様に画面に出力されます。
rubyコマンドが使用できるのであれば、以下の様にコマンドを入力(コピペ可能)
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
実行結果
※上記の部分で「Enter」キー以外を押下すると処理が止まります。
上の様な表示が出力されていればインストール成功
では目的の「wget」をインストールします。
brew install wget
仕事と勉強
社会人になると勉強する時間がなかなか取れませんのでひと工夫必要になります
<アプローチの工夫>
ボトムアップでなくアップダウンでやる
目的の作業を行う為に必要な知識を学ぶ
今回の汎用画面APであればリソース管理、DBアクセス、UMLが対象になる
<普段の工夫>
生活のリズムを作る
1.家を出る⇒電車内で勉強
2.退社⇒電車
3.筋トレ⇒夕食
4.風呂上がり⇒ビール片手に本を読む
5.日記⇒就寝
<ポイント>
毎日必ず、5〜10分で良いのでやる
週に一度は休む
<動機の工夫>
やる事で小遣い稼ぎになる
⇒イベントを企画、フリマ向けの商品作り、アフィリエイト(やった事を書き続ける)、副業のアイデアを練る...etc
javaとc++ のクラス実装比較
ここで、少し休憩がてらに作成した
javaのHumanクラスとc++ のHumanクラスを比較して見たいと思います。
<java>
Javaではコンストラクタ、フィールドメソッドと定義して実行
特に、メモリとかオブジェクトのインスタンスを気にしないで作れます
<c++ >
値の返却方法、ポインタなどインスタンスからオブジェクトの振る舞いなどを考慮に入れて作成しました。
Javaではoperator演算子のオーバーライドができません。
そして、名前空間の定義方法も違います
javaの場合はパッケージとディレクトリ構成が同じにならないとエラーになる
c++ の場合は別になっている
結論的に、c++ の方が複雑⇒自由度が高い javaは細かいところは気にせず実装出来る…
そんな印象を受けました。
フレームワークなどはオープンソースでたくさん手に入るJavaに軍配が上がりました。
JavaでもC++の様にリソース(インスタンス、オブジェクトなど)を考慮に入れた実装を心がけないといけないなぁ...と反省しました。
次回からはQtを使用して「汎用画面AP」の実装に着手したいと思います。
operator演算子2 "+="の実装
前回学んだ「operator演算子」には「++, --」以外にも「=, !=, +, -, <, >」など使用可能
ただし倫理演算子(&&, || など倫理演算を行う)は使用しない方が良いらしい原因は
「組み込み倫理演算子とクラス型の倫理演算子は一致させることができない」から...
と参考にしている本に書いてありました。
時間の都合で、「フレンド関数」まで届かなかったのでoperator演算子2をやります
<実装>
human += 10と処理を記述可能になる
<Mainクラス>
ヘッダーファイルには
Human& Human::operator +=(int year);
の様に定義しいる、あくまで「参照を返却する」のでその様に実装してやらないと
ハマる、コンパイルエラーが残っていたりして時間がかかってしまった。
本当は、フレンド関数まで記載したかったが届かなかった。。。
次は、休憩してJavaとC++で作成したHumanクラスの比較を行います。
operator演算子の使い方
前回の「C++による、コンストラクタの種類」に引き続き、
オペレーター演算子の使い方を学びます。
operator演算子は下記の様な実装を可能にする演算子です。
「++, --』を使用可能にする。下のは++を実装可能にした形です。
「Human human('z');」 ○「++human;」×「human++;」
あと起き演算子は未定義でエラー
後置きの演算子を定義
human++;のヘッダーファイル定義
同様にソースファイルへの定義
実行結果
前置き(after1)と後置き(after)の出力結果
<詰まったところ>
前置きと後置きの違いはインクリメント(演算)を行った後に「this」参照を返却するのと
演算後に「this」本体を返却するという違いがあった。ので式の内容も違う。
ここになかなか気づかなかった。。。
次回は、「フレンド関数 続operator演算子」について学習します。
C++による、コンストラクタの種類
前回のC++実装に引き続き、C++の勉強を続けます。
C++によるコンストラクタには以下の様な種類がありました。
・デフォルトコンストラクタ:Javaでのデフォルトコンストラクタと同義
・変換コンストラクタ:コンストラクタに引数を渡し初期値を設定します。
1. void クラス名::クラス名(引数...) (int num, char* ch)など...
2.変換コンストラクタ(前回のソースの引数ありの部分)
単一の引数nameを初期化する
呼び出し方は、 Human human('z') の様になります。
そして次の様にも呼び出せます。Human human = 'z';
※これは知りませんでした。。。
そして「operator」演算子!!変換関数と呼ばれるものがあります。
実際の処理では、ここで年齢をします「age」ではなく他の値でも良い
他のロジックを、アルゴリズムを作成する可能性を持っていると思います。
次回は、「operator演算子」について学ぼうと思います。
C++でのクラス作成方法
前回、色々とやってみたもののC++での実装ができなかったので勉強しました(笑)
まずはできたソースコード一式をみてください。
<ディレクトリ構成>
Java : 「prac.java = Mainクラス, prac.java.base =Humanクラス」
C++ : 「階層なし」だけど
名前空間は「prac::clang = Mainクラス ,prac::clang = Humanクラス」
フィールドが一つだけ
起動結果↓
Humanクラスのhello()を呼び出す
※Javaとの実装の違いが結構あります。フィールドの数が違う(Stringがcharに...)
名前空間の解決に至るまで時間がかかりました。。。
<わかったこと>
javaでの考え方に名前空間はありますが、パッケージングとディレクトリ構成がセットになっています。
なのでC++での実装はソースファイルが同じディレクトリにあるのに名前空間の設定が成立しています。
Javaの場合はeclipse上だと分かりづらいですが、パッケージと同じディレクトリ構成が出来上がっています。
なのでC++の実装もそんな風にディレクトリ構成を変えてみました。
prac::clang(/prac/clang/Cmain.cpp), prac::clang::Human.cpp
因みにC++ではヘッダファイル(*.h)とソースファイル(*.cpp)に分けて作成します。
<ヘッダーファイル>
<ソースファイル>
<作成物のクラス図>
<作成するのについまずいた所>
やった事「プロジェクト作成をして何もわからないうちにパッケージ切ったら...」
「symbol not found for architecture x86 64」エラーでつまづく
解決策→プロジェクトを始めから作り直した
原因と思しき...
1.プロジェクトに「src/」フォルダがなかった
2.名前空間の指定が不適切だった
3.ヘッダファイルで名前空間を指定する→ソースファイルにも名前空間を指定する
Javaではヘッダーファイルがないので「なんか似た様なこと書くのだるいんだけど..」
となりがちですが、設計性に秀でた実装方法だと思います。
「どこが?」と思う人もいるかもしれませんが
次回自分なりの実装になりますが検証してみようと思います。
は、引き続きC++の勉強を続けようと思います。
関連ページ
Eclipse セットアップ
- Java Install Eclipse〜開発ツールのインストール〜
- TensorFlow C++環境〜EclipseにCDTをインストール〜
- Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
- Eclipse Meven 開発手順〜プロジェクトの作成〜
- Java OpenCV 環境セットアップ(on Mac)
- Eclipse SceneBuilderを追加する
- JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~
C++でのHello World 〜EclipseでのC++実装その1〜
今回は、C++でのハローワールドを実装します。使用するIDEはEclipseです。EclipseにC++プラグインを突っ込みます。
Eclipseインストール
前回はUMLの作成をして各クラスの関連を示しました。
今度は、「DbアクセスInterface」から先のDBアクセスに関して
動的に処理を行いたいのでオブジェクト指向プログラミングの「ポリモーフィズム」を使用したい→筆者はC++でのプログラムが書けませんので勉強します。
ところで....
汎用画面APは、クロスプラットホームで起動する想定ですので(詳細は仕様を参照)
実装に使用するプログラム言語として「C++」と「Java」を候補にあげますが
自分自身がJavaの経験があるので「C++」を主軸にして話を進めようと思います。
まずは基本C++でのオブジェクト指向実装の方法を検証します。
基準は「Java」言語でのプログラムで各種フレームワークも参考にします。
初めは、やっぱりC++でもJavaでも「Hello World」でしょう(笑)
<Javaバージョン(Humanクラス使用)>
<C++バージョン(Humanクラス使用)>
名前空間の使い方がわからなかったため次回記載いたします。失敬(笑)