javaにおける抽象クラスとインターフェースの違い

実は,抽象クラスとインターフェースの違いをしっかりと分かっていなかったのでちょっとまとめてみる.

両方ともオブジェクト指向での多様性に対応するシステムなのだが,機能にいくつか違いがある.

それぞれ以下の様な定義になっている.

インターフェース

インターフェースは抽象メソッドとstaticメンバからなるクラス(のようなもの).

抽象クラス

抽象クラスは抽象メソッドを持つクラス.


では,この2つの違いは何かというと,

1つのクラスが2種類以上のインターフェースを持つことはできるが,
抽象クラスは1つしか持てない

ことだと思った.

論文の構成

卒論を書き始める季節ですね.

ここまで,先生方にならった構成の仕方を一度まとめてみようと思います.

一番,外枠についてまとめてみる.
おおまかに内容で分けると以下の5つになる.

  1. はじめに
  2. アプローチの流れ
  3. アプローチについて
  4. 結果
  5. まとめ

それぞれの項目ごとに何を書けばいいかについてもまとめてみる.

はじめに

はじめには,背景,目的,関連研究について書く.
目的では,背景問題の内,どこを扱い,何を使い,何を得たいのかということを定義する.

アプローチの流れ

形式化された目的に対して,どのようにアプローチを設計するかを説明する.

アプローチについて

アプローチで設計した内容をどのように

結果

アプローチを行って得られた結果をまとめる.
発展研究などについてもここ.

まとめ

結果までの道のりを述べる.



こんな感じかな?
問題の形式化がなかなかうまくできないです・・・

eclipseで作成したプログラムをコマンドプロンプトから実行

普段,eclipseでプログラムを組んで,eclipse上で実行を行っています.今回,コマンドプロンプトから動くjavaプログラムを作る必要があってそのとき調べたことのまとめです.

基本的にeclipse内で作成したプログラムはディレクトリでは以下の様な構造をしています.

workspace---project名1---src---package名1---class名1.java
          |-project名2 |                  |-class名2.java
          |-project名3 |                  |・・・
          |・・・      |-bin---package名2---class名1.class
                       |・・・            |-class名2.class
                                          |・・・

このディレクトリのbinにいるときに以下のmain関数を含んだクラスを実行するとプログラムが実行できます.
違うディレクトリで実行したいときはコマンドプロンプトに「

java -cp C:\workspaceまでのパス\workspace\project名1\bin package名1\class名1.class

とコマンドしてやれば実行できます.

selfの扱い

modelでメソッドを書いていたときにすごいつまったのでメモ


railsのモデル内でのメソッドで以下のようなメソッドを作ったとする。

def fizz
 return "fizz"
end

def self.buzz
  self.fizz
end

このモデルからbuzzメソッドを呼び出すとエラーが出力されてしまう。

なぜかというと,

self.buzz

このselfはbuzzがクラスメソッドであることを表している.
つまり,buzzはインスタンスを経由せずにコード内にbuzzと書くことで動く.

self.fizz

このselfはメソッドを呼び出したインスタンスをよびだすためのselfである.こちらのselfはhoge.buzzとかかれたhogeを引用してhoge.fizzを実行しようとしている.


つまり,buzzはインスタンスなしで実行されているのに対して,fizzのselfがインスタンスを要求するためにおこるエラーだった.

rails難しいなー

研究とは

今日の発表で感じたことなのですが,

研究とは,自身のアイディアが正しいかを考え,調べることである.
自身のアイディアが正しいかどうかを調べるために自身の考えで固めてもそれは脳内でやっただけで,現実にはなっていない.
他の人へと説得するために,全てを説明するあるいは既存の研究成果や研究手法を使っていくプロセスである.

will_paginate

最近、ruby-rails環境を使ってちょっとしたアプリを作っています。
そこでちょっとはまったのでまとめ

will_paginateというページ送り機能のプラグインをインストールする。

まずはgemでwill_paginateをインストール。

> gem install will_paginate enter
Successfully installed will_paginate-2.3.15
1 gem installed
Installing ri documentation for will_paginate-2.3.15...
Installing RDoc documentation for will_paginate-2.3.15...

次に、will_paginateを使うアプリのconfig/environment.rb内に以下を記述

require 'will_paginate'


ここでさっそくエラーが

rails server
=> Booting WEBrick
=> Rails 3.0.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/config/environment.rb:4:in `require': no such file to load -- will_paginate (LoadError)
	from /config/environment.rb:4
	from /config.ru:3:in `require'
	from /config.ru:3
	from /vendor/bundle/ruby/1.8/gems/rack-1.2.1/lib/rack/builder.rb:46:in `instance_eval'
	from /vendor/bundle/ruby/1.8/gems/rack-1.2.1/lib/rack/builder.rb:46:in `initialize'
	from /config.ru:1:in `new'
	from /config.ru:1

config/environment.rbからwill_paginateが呼び出せていないよう。

調べてみるとどうやらGemfileに記述しなければいけないらしいので
さっそく下の行をGemfileに書き加える

gem 'will_paginate'

Gemfileに書き加えた後はbundleで更新しなければならないらしい。

>bundle check
Your Gemfile's dependencies could not be satisfied
Install missing gems with `bundle install`
>sudo bundle install
Fetching source index for http://rubygems.org/
Using rake (0.8.7) 
Using abstract (1.0.0) 
…
Using twitter (0.9.8) 
Installing will_paginate (2.3.15) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Your bundle was installed to `vendor/bundle`

これでインストールと設定は完了。

参考URL
『will_paginateをインストール、設定しよう Ruby on Rails Pro』
http://maskana.homedns.org/rails/pro/body/103
『第11回: Bundler - Ruby on Rails 3.0 日記 - Ruby on Rails with OIAX』
http://www.oiax.jp/rails/rails3/bundler.html