- [Vue.js]時計?タイムコードを表示するWebアプリ
- (2021/11/16)
- ポエム
- (2020/09/30)
- メトロノームアプリをリリース
- (2017/04/22)
- Sikulix勉強中:便利関数
- (2017/02/25)
- [JavaFX]学習メモ
- (2016/09/22)
こんにちは。おにぎりくんです。
デザインパターンを学び終え、ソフトウェア管理の制作に入りました。春休みはもう少ししかないのですこし急いでいます。春休みには2.0を完成させたい!
というときに、壁にぶつかってしまったのです。java.util.LinkedListのIteratorを使って全部の要素を出力する部分で、add()したはずの要素がぜんぜん出てこないんです。いろいろ原因を探ったのですが、「何でadd()されないのか」という疑問に答えはありませんでした(もちろんGoogleさんも答えてくれず)。
そこで、GUIはあきらめてCUIに切り替えました。しかしここでも同じ壁が目の前に立ちはだかりました。。。そこでテストプログラムを書きました。
package test; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import cui.Genre; public class ListTest { private List<Genre> list = new LinkedList<Genre>(); public void add(String name) { Genre g = new Genre(); g.setName(name); g.setPath("new soft path"); list.add(g); } public void ls() { Iterator it = list.iterator(); if(it.hasNext()){ System.out.println(it.next()); } } }
CUIプログラムのコピペで作りました。あとはMainクラスからインスタンス化してテストしました。同じ現象がおきました。どこがいけないのでしょう。要素の型がGenre(自分で作ったクラス)だからでしょうか。よく見ると違いました。「add()されない」のではなく、「全要素を出力していない」でした。気づいたのは、list.size()の値でした。上のプログラムで、
if(it.hasNext()){
となっているところを、
while(it.hasNext()){
とすると、見事に壁をのりこえられました。よかった!・・・しょぼい凡ミスですねこれ(-_-)
こんにちは。おにぎりくんです。
ブログ初体験で、少し戸惑っています(^-^;)以前から、ブログは自動でインデックスがついたりするので、便利そうだなとは思っていました。アクセス解析でお世話になっている忍者ファクトリーさんのブログで、やっとブログデビューです。
さて、今日はデザインパターンについての話です。デザインパターンとは、プログラミングにおいてよくあるコードを抽象化し、体系的にまとめたものです。そして23個のパターンをまとめたGoF(ギャングオブフォー)は有名で、彼らが書いたパターンがデザインパターンのなかで一番有名です。
デザインパターンにおいて頻繁に出てくるのは、抽象クラスとインターフェースでしょう。私は、以前はカプセル化については言葉を知っているくらいで実際にどのようにすればよいかは理解できていませんでした。今では、そのカプセル化には抽象クラスとインターフェースが結構重要な働きをするんだなということがわかってきました。
さて本題ですが、私の好きなデザインパターンは、TemplateMethodパターンです。なぜかといいますと、このパターンはカプセル化もいいのですが、個人的に気に入っているところが別にあるからです。それは、クライアントの要求する機能をいっぺんに作ろうとするのではなく、わかりやすい部分に切り分けて、ひとつひとつのメソッドを実装しやすくする点にあります。達成不可能な目標に向かうときにモチベーションはあがらないものです。TemplateMethodパターンでは、ほしい機能を部分に分けて、実装のやる気(と成功体験)を増やします。
今日はデザインパターンについて書きました。私はまだまだデザインパターン習得中です。習得したらソフトウェア管理の開発に入りたいと思います。春休み中にソフトウェア管理を公開したいなぁ…とっても便利なものになるはずなので。