Hatena::ブログ(Diary)

TAKUYA’s CODE RECORDER このページをアンテナに追加 RSSフィード

2008-11-30

Programming Methodology 25〜27

|

最後の三回分を視聴しました。データ構造の作り方から、並列処理の話、Javaの基本的な仕組みなどについて触れられ、最終回では、このクラスを終えた後に進むべき道についてアドバイスをしていました。

D

  • Social Network
    • profile/person
      • name(unique ID)
      • status
      • image
      • list of friends
    • friendship
      • reciptocal
      • 互いのリストに互いの情報が入る
      • 6次の隔たり(6-degrees separation)
    • これらをどのように表現するか?
  • Concurrency
    • multiple things at the same time
      • cycling through some things
    • Thread
      • Runnable Interfaceの実装
      • shared data

D

  • standard Java
    • mainメソッドから始まる(static)
    • その後、起動されたクラスのオブジェクトを生成して、処理を始める
    • JAR
      • Java ARchive
      • classes(cmpiled)
      • EclipseでのJARファイルの作成
    • Java関連の本の紹介

D

  • computer science
    • computer science is not computer programming
    • 次はCS106Bへ
      • How do you implement a hashmap?
      • recursion -> huge powerful concept
    • またはCS103へ
      • Discrete Math
      • Computability
    • CS107/CS108
      • low-level programming
      • Object-Oriented system/large apps
    • その他、コンピュータサイエンスの様々な分野について紹介
    • CS + business
      • 起業するという道もあることを示唆
      • Product Management/finance(computation problems)
    • CS + Bio
      • Bioinformatics
      • Genomics
      • Bio engineering
    • CS + Law
      • IP/copyright/digitalMedia
    • CS (+ CS)
      • programmer
      • engineer management
      • teaching
    • programmingはこれらのことをやるための入口

2008-11-29

Programming Methodology 22〜24

|

三回分の講義を視聴しました。断片的なメモしか残すことができませんでしたが、それをメモしておきます。

D

第二十二回目は、GUIの続きということで、コンテナというコンポーネントを使って、GUIの要素を再帰的に表現する方法について述べられていました。

  • container/component(GUIの続き)
  • HashMap
    • HashMap<String, Album> inventory = new HashMap<String, Album>;
    • inventory.put(album.getName, album);
    • Album album = inventory.get("albumName");

D

第二十三回目は、助手の先生による探索やソートに関するお話でした。

  • Searching
    • Linear Search
      • takes a lot of time
    • Binary Search
      • ソート済みの配列で使う
  • Sorting
    • アルゴリズムによって効率が変わる

D

第二十四回目は、データ構造の作り方ということで、何をクラスやメソッドにするべきか、オブジェクト同士の関連をどのように扱うのかということに触れられていました。

  • data structure
    • principles
      • nouns -> classes
      • verbs -> methods
      • unique identifier
    • design
      • collection of objects
    • AlbumとSongの関連性
      • Songが様々Albumが保持する可能性あり
      • 一つのSongのオブジェクトは一つしか生成しない
      • Albumオブジェクトがそれを参照する
      • deepCopy/shallowCopy

2008-11-26

Programming Methodology 20〜21

|

この二回は、GUIの作り方についてテキストボックスやボタンなどのコンポーネントを実際にプログラムしながら説明されていました。Java特有の事例ばっかりだったので、メモもかなり少なめです。

D

D

  • GUIについて
    • Graphical User Interface
    • [Gooey]と発音する
    • Javaのライブラリ
      • java.awt.event.*;
      • javax.swing.*;
    • userの動作を待つlistenerを定義する
    • 諸々のコンポーネントについての説明

2008-11-24

Programming Methodology 19

|

今回はインターフェイスについて語っていました。Java5.0以降の言語仕様については、あまり詳しく把握していなかったので、今回の講義はいろいろと得るものがありました。

D

  • Interface
    • set of methods
    • common functionality among set of classes
    • is-aの場合の、extendsを使う
    • Interfaceをimplementすると、そのinterfaceのmethodがあることを保障する
  • Map(Interface)
    • keyとvalueの組み合わせ
      • dictionaryの役割(wordsとしてのkeyを渡すと、definitionsとしてのvalueが返ってくる)
      • phone bookとしても捉えることができる
    • このような属性を抽象化したのがInterface
    • HashMap <- implement Map
      • templeteとして2つのtypeを指定する(keyとvalue)
      • Map<String, String> dict = new HashMap<String, String>();
      • Map<String, Integer> phonebook = new HashMap<String, Integer>();
      • オブジェクト生成時に実装クラスを指定して、操作はInterfaceで行なう
      • dict.put(key, value);
      • dict.get(key); -> keyに関連づけられているvalueが返ってくる/見つからなければnullが返る
    • Collection Hierarchy/Map Hierarchy
    • Iterator
      • list through set of values
      • ArrayList<String> names = new ArrayList<String>();
      • Iterator<String> it = names.iterator();
      • while (it.hasNext()) { println(it.next()); }
      • HashMapの場合は、Iterator<String> = dict.keySet().iterator();
      • no order、どういう順番でiterateされるかはわからないが、全ての要素を一度だけ訪れる
    • Iteratorを使ったfor文(Java5.0以降)
      • dict.keySet()のiteratorを使って、全要素を巡回する
      • for (String word: dict.keySet()) { println(word); }

2008-11-23

Programming Methodology 18

|

今回は、実際にバグをつぶしていく過程を実演しながら、デバッグについて熱く語っていました。

D

  • 配列の復習
    • ArrayList
      • pros:dynamic resizing/other ops
      • cons:less efficient than array/syntax balky(pre 5.0)
    • array
      • fixed size
  • Debugging
    • 役割
      • Design -> Architect
      • Coding -> Engineer
      • Testing -> Vandal(プログラムを破壊しようと試みる)
      • Debugging -> Detective(破壊された原因を捜査して修正する)
    • Design -> Development -> Debugging -> Deployment
      • 先の工程に行くほど、修正するのに10倍のコストがかかる
      • Designの時点で見つけられるミスと比べると、Deploymentの時点で発見される問題は1000倍の負荷がかかってしまう
    • Bugの種類
      • bad values
      • faulty logic
      • unwarranted assumptions
    • 回避するには
      • simple
      • systematic
      • assumptions about problems
      • critical(批判的にコードを読む)
      • Don't panic!
    • Debuggingの方法
      • printlnを使う(メソッドや変数に対して)
      • Unit Test
    • EclipseでのDebuggingの実演
      • BreakPointを指定する
      • BreakPoint時点でのstackFrameが表示される
      • 変数の中身が表示される
      • 1step毎処理を進めてみる

Programming Methodology 16〜17

|

二回分の講義を視聴しました。この二回の講義を通じて、配列の扱い方について学びました。

D

D

  • Arrayについて
    • ordered
      • 順番に並んでいる
    • homogeneous
      • 全てが同じタイプ
  • i++
    • post increment
    • int x = 5; int y = x++;
    • xは6だが、yは5
    • pre incrementをやる時は、++i
  • Actual size/Effective size
    • Actual size -> declaredされたサイズ
    • Effective size -> really usingしているサイズ
  • Arrayは参照型のクラス
    • int[]をパラメータに渡せば、その参照が渡される
    • 他のメソッド内である一つの値を変えたら、メソッドを抜け出してもそのまま
    • int[][]
      • array of array
      • matrix(2 dimention)
      • 二次元以上の配列を定義することもできる
  • ArrayListについて
    • サイズをオブジェクト生成時に指定する必要がない
    • Actual sizeとEffective sizeが同じ
    • Java5.0(Java1.5)以降では、templateを指定することができる
    • ArrayList<String> strList = new ArrayList<String>
      • strList.add("hello")で、配列の最後に要素が追加される
      • strList.size()で、配列のサイズを得られる
      • strList.get(i)で、指定した位置の要素を取得できる
    • boolean add(<T> element);
      • ArrayListが<String>で生成されたら、ArrayListの各メソッドの<T>は<String>に置き換えられる
    • ArrayList hold objects
      • primitive typeを保持することはできない
      • wrapperクラスに変換してArrayListに保持させる(Boxing)
      • Boxing/Unboxing -> Java1.5からは、これが自動的に行なわれる
      • ArrayList<Integer> iList = new ArrayList<Integer>();
      • int x = 5;
      • iList.add(x);
      • int z = iList.get(0);