Skip to content

Instantly share code, notes, and snippets.

@clairvy
Created February 15, 2010 23:33
Show Gist options
  • Select an option

  • Save clairvy/305096 to your computer and use it in GitHub Desktop.

Select an option

Save clairvy/305096 to your computer and use it in GitHub Desktop.

課題1

ラーメンをオブジェクト指向で表現。 3種類程度のラーメンが表現できるようにする。

  • フィールド
  • メソッド
  • オーバーロード
  • オーバーライド
  • カプセル化(他クラスからのアクセスはgetメソッドとsetメソッドのみ) が確実に表現されていること。

実行は以下のクラスから呼び出される class RamenExample{ public static void main(String [] args){ Ramen shouyuRamen = new Ramen("しょうゆ"); Ramen misoRamen = new Ramen("みそ"); Ramen shioRamen = new Ramen("しお"); } }

また、以下のクラスは生成が条件 class Ramen{ } class Utsuwa{ } class Soup{ } class Pasta{ } class Topping{ }

ーーーーーーーーーーーーーーーーーーー ここから ーーーーーーーーーーーーーーーーーーー Ramen(しょうゆ,みそ,しお) +- Utsuwa(ラーメンどんぶり) +- Soup(しお,みそ,しょうゆ) +- Pasta(細,太) +- Topping(チャーシュー,コーン,めんま)

JAVAC = javac
JAVAC_OPTS = -encoding utf8
JAVA = java
JAVA_OPTS = -Dfile.encoding=UTF-8
SRCS = $(wildcard *.java)
OBJS = $(subst .java,.class,$(SRCS))
Main = RamenExample
do : build
$(JAVA) $(JAVA_OPTS) $(Main)
build : $(OBJS)
$(OBJS) : $(SRCS)
$(JAVAC) $(JAVAC_OPTS) $(SRCS) 2>&1 | lv -Ou | cat
clean :
$(RM) $(RMF) *.class
test : build
prove ./test.pl
import java.util.ArrayList;
import java.util.LinkedList;
// 条件のクラス
class Ramen {
// メソッド(Ramen, toString, ...)
Ramen(String type) {
utsuwa = new Utsuwa();
pasta = new Pasta();
topping.add(new Topping(Topping.Type.チャーシュー));
topping.add(new Topping(Topping.Type.卵));
topping.add(new Topping(Topping.Type.ネギ));
try {
soup = new Soup(type);
} catch (IllegalArgumentException e) {
// 存在しないラーメンを頼まれたら,デフォルトにしちゃうよ
soup = new Soup();
}
System.out.println(this);
}
public String toString() {
LinkedList<Topping> list = new LinkedList<Topping>(topping);
return
"器: " + utsuwa + "\n"
+ "スープ: " + soup + "\n"
+ "麺: " + pasta + "\n"
+ "トッピング: " + CollectionUtil.join(list, ", ");
}
// フィールド(utsuwa, soup, pasta, topping)
Utsuwa utsuwa;
Soup soup;
Pasta pasta;
ArrayList<Topping> topping = new ArrayList<Topping>();
}
class Utsuwa {
enum Type {
ラーメンどんぶり
}
Utsuwa() {
this.type = Type.ラーメンどんぶり;
}
public String toString() {
return type.name();
}
Type type;
}
class Soup {
enum Type {
しょうゆ,
みそ,
しお
}
// オーバーロード(Soup)
Soup() {
this(Type.しょうゆ);
}
Soup(String type) throws IllegalArgumentException {
this(Type.valueOf(type));
}
Soup(Type type) {
this.type = type;
}
public String toString() {
return type.name();
}
Type type;
}
class Pasta {
enum Type {
中太麺
}
Pasta() {
this.type = Type.中太麺;
}
public String toString() {
return type.name();
}
Type type;
}
class Topping {
enum Type {
チャーシュー,
卵,
ネギ,
}
Topping(Type type) {
this.type = type;
}
public String toString() {
return type.name();
}
Type type;
}
// ここから補助クラス,インターフェイス
class CollectionUtil {
public static <T> String join(LinkedList<T> list, final String delim) {
String first = list.removeFirst() + "";
return foldLeft(list, first, new Procedure<T, String>() {
// オーバーライド(apply)
@Override
public String apply(String init, T element) {
return init + delim + element;
}
});
}
public static <A, B> B foldLeft(LinkedList<A> list, B init, Procedure<A, B> proc) {
if (list.size() == 0) {
return init;
} else {
B next = proc.apply(init, list.removeFirst());
return foldLeft(list, next, proc);
}
}
}
interface Procedure<A, B> {
public B apply(B init, A element);
}
class RamenExample {
public static void main(String [] args) {
Ramen shouyuRamen = new Ramen("しょうゆ");
Ramen misoRamen = new Ramen("みそ");
Ramen shioRamen = new Ramen("しお");
}
}
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 1;
my $expect = <<"EOL";
器: ラーメンどんぶり
スープ: しょうゆ
麺: 中太麺
トッピング: チャーシュー, 卵, ネギ
器: ラーメンどんぶり
スープ: みそ
麺: 中太麺
トッピング: チャーシュー, 卵, ネギ
器: ラーメンどんぶり
スープ: しお
麺: 中太麺
トッピング: チャーシュー, 卵, ネギ
EOL
is(`java -Dfile.encoding=UTF-8 RamenExample`, $expect);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment