ホーム » 2013 (ページ 7)
年別アーカイブ: 2013
2013年9月8日(第337回)
- 鯖江地域活性化プランコンテスト
ゲスト:コンテストのアドバイザー 木村様、メンター 浅野様 - ベトナムの話
ゲスト:福井高専OB 五十嵐様
担当:前田勝(4EI)、松島(2C)、山野(2C)、西(教員)
2013年9月1日(第336回)
- 雨の話
- 鯖江地域活性化プランコンテストについて
- まるよし Train Pops ~ 国語と遊ぼう! 第21便 「スピーチ」
- 五味が答える!~かかってこいや~
ゲスト:福井高専OB 大野様、専攻科生 高見君
担当:前田勝(4EI)、松島(2C)、山野(2C)、五味(教員)
授業アンケート(2PSオブジェクト指向)
恒例の授業アンケートの結果を見てみた。 回答数が少ないため、評価値はあんまり宛てにはならないが、 例年通りのポイントであった。
今年は、オブジェクト指向が応用でどのように使われているのか、 事例をプログラム例を見せながら説明したりして、例年よりは 進度が早まった。(その点UMLの図法の詳細説明を省いている)
さらに講義室に、大型テレビがあったので、パソコンで 以前の自分のBLOG記事や、他のWebの解説記事などを見せながら 説明したり、プログラムを実演しながら見せたりと、 パソコン画面を用いた説明を増やしてみた。
概ね好評であったと思うが、ポイントには出ているのかは、 少数データで判別は困難かな…
2013年8月24日(第335回)
- まるよし Train Pops ~ 国語と遊ぼう! 第20便 「スピーチ」
- 松島さんのお出かけの話
- 五味が答える!~かかってこいや~
担当:前田勝(4EI)、山田(3EI)、松島(2C)、山野(2C)、五味(教員)
2013年8月18日(第334回)
- まるよし Train Pops ~ 国語と遊ぼう! 第19便 「公開講座」
- 五味が答える!~かかってこいや~
- 夏休みの過ごし方について
- 犬のリールの長さについて
ゲスト:福井高専OB 大野様
担当:前田勝(4EI)、松島(2C)、山野(2C)、五味(教員)
2013年8月11日(第333回)
- まるよし Train Pops ~ 国語と遊ぼう! 第18便 「公開講座」
- 花火の中身について
担当:前田勝(4EI)、山野(2C)、西(教員)
2013年8月4日(第332回)
- 教員によるラジオについての感想
- 専攻科デザイン工学の様子
- 期末試験の結果
担当:松島(2C)、山野(2C)、西(教員)
大雨後の濁流の動画(卒研用)
今年の卒業研究では、型落ちしたスマホなどが出た時の活用として、 川の氾濫警報のための監視システムを作ることをテーマにしている。
そこで、平常時の川の写真よりも、濁流となった状態がどういったものなのか、 サンプルが欲しいということで、今朝の川の動画を撮影してみた。
これより解かることとして、濁流状態では水しぶきで霞んだ状態になっている。 このため、時間軸の差分法では、明確な「濁流」を検出することは難しいと思われる。
2013年7月28日(第331回)
学生さんがテスト期間中につき、教員による収録でお送りしました。
- 新任先生紹介 物質工学科 後反先生
- まるよし Train Pops ~ 国語と遊ぼう! 第17回 「新幹線の名前」
- 金田先生の恋愛相談室
ゲスト:物質工学科 後反先生
担当:長水先生、金田先生、丸山先生、西
コンテナクラスとテンプレート(C++),Generics(Java)
オブジェクト指向で、純粋仮想基底クラスと、仮想関数を使った応用では、 コンテナクラスと呼ばれる方法が使われる。 コンテナクラスでは、空っぽの純粋仮想基底クラスを使って、データを便利に扱える 処理(アルゴリズム)を記述しておく。 自分でデータを扱うプログラムを作成する場合には、その空っぽクラスから派生させた クラスを定義し、仮想関数のメカニズムを使ってそのアルゴリズムが動くようにしておく。 こうすれば、面倒なアルゴリズムを、違う型でもそのアルゴリズムを使える。 このようなクラスは、コンテナクラスなどと呼ばれたり、Generic クラスなどと呼ばれる。
過去の記事では純粋仮想クラスの説明で、Object という純粋仮想基底クラスで、 データ並び替えなどのアルゴリズムが、使える例を示した。
しかし、この過去の記事では、配列には、Object から派生させた Integer や、CString が 入っている例で、便利に使える例として説明しているが、 一つの配列の中に、Integer や CString が混在したら、実は cmp() 関数で、 異なる型のことを考えていないため、実行時に動かなくなる。
こういった問題の解決として、色々なテクニックが考案されているが、この例が、 C++ のテンプレート機能と、Java の Generics 機能である。 ただ、この2つの機能は、文法の字面では似ているが、考え方はまるっきり違う。 以下に、固定長スタックを例に使い方を中心に説明する。
C++ テンプレート
C++のテンプレート機能の基本原理は、実はあんまりオブジェクト指向と関係はない。 例えば、整数データを記憶するスタックのプログラムは以下のようになる。
class Stack { private: int data[ 100 ] ; int sp ; public: Stack() { sp = 0 ; } void push( int x ) { data[ sp++ ] = x ; } int pop() { return data[ --sp ]; } } ; void main() { Stack s ; s.push( 1 ) ; s.push( 2 ) ; printf( "%d" , s.pop() ) ; printf( "%d" , s.pop() ) ; }
しかし、整数を覚えるスタックは記述できたが、実数を覚えるスタックや文字列を覚えるスタックは、改めて記述する必要がある。 この不便さを解消するのがテンプレート機能である。
template<class T> class Stack { private: T data[ 100 ] ; int sp ; public: Stack() { sp = 0 ; } void push( T x ) { data[ sp++ ] = x ; } T pop() { return data[ --sp ] ; } } ; void main() { Stack<int> si ; // 型Tにintを割り当てた、処理が生成される。 si.push( 1 ) ; printf( "%d" , si.pop() ) ; Stack<double> sd ; // 型Tにdoubleを割り当てた、処理が生成される。 sd.push( 1.23 ) ; printf( "%lf" , sd.pop() ) ; }
テンプレートの基本は、型情報を<class T>として雛形プログラムを記述しておき、 具体的に型を明記して使われた時点で、その型に応じた機械語を生成してくれる。
JavaのGenerics
JavaのGenericsは、字面や使い勝手では、C++のテンプレートと同じように使う。 しかし、実際は、Java の全データの純粋仮想基底クラスの Object 型を使っている。
public class Stack<T> { private T[] data ; private int sp ; public Stack() { sp = 0 ; data = (T[]) new Object[10] ; } public void push( T x ) { data[ sp++ ] = x ; } public T pop() { return data[ --sp ] ; } public static void main() { Stack<Integer> si ; // Integerはintのラッパークラス si.push( 1 ) ; System.out.println( si.pop() ) ; Stack<Double> sd ; // Doubleはdoubleのラッパークラス sd.push( 1.23 ) ; System.out.println( sd.pop() ) ; } }