Takunojiのプログラミング・プレイグラウンド(遊び場)

Javaプログラミングを基本にして、ゲーム作成に必要なことの調査結果、やったら面白そうなことなどを記載します。プログラミングのススメ的なことも記載します。プログラミングで楽しく遊ぶために色々と記載して行きます。

C++でのクラス作成方法

前回、色々とやってみたもののC++での実装ができなかったので勉強しました(笑)
まずはできたソースコード一式をみてください。

<ディレクトリ構成>
Java : 「prac.java = Mainクラス, prac.java.base =Humanクラス」
C++  : 「階層なし」だけど
名前空間は「prac::clang = Mainクラス ,prac::clang = Humanクラス」

f:id:Takunoji:20170225201328p:plainすべてのファイルを同じディレクトリに配置(名前空間も指定)

f:id:Takunoji:20170225202141p:plainフィールドが一つだけ
起動結果↓

f:id:Takunoji:20170225202537p:plainHumanクラスのhello()を呼び出す
Javaとの実装の違いが結構あります。フィールドの数が違う(Stringがcharに...)
  名前空間の解決に至るまで時間がかかりました。。。

<わかったこと>
javaでの考え方に名前空間はありますが、パッケージングとディレクトリ構成がセットになっています。
なのでC++での実装はソースファイルが同じディレクトリにあるのに名前空間の設定が成立しています。
Javaの場合はeclipse上だと分かりづらいですが、パッケージと同じディレクトリ構成が出来上がっています。

なのでC++の実装もそんな風にディレクトリ構成を変えてみました。

f:id:Takunoji:20170225204305p:plainprac::clang(/prac/clang/Cmain.cpp), prac::clang::Human.cpp
因みにC++ではヘッダファイル(*.h)とソースファイル(*.cpp)に分けて作成します。
<ヘッダーファイル>

f:id:Takunoji:20170225204618p:plain
<ソースファイル>

f:id:Takunoji:20170225204706p:plain

<作成物のクラス図>

f:id:Takunoji:20170225215430p:plain

<作成するのについまずいた所>
やった事「プロジェクト作成をして何もわからないうちにパッケージ切ったら...」

symbol not found for architecture x86 64」エラーでつまづく

解決策→プロジェクトを始めから作り直した

原因と思しき...
 1.プロジェクトに「src/」フォルダがなかった
 2.名前空間の指定が不適切だった
 3.ヘッダファイルで名前空間を指定する→ソースファイルにも名前空間を指定する

Javaではヘッダーファイルがないので「なんか似た様なこと書くのだるいんだけど..」
となりがちですが、設計性に秀でた実装方法だと思います。
「どこが?」と思う人もいるかもしれませんが
次回自分なりの実装になりますが検証してみようと思います。

は、引き続きC++の勉強を続けようと思います。

takunoji.hatenablog.com

 

関連ページ

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseCDTをインストール〜
  3. Setup OpenGL with JavaJOGLを使う準備 for Eclipse
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)
  6. Eclipse SceneBuilderを追加する
  7. JavaFX SceneBuilder EclipseSceneBuilder連携~

 

C++でのHello World 〜EclipseでのC++実装その1〜

今回は、C++でのハローワールドを実装します。使用するIDEEclipseです。EclipseにC++プラグインを突っ込みます。

Eclipseインストール

Windows版のEclipseインストール方法> 

Eclipseのインストールとセットアップ

 

前回はUMLの作成をして各クラスの関連を示しました。
今度は、「DbアクセスInterface」から先のDBアクセスに関して
動的に処理を行いたいのでオブジェクト指向プログラミングの「ポリモーフィズム」を使用したい→筆者はC++でのプログラムが書けませんので勉強します

ところで....
汎用画面APは、クロスプラットホームで起動する想定ですので(詳細は仕様を参照)

実装に使用するプログラム言語として「C++」と「Java」を候補にあげますが
自分自身がJavaの経験があるので「C++」を主軸にして話を進めようと思います。

まずは基本C++でのオブジェクト指向実装の方法を検証します。
基準は「Java」言語でのプログラムで各種フレームワークも参考にします。

初めは、やっぱりC++でもJavaでもHello Worldでしょう(笑)

<Javaバージョン(Humanクラス使用)>

f:id:Takunoji:20170224213830p:plainf:id:Takunoji:20170224214211p:plain

f:id:Takunoji:20170224214232p:plain

<C++バージョン(Humanクラス使用)>

名前空間の使い方がわからなかったため次回記載いたします。失敬(笑)

C++でのクラス作成方法 - Takunojiの日記

 

UMLの書き方 クラス図の記述

前回は、UML Designerの使い方をやりました。
UMLは何種かの図を使用して表現するシステムデザイン図、設計図です。

ユースケース図」「クラス図」「シーケンス図」「コミュニケーション図」
「ステートマシン図」「アクティビティ図」「パッケージ図」「オブジェクト図」
コンポーネント図」「配置図」「合成構造図」「タイミング図」「相互作用概念図」

と沢山あります。よく見かけるのは上記の打ち初めの3つです。

そして「クラス図」以下の様な形で表現いたします。

f:id:Takunoji:20170223213859p:plain

「汎用画面クラス」には以下のデータを保持している
・画面リスト:画面(機能)の名前をリストで保持する、起動APが変更する度に更新
・APリスト:起動できるアプリケーションのリスト、AP起動時に取得する
・画面コンテキスト:画面表示するためのプロパティを保持するコンテキストクラス
・画面表示タイプ:画面表示のタイプ、現状では3種類。設定ファイルの値で変更可能
・画面表示クラス:Qtで作成する画面クラス(画面タイプA~Cの3種類)

f:id:Takunoji:20170222224804p:plainは「+」を示し「+画面リスト」は他クラスからもアクセスできる変数を示す

f:id:Takunoji:20170222225218p:plainは「−」を示し「−画面リスト」は他クラスからはアクセスできない変数ことを示す

そして、f:id:Takunoji:20170222225441p:plainは振る舞い、メソッドを示す。

「汎用画面AP」は「DBアクセスInterFace」と関連がある(呼び出す)

...とここまでが設計できています。

「DBアクセスInterFace」は設定ファイルからアクセスするDBのURIを読み込み
対象のDBサーバーへアクセス、データの取得、更新、削除、登録(CRUD)を行う。

以降、リモートとローカルDBへのアクセス(PostgreSQL, SqlLite)を切り替えて
EntityManagerの作成及びSQLクエリの発行を行う仕組みを考えるので

UMLの作成から一時的離れます。

次は、設計するためのクラス構成を考えるためのテスト実装をやります

takunoji.hatenablog.com

UML Designerの使い方 チュートリアル

前回セットアップをしたので、今度こそUMLの書き方を学びます.... とはいえツールの使い方がわかないと話にならないので
ツールの使い方を勉強します。

<UML Designer getting started tutorial>を参考にチュートリアルをなぞります。
・まずは動画で見ると良い?

www.youtube.com

一言で「わかりやすかった」と言うより「そのまんま」だった。
例に習い、作図して見る

f:id:Takunoji:20170222224638p:plain

f:id:Takunoji:20170222224804p:plainこれはクラスの保持する変数(公開データ)

f:id:Takunoji:20170222225218p:plain同様に非公開データ

を示します。

f:id:Takunoji:20170222225441p:plainこれはメソッドを示し、クラスの振る舞いを表します。
「画面コンテキスト」と繋げている線は関連を示します。

これらを繋げていきシステムの、アプリケーションの仕組みを描きます。

実際に使用するときには、「関連の線」とか依存とかのきめ細かなルールを設けて
やっているところもあるとは思うけれど、素直にノートをつけてやるとよりわかりやすいのではないでしょうか?

f:id:Takunoji:20170222230557p:plain

これで、ある程度の記述ができる様になったので次は汎用画面APUMLを作図していきます。

eclipse UML Designer クラス図の書き方

eclipse UML Designerでのクラス図の書き方 前回〜UMLセットアップ

UMLプロジェクトを作成は以下の様な手順で作成します。
1.プロジェクト作成〜パースペクティブを右クリック〜

f:id:Takunoji:20170221203809p:plain

2.「Other」を選択

f:id:Takunoji:20170221203951p:plain

3.「UML Project」を選択

f:id:Takunoji:20170221204158p:plain

4.「プロジェクト名を入力」し完了ボタンを押下

f:id:Takunoji:20170221204327p:plain

5.初期表示を確認する

今回は、クラス図を作成するので「Class diagram」をダブルクリックします

f:id:Takunoji:20170221204734p:plain

まず、作成するクラスの要件、機能一覧を決めておきます。※汎用画面APを作成します

今回のサンプルアプリケーション、汎用画面APは設定ファイルに登録した
アプリケーションを起動する。

なので、MainClassより処理が起動して各要件を満たすために必要な処理を実装する
そのためのデザインを組み上げる → 設計するのがUMLになります。
細かい定義は他のサイトを参照してください(笑)

次回は、UMLの書き方を記載いたします。

汎用画面APの要件と機能一覧

サンプルで作成するアプリの概要です

 

アプリケーション名:汎用画面AP

タイプ:フレームワーク

 

要件:

1.どのOS でも起動可能(コンパイル後)

2.単体でも複数のアプリでも起動出来る

3.設定値をDBでもファイルでも持てる
 
機能一覧:

a:画面サイズなどデバイスに依存する値を取得して画面コンテキストを作成する 

b:画面コンテキストより表示するコンポーネントを作成、表示する

c:AP設定ファイルよりシングルAP、マルチAPモードでの起動を切り替える

d:起動可能APのリスト、各設定値をAP設定ファイルの指定先より取得  
※リモートDB、ローカルDB、リモートファイル、ローカルファイル複数指定可能
e:Windows, MacOS, Linux, Android, iOS上で起動できる

<クラス図>

f:id:Takunoji:20170305180247p:plain

UMLの書き方 eclipse UMLDesigner

UMLの書き方を学ぶのにeclipseを使用します。

毎度おなじみのオープンソースでございます(笑)

まずはeclipseのダウンロードとセットアップを行います。
eclipseのセットアップはこちらを参照ください


そして、eclipseプラグインをインストールします。
eclipseの最上部のメニュー(ヘルプ)より下の様なメニューを開きます

f:id:Takunoji:20170220205952p:plain

「マーケットプレース」よりインストールプラグインを検索します。下の図を参照
検索キーワードに「uml designer」と入力してください(スペースが入ります)

f:id:Takunoji:20170220210732p:plain

あとは、インストールするだけです。

eclipseを再起動後、新規プロジェクトを作成する要領で以下の様にUMLプロジェクト

を作成します。

f:id:Takunoji:20170220211219p:plain

※このあとは任意の情報を入力してプロジェクトを作成します。

次回はUMLの作成を開始いたします。

takunoji.hatenablog.com

primefaces レイアウトの使い方メモ

参照URL:layoutUnit (VDL Documentation Generator - Generated Documentation)

resizable:サイズを画面上から変更できる(マウスで変更できる):default=false

collapsible:画面を閉じる事ができる(マウスでクリック):default=false

 

 

ネットワーク 名前解決の方法

イントロダクション

参考サイトはこちらです。

 

参照する、ファイルは以下の2つ

[/etc/hosts]

このファイルで自端末のIPアドレス、アクセス先のIPアドレスを解決

nameserver 対象PCのIP

<ex>

my.host.local 192.168.xxx.xxx (自分の端末のIPを設定)

your.host.service.com 213.10.XXX.XXX (どこか別の端末)

※今接続しているルータの中でやる場合は初めの192.168が固定になります。)

 

[/etc/sysconfig/network]

/etc/sysconfig/network-scripts/ifcfg-eth0

# ネットワークアダプタ「eth0」の設定を上のファイルに記述します。という指定をする

 

それぞれプロパティを設定する

 

>host

上記のコマンドで他のサーバーを名前解決、アクセス確認→/etc/hosts

→このコマンドで自分の端末名を確認でき、外部からPCの名前でアクセスすることができます。

 

前提

  • 当たり前だけど、ネットワークで繋がっていること
  • ファイヤーウォールなどでアクセスを遮断していないこと

意外と、LANが刺さっていないことに気がつかないことがあるので注意

すご〜く苦労したことがあります(笑)

 

さらに、この設定があった。。。-> nssswitch.cof

 

ラズパイでネットワークの構築して見るのも面白いですよ〜

ラズパイ(RPi)関連

  1. ラズパイ SSH接続メモ
  2.  ラズパイ Under-voltage detected! 〜エラー対処〜
  3.  ラズパイ(CUI)セットアップ
  4.  RPi Settingup Wifi in CUI ~ラズパイ CUI Wifi接続~
  5. Memos about Settingup RPi ~使用したコマンドメモ~
  6. RPi and JavaFX sample of deployment 〜ラズパイにサンプルデプロイ〜
  7.  RPi JavaFX execution ~ラズパイ JavaFX自動起動~
  8. RPi Install Git 〜ラズパイにGitのインストール〜
  9. RPi Java Swing〜ラズパイにJava Swingアプリを起動する〜※失敗しています。。。」
  10. RPi Maven Install 〜ラズパイでMeven
  11. Install XFCE4 on RPi 〜ラズパイに高速軽量デスクトップインストール〜

 

There is a process already using the admin port 4848

>asadmin start-doamin

でサーバーが起動しなくなった.....

 

原因がどうやら「ホスト名」にあるみたい。。。

StackOverFlowで調べてみるとホスト名が原因らしい(詳細は不明)

とにかく、/etc/hostsのドメイン名部分を変更

IPアドレス    ドメイン

 

コマンドを叩く!

>asadin start-domain domain1

ん~よくわからんが動いた。。。