タグ

Programmingとjavaに関するfjwr38のブックマーク (35)

  • 第127回 Ruby vs Java ダックタイピングとインタフェースで見る多態性 - bingo_nakanishiの他言語出身者のためのPerl入門

    前回は、Perlで書いたのだけど、 Rubyでも書いてみたので載せます。 動的型付け言語と静的型付け言語における多態性 オブジェクト指向では、多態性(ポリモーフィズム)という発想がでてくる。 この多態性を実現する方法を今回は2つ紹介する。 Rubyは動的型付け言語であり、ダックタイピングという手法で、多態性を実現できる。 対して、静的型付け言語であるJavaでは上位の型を作ることで多態性を実現できる(今回はインタフェースを用いてみた)。 ダックタイピング Rubyでのタックタイピングを見てみよう。 human = Human.new dog = Dog.new duck = Duck.new human.touch(dog) human.touch(duck)いま、このようにhumanがtouchすると、おのおのの動物が鳴くソースを書いてみる。 duck(アヒル)はhuman(人間)に触ら

    第127回 Ruby vs Java ダックタイピングとインタフェースで見る多態性 - bingo_nakanishiの他言語出身者のためのPerl入門
  • Java 8 で Scala のような何かを使う - seratch's weblog in Japanese

    Java 8 では JSR 335: Lambda Expressions が取り入れられます。 これを使うと Pure Java でありながら「どう見ても Scala」というコードが書けるようになります。 主に私がメンテナンスしている ScalaFlavor4J というライブラリがあります。 https://github.com/m3dev/scalaflavor4j Java 7 まではこんな感じで使う必要がありました。 Seq.apply(1, 2, 3, 4, 5).filter(new F1<Integer, Boolean>() { public Boolean apply(Integer i) { return i > 2; } }); // -> Seq.apply(3, 4, 5) しかし、Java 8 ではこんなにシンプルに書けてしまいます。 Seq.apply(1,

    Java 8 で Scala のような何かを使う - seratch's weblog in Japanese
  • Cのポインタで躓く人が多いが、Javaの参照で躓く人が少ない理由

    C言語の学習において、ポインタはよく躓くポイントとして知られています。「Javaにポインタはない」などと表現されることがありますが、実際にポインタは存在します。 NullPointerExceptionという例外が存在することからもこれは窺えるのですが、 C言語のポインタとはちょっと違っており、名前も「参照」と改められています。 C言語のポインタが果たす3つの役割 C言語ではポインタには3つの役割がありました。 変数や構造体を指し示すもの 配列を表現するもの 関数を指し示すもの これらが渾然一体となって、コンピュータの低レベルな「アドレス」という値になって扱われるのです。これがC言語でポインタを理解することを難しくしているのではないでしょうか。 Javaではどのように置き換えるのか? Javaではこれらの3つの機能は明確に分離されています。 まず、変数や構造体を「指し示すもの」としては「参

  • 第1回 JVMはどのようにメモリ空間を利用するのか | gihyo.jp

    あのWebサービスもJVMを利用している 「Javaは大規模なエンタープライズシステムにしか使われない」 それが常識だと思っていませんか? たしかに、これまでJava Virtual Machine(JVM)は、他の言語を実行すると遅く、Javaのプログラムを実行する環境にすぎないものでした。ところが、Java 7から実装されたInvokeDynamicにより、JVM上で、RubyPHPなどさまざまなコンピュータ言語で記述されたプログラムをより高速に実行できるようになりました。 これにより、今までエンタープライズでJava言語で記述されたプログラムを実行するだけの環境であったJVMが、汎用的な実行環境になったと言えます。また、これまでJavaの実行環境として使用されていたノウハウが、他の言語で記述されたプログラムを実行する際にも利用できます。 最近では、TwitterがJVMをアプリケー

    第1回 JVMはどのようにメモリ空間を利用するのか | gihyo.jp
  • volatileで最適化を抑制する - 職業としてのプログラミング

    C言語やC++,Javaにはvolatileという修飾子があります。組み込み系ソフトウェアやマルチスレッドのアプリケーションを書いている方にとっては、なじみ深い存在ですが、そうでない方にはあまり縁がないのかもしれません。しかし、volatileの使い方や存在意義を知らないままコーディングを行うと、思わぬバグを引き起こす場合があります。今回は、そのvolatileキーワードについて簡単に説明したいと思います。 volatileは初期のCであるK&Rには含まれていませんでしたが、ANSI C(C89)以降のC標準規格にはconstと一緒に含まれるようになりました(constとvolatileをあわせてcv修飾子と呼ぶこともあります)。一般的なCなら必ず備えている修飾子です。 volatile修飾子の意味ですが、「プログラミング言語C ANSI規格準拠」によると、 volatileの目的は,黙っ

  • InputStreamをStringに変換する - DISってHONEY♪ @gungnir_odin

    私的スニペットです。ご自由にお使いくださいw 静的メソッドにするとこう ソース public static String inputStreemToString(InputStream in) throws IOException{ BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"/* 文字コード指定 */)); StringBuffer buf = new StringBuffer(); String str; while ((str = reader.readLine()) != null) { buf.append(str); buf.append("\n"); } return buf.toString(); } まとめ あー。改行について検証していません。。。 あとでやりますね

    InputStreamをStringに変換する - DISってHONEY♪ @gungnir_odin
  • ジェネリックな設計 基礎編 - プログラマーの脳みそ

    11/10に開催されたJJUG CCC 2012 Fallでジェネリクスについてセッションを行いました。 このエントリはセッション内容を補足するものです。セッションはジェネリックなクラスの設計を行えるようになって欲しいという狙いで話をしました。ジェネリックなクラスを利用できるというのは前提条件として書いてます。入門的な内容であれば Javaジェネリクス再入門 - プログラマーの脳みそ を参考にしてください。 セッション資料はこちら ジェネリクスの基礎と応用 JJUG CCC 2012 Fall ジェネリクスのスコープ まずジェネリクスのスコープの話から入ります。Javaのジェネリクスには2つのスコープがあります。 メソッドをスコープとした型変数 インスタンスをスコープとした型変数 後者はおなじみの public interface List<E> などの型変数です。 これに対して pub

    ジェネリックな設計 基礎編 - プログラマーの脳みそ
  • C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!

    Cが全然分からないころの話。 javaのように1クラス1ファイルに書かないのはなんで? メンバがポインタばっかりなのはなんで? という疑問を持ちながらコーディングしてるともやもやして嫌でした。 もやもやがいやなのでjava風に書いていたら当然のように詰まりました。 ポインタじゃなかったらメモリが大変なことになるだろうが! というのは最もなんですけど、じゃ小さいプログラムならありなのか?スマートポインタ使えばいいのか?と言うとそうでもない。 今日書いてみたいのは、クラスは相互参照がめんどくせぇから分割しろ。そして同じ理由でメンバ変数はポインタにしとこうぜ、というお話。 相互参照の解決 AクラスがBクラスを使って、BクラスがAクラスを使う。 こういう状態を相互参照とか相互includeとか言うと思う。 javaは何でもないことだけど、C++はこれを簡単には許してくれない。 相互参照の解決方法に

    C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!
  • プログラミングの勉強を始めて1年間で買ったもの - Akinekoの日記

    今月がちょうどプログラミングの勉強を始めてから約1年になるわけなのですが、そのキリとしてこの1年間で買ったを自己確認も兼ねてまとめようと思います。 あと1年間勉強した感想とかも書こうかと。 先頭に付けてる印は下記の通りの意味となります。 ☆:読了 ○:途中まで読んだ等 □:頂き物 Java 入門書 ☆明解Java 入門編 ☆解きながら学ぶJava 入門編 ☆改訂第2版 Java言語プログラミングレッスン (上) ☆改訂第2版 Java言語プログラミングレッスン (下) 言語の深い知識とか ○プログラミング言語Java (The Java Series) ○Effective Java 第2版 (The Java Series) ☆Java並行処理プログラミング ―その「基盤」と「最新API」を究める― エンジニアのためのJavadoc再入門講座 現場で使えるAPI仕様書の作り方 実装パタ

    プログラミングの勉強を始めて1年間で買ったもの - Akinekoの日記
  • Javaの道:例外(1.はじめての例外)

    例外の概要 例外とはプログラム動作における予期せぬ事象(エラー)のことを言います。Javaでは例外が発生した時、あらかじめ用意されているエラーメッセージ(Exception in thread "main" java.lang.ArithmeticException ・・・など)を表示しプログラムを終了します。これがJavaのデフォルトの例外処理です。Javaではデフォルトの例外処理以外にエラーメールの送信、エラーログの生成、強制終了処理の実行といった任意の例外処理を付け加えることができます。 以下はJavaで例外処理を行う上で使用するキーワードです。 「例外をスローする」 Javaではエラーが発生した際、例外オブジェクトというエラー情報を保有したオブジェクトを生成し、そのオブジェクトをJava実行システムに渡します。この処理を「例外をスローする」と言います。 「例外ハンドラ」 エラーメー

    Javaの道:例外(1.はじめての例外)
  • 「Java SE 6完全攻略」第49回 Concurrency Utilitiesの変更点 その1

    最近のCPUはデュアルコアは当たり前、デスクトップPCでさえクアッドコアを使用できる時代になりました。 このような時代の流れを先行するかのごとく、Javaでは当初よりスレッドを使った並行プログラミングが可能でした。とはいうものの、Threadクラスを使いこなすのはなかなか難しいというのも事実です。 そこで、J2SE 5.0では並行プログラミング用のAPIとして、Concurrency Utilitiesが導入されました。Concurrency Utilitiesには大別して次のような機能を持っています。 タスクの非同期実行機構 並行コレクション ロック、シンクロナイザ アトミック処理 Java SE 6ではConcurrency Utilitiesも強化されています。4つの機能のそれぞれが強化されているのですが、変更点はそれほど大きくありません。そこで、連載ではタスクの非同期実行機能の変

    「Java SE 6完全攻略」第49回 Concurrency Utilitiesの変更点 その1
  • Javaの非同期処理を,シングルスレッドのようにシンプルにコーディングするための設計パターン (並列処理を逐次処理にする) - 主に言語とシステム開発に関して

    重要なお知らせ: この記事で公開した情報は,AndroidのMVCフレームワーク「Android-MVC」の機能の一部として取り込まれました。 より正確な設計情報や,動作可能な全ソースコードを閲覧したい場合,「Android-MVC」の公式ページより技術情報を参照してください。 AndroidのMVCフレームワーク - 「Android-MVC」 http://code.google.com/p/android-mvc-... マルチスレッドの処理を,シングルスレッドであるかのようにコーディングしたい場合がある。 1番目の非同期タスクの処理結果を,2番目の非同期タスクが利用する場合など。 つまり,並列化されたタスクを,取扱い上は「逐次化」したいのだ。 まずは手っ取り早く,やりたい事をUMLで表現しよう。 「非同期タスクの連鎖」を実装する際, しばしば下記のような「コールバックの入れ子」が生

    Javaの非同期処理を,シングルスレッドのようにシンプルにコーディングするための設計パターン (並列処理を逐次処理にする) - 主に言語とシステム開発に関して
  • デザインパターンにまつわるエトセトラ - 神様なんて信じない僕らのために

    社内でデザパタが盛り上がっていたので、社内勉強会でLTしました。 その資料です! 基的に自分はデザインパターンは「言語に依存しない設計に名前をつけたもの」だと定義しています。 なので、よくある「デザインパターンってJavaじゃないと役に立たないよね」なんていう意見には反対です。 勿論、言語によっては適応する意味の無いパターン、意味の薄いパターンもありますが、 GoFのパターンだけがすべてではないですし、 "設計に名前をつけて共有する"というスタンスこそが最高のものだと思っています。 (酒井姐さんは社内のエンジニアです) デザインパターンとは何か? View more presentations from Isoparametric ! 最後でも紹介していますが、このが超オススメです! デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns serie

    デザインパターンにまつわるエトセトラ - 神様なんて信じない僕らのために
  • [ 技術書籍紹介 ] ソースコードリーディングから学ぶ Javaの設計と実装

    目次 第1章 ソースコードを読む 第2章 汎用ライブラリ Jakarta Commons Logging/Pool 第3章 テスティングフレームワーク JUnit 第4章 Webアプリケーションフレームワーク Struts 第5章 統合開発環境 Eclipse 第6章 Webアプリケーションサーバ Apache Tomcat 第7章 テンプレートエンジン Jakarta Velocity 第8章 DIコンテナ Spring Framework 第9章 データベースエンジン HSQLDB 第10章 ソースコード読解の手法 付録A Mavenによるビルド 付録B ソースコードのライセンス 内容紹介(「はじめに」より) 書はJava言語で書かれたオープンソースプロダクトを対象とし、そのソースコードを読解します。単にソースコードの断片を題材にプログラミングのテクニックを解説するのではなく、一歩踏

  • JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト

    Juergen Hoeller outlines plans for Spring Framework 6.0, which will mark the beginning of a new generation with Java 17 and Jakarta EE 9 as the new baseline. It will include foundational support for native executables and AOT processing via Spring Native as well as unified observability APIs. Some outdated features will be pruned or deprecated to future-proof the framework. An initial milestone re

    JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
  • ScalaによるWebアプリケーションフレームワーク「Lift」とは

    Java仮想マシン上で動くオブジェクト指向+関数型言語として、Scala(スカラ)が最近注目を集めています。Scalaで構築されたWebアプリケーションフレームワークはいくつかありますが、 連載ではその中で比較的歴史のある(といっても2年程度ですが) フレームワークである、Lift(リフト)を紹介したいと思います。 はじめに Java仮想マシン(以下JVM)上で動くオブジェクト指向+関数型言語として、Scala(スカラ)が最近注目を集めています。 Scalaで構築されたWebアプリケーションフレームワークはいくつかありますが、 稿ではその中で比較的歴史のある(といっても2年程度ですが) フレームワークである、Lift(リフト)を紹介したいと思います。 対象読者 Javaは知っているが、Scalaも学んでみたいと思っている方 ScalaでのWebアプリケーション開発に興味がある方 必要な

    ScalaによるWebアプリケーションフレームワーク「Lift」とは
  • https://blog.ik.am/entries/138

  • Martin Fowler's Bliki in Japanese - クロージャ

    http://martinfowler.com/bliki/Closure.html 動的言語に興味がでてくると、 クロージャやブロックと呼ばれる概念に出会うと思います。 C/C++/Java/C# などクロージャを持たない言語をご使用の方は、 どういったものなのかご存知ないかもしれません。 ここでは簡単にクロージャについて説明します。 クロージャを持った素晴らしい言語を使ったことある方にとっては、 あまり面白くない話かもしれません。 クロージャは長年使用されてきました。 私が最初に出会ったのは、おそらく Smalltalk だったと思います。 Smalltalk ではブロックと呼んでいました。 Lisp ではクロージャを多用しています。 Ruby でもクロージャが提供されています――多くの rubyist がスクリプト言語に Ruby を選ぶのはこのためです。 基的にクロージャとは、ブ

  • Android入門

    AndroidGoogle 社が提供する携帯電話向けの OS です。ここでは Android を使ったアプリを開発される方を対象として、開発環境である Android Studio のインストール方法やプログラミング方法、そして作成したアプリの公開方法まで解説します。

    Android入門
  • 矢沢久雄の早わかりGoFデザインパターン(1) | 日経 xTECH(クロステック)

    今回は、パターンを1つだけ紹介します。「Mediatorパターン」です。GoFでは、それぞれのパターンの「目的]「背景」「効果」などが明示されています。私も、ちょっと真似をしてみましょう。複数のオブジェクトを組み合わせてプログラムの機能を実現するという目的において、オブジェクト間の関連がゴチャゴチャになってしまうという背景(問題)があり、Mediatorパターンの採用によって関連をキレイに整理できるという効果があります。説明だけでは、何のことだかわからないと思いますので、具体例をお見せしましょう。 図1[拡大表示](1)をご覧ください。これは、UML(Unified Modeling Language、ユーエムエル)と呼ばれる表記法で記述されたプログラムの設計図です。UMLでは、四角形の中に下線付きで名前を書いてオブジェクトを表し、関連のあるオブジェクトを矢印で結んで示します。ここで関連

    矢沢久雄の早わかりGoFデザインパターン(1) | 日経 xTECH(クロステック)