タグ

OOPに関するnsyeeのブックマーク (67)

  • Comonads are objects

    Haskell programmers popularized the use of monads to structure imperative computations, complete with syntactic sugar in the form of do notation. However, category theorists predict that there is also a completely symmetric concept called a "comonad", which tickles our fancy. After all, if monads are so intriguing, then perhaps comonads are equally intriguing, and who doesn't like twice the intrig

  • Institut für Pervasive Computing

  • Haskellでオブジェクト指向プログラミング - Qiita

    Lensを活用すれば、オブジェクト指向すら表現できる…これが、Haskellの力なのか… クラスはデータ型、メソッドはインスタンスの状態を変更するStateモナド、インスタンスはIORefに対応している。 {-# LANGUAGE TemplateHaskell, Rank2Types, ExistentialQuantification #-} import Control.Lens import Control.Applicative import Control.Monad.State import Control.Monad.IO.Class import Data.IORef infix 9 .- infix 9 .! data Vec2 = Vec2 Float Float deriving Show (&+) :: Vec2 -> Vec2 -> Vec2 Vec2 x0 y

    Haskellでオブジェクト指向プログラミング - Qiita
  • 存在しない記事 - 標高+1m

    ここにあった記事は消しました。 詳しくは以下: ympbyc.hatenablog.com

    存在しない記事 - 標高+1m
  • 私が愛するオブジェクト指向とそれを使わない理由 - takuto_hの日記

    この記事では、私がオブジェクト指向のどこを愛しどこを素晴らしいと感じていて、そのうえでなぜオブジェクト指向を使うことを避けているのかを書き留めておきます。関数型言語使いの方で、「オブジェクト指向の何がいいのかわからない」「オブジェクト指向難しすぎ・複雑すぎ」とおっしゃる方にぜひ読んでいただきたいと思っています。また、「オブジェクト指向言語完璧に理解したわ」と思っている方にも読んでいただきたく思います。 なお、ここでのオブジェクト指向の定義は、「各言語でオブジェクト指向と呼ばれているものすべて」とします。JavaScalaJavaScriptやSmalltalkやRubyやCommon LispやOCamlがオブジェクト指向と呼んでいるものすべての総称です。もっとまともな定義が知りたい方は以下の記事がおすすめです。 オブジェクト指向の概念の発明者は誰ですか?(改訂版) - Smallta

    私が愛するオブジェクト指向とそれを使わない理由 - takuto_hの日記
  • バカ向け言語 Scala - だらだらしてたいなぁ

    なぜScalaがバカ向けなのか。 ぼくの経験を元に、バカ向け言語と非バカ向け言語を比較しながら見て行きましょう 非バカ向け言語 C プログラマーとして最初に携わったのがC言語です。 それは以下のようなものでした。 何十ものファイルにまたがるグローバル変数 緻密な制御が必要であるにも関わらず、無秩序に取得/開放が行われているメモリー管理 このような複雑な構造を、ぼくのようなポケコン並の処理能力しか持たないバカに把握可能でしょうか。もちろん不可能です そこで、次のようなコーディングを心がけました。 グローバル変数を使わず、関数に引数を定義して渡す メモリーの取得/解放を同一ファイル内に限定する これで、メモリーや変数参照の影響範囲を限定し、ぼくのようなバカでも理解できるようになります。 ですが、わざわざそんな事をやらなくても全てを理解できるエリート様達は、 「なぜ引数で渡すんだ。グローバル変数

    バカ向け言語 Scala - だらだらしてたいなぁ
  • [Scala] getter / setter

    とりあえずいろいろ書いてみる。 Scala や タートルグラフィックス言語のドリトル、Google App Engine、Blogger などについてのメモ書きがメイン。 Scala ではメンバ変数の定義や初期化を簡単に記述することができる。 object PropSample { def main(args: Array[String]) : Unit = { val d : Data = new Data(100); println(d.value); d.value = 200; println(d.value); } } class Data(var value : Int)100 200 クラス定義はこの一行で、public なメンバ変数 x の定義( Scala では、可視性修飾子がない場合は public )と、コンストラクターによる初期化が自動的に定義されている。 この時、

  • LaTeXでオブジェクト指向プログラミング - 貳佰伍拾陸夜日記

    LaTeXのコマンドは複数の単語のものも一続きにしないと一つのシンボルと見なしてもらえないのが不便だったので, 名前空間が使えるというか, 記号で区切った後にサブコマンドを続ける書き方をサポートするものを作っていた. そうしたらいつの間にかオブジェクト指向プログラミングフレームワークが出来上がっていた. 例 ※これはLaTeXのコードです. \usepackage{object} \def\myclass#1{ % クラス定義(というかコンストラクタ) \def#1{} \object::field#1{foo} \object::method#1put(arg) { \par [\this.foo] and [\arg] } \object::method#1plus(lhs, rhs) { \par (\this.foo) $\lhs+\rhs$ } } \myclass\obj \m

    LaTeXでオブジェクト指向プログラミング - 貳佰伍拾陸夜日記
  • Scalaに関して知っておくべきたった一つの重要な事 - kmizuの日記

    タイトルは釣りです。先日、大昔に見た懐かしい記事が翻訳されていました。この記事自体ははっきり言って、ScalaはOCamlではないということを言葉を変えて延々と言ってるだけなので、どーでもいいです。3年も前の英語記事がTwitter上で今更注目された事に驚きです。 さて、題に入りましょう。元記事の言っている事はおいておいて、Scalaの核言語は(若干風変わりな)クラスベースのオブジェクトシステムであるという事は、頭の片隅においておくと良いと思います。Scalaの関数型プログラミングサポートの多くは、関数型言語に見られる機能をオブジェクト指向的に再解釈して取り込んだものであり、中心にあるのはあくまでオブジェクトです。 (追記) 核言語(core language)という言葉に馴染みが無い方も居ると思うので、説明を追加します。核言語という考え方は、プログラミング言語を、まさにその核である核言

    Scalaに関して知っておくべきたった一つの重要な事 - kmizuの日記
  • How CoffeScript classes work - Islands in the byte stream (legacy)

    CoffeeScriptのクラス機構はどんなものか調べた記録。コード量は少ないが洗練されており効率も良いようだ。 http://coffeescript.org/#classes さて、元のcoffeeスクリプトは単にクラスとサブクラスの定義をするだけのもの。 #!/usr/bin/env coffee class Animal constructor: (@name) -> console.log "constructor of Animal" move: (meters) -> console.log "Animal#move" class Snake extends Animal constructor: (@name) -> super @name console.log "constructor of Snake" move: -> console.log "Snake#move

    How CoffeScript classes work - Islands in the byte stream (legacy)
  • SuperColliderのクラスメモ - sc3onlinuxの日記

    単なるメモ 特に難しいことはないかと クラスファイル側 /* 0. はじめに */ MyClassPre{ } /* 1. 変数 */ /* 変数の宣言はいつもどおりvar <でゲッター、ゲッターはオブジェクトの外側から変数の値を取得できるようにする >でセッター、セッターはオブジェクトの外側から変数の値を設定できるようにする */ MyClassVar { var <>x; var y; } /* 2. メソッド */ MyClassMethod { var <>x; /* *付きでクラスメソッド クラスメソッドとは、インスタンスを生成しなくても直接クラスから呼び出せるメソッド */ *new{ ^super.new //ここでのsuperはobject。help->class browserのsuperボタンを押してもわかる } /* *なしでインスタンスメソッド インスタンスメソッド

    SuperColliderのクラスメモ - sc3onlinuxの日記
  • オブジェクト指向から理解する型クラス - think and error

    Haskell Advent Calendar2011 2日目です。 もう42時になってしまいました...さすがに遅いですね。 Haskellと言えば型クラス オブジェクト指向のクラスとHaskellの型クラスは違いますよ的な説明は見ますがどう違うか比べた情報が無い オブジェクト指向知っている人からの理解を簡単にすればHaskell理解する人が増えますね! という目論見の元にスライドを作りましたが、ユーザ視点が足りずに混乱させてしまったかも知れません。 Programming haskell chapter10 View more presentations from Ruicc Rail Haskell Advent Calendar明日はid:melponさんです。

    オブジェクト指向から理解する型クラス - think and error
  • https://enactjs.com/

  • オブジェクト指向とは何か、何が良いのか - www.kotha.netの裏

    Haskellはオブジェクト指向言語ではないが、コードを書く上でオブジェクト指向の考え方を利用するのが便利なこともあると思うので紹介する。 オブジェクト指向とは何か オブジェクト指向という言葉に共通定義がないのは共通認識だと思う。気をつけないと議論が発散しがちなので、この記事ではオブジェクト指向の理念については扱わず、オブジェクト指向プログラミングで用いられるテクニックと、オブジェクト指向言語が提供する言語機能について専ら話題にする。オブジェクト指向の特徴として良く言われるのは次のようなものだと思う。 多態 インタフェースが同じだが異なる振る舞いをする異なる種類のオブジェクトを一つのコードで扱う機能。Haskellでは「オブジェクトを操作する関数一式」を受け渡しすることで簡単に実現できる。型クラスを使っても良い。 隠蔽 インタフェースと実装を分離し、実装を外部から見えないようにする。Has

    オブジェクト指向とは何か、何が良いのか - www.kotha.netの裏
  • 大人のためのブラックボックス読解講座――クロージャとオブジェクトの微妙な関係

    はじめに 2006年8月、Javaの次期仕様(JDK7)にクロージャを入れる案*が出され話題になりました。クロージャは関数型言語では30年以上の歴史を持ち、プログラミングにおける基的な道具となっています。最近はPerlRubyPythonなどの軽量言語(Lightweight Language)にも取り込まれ、それと知らずに使っているユーザーも増えているのではないでしょうか。 一方、手続き型言語の世界では、完全なクロージャはなじみが薄いようです。C言語からC++へと発展してきた手続き型言語のメインストリームでは、 ガーベジコレクションを持たず、ローカル変数をスタックに置くことを基とする言語のため、クロージャとの相性が悪かった オブジェクト指向を採り入れることでクロージャの代用とできた といったことが理由でしょう。 実際、クロージャとオブジェクト指向プログラミング言語には、メカニズム

    大人のためのブラックボックス読解講座――クロージャとオブジェクトの微妙な関係
  • JavaScript-style object literals in PHP

    var fido = {}; fido.name = "Fido"; fido.barks = true;

    JavaScript-style object literals in PHP
  • Declarative Models in CoffeeScript

    Declarative Models in CoffeeScript _ _ _ ___ _ _ _ _ /_\ | |_ __ ___ __| |_ / _ \| |__ ___ ___| |___| |_ ___ _ _ ___| |_ / _ \| | ' \/ _ (_-< _| (_) | '_ (_-</ _ \ / -_) _/ -_)_| ' \/ -_) _| /_/ \_\_|_|_|_\___/__/\__|\___/|_.__/__/\___/_\___|\__\___(_)_||_\___|\__| In Glorious ASCII-VISION Summary: I've come across a nice way of using CoffeeScript class syntax to make declarative models, examples

  • Island Life - 言語の比較

    About 南の島のプログラマ。 たまに役者。 Practical Schemeの主。 WiLiKi:Shiro 最近のエントリ 無限cxr高校受験Defense振り返ってみると2019年は色々学んで楽...覚えるより忘れる方が難しい(こともある)眼鏡のつると3DプリンタIris Klein Acting ClassSAG-AFTRA conservatory: Voice Acting創作活動って自分を晒け出さねばならないと...ループを使わずに1から100までMore... 最近のコメント shiro on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/14)1357 on 歳を取ると時間が速く過ぎるのは、新しいことに挑戦しないから? (2023/03/01)ベアトリーチェ on ハイポハイポハイポのシューリンガン (2022/04/02)ベアトリーチ

    Island Life - 言語の比較
  • プログラムの理論とはなにか - きしだのHatena

    プログラムには、手続きを記述するという側面と、式を記述するという2つの側面があります。 そして、それぞれの基礎理論としては、チューリングマシンとラムダ計算があるので、プログラムの理論としては、この2系統を勉強する必要があると思います。 ラムダ計算というのは、式によってどのような計算ができるかという理論です。式による条件分岐はそれほど難しくなく、Yコンビネータなどの不動点定理で、式によって繰り返し処理が行えるということが証明されたので、どのような計算でもできるということになっています。 チューリングマシンの理論とは、どのような手続きがどのような性質をもつかという理論です。プログラムの性質というのは、ある出力を行うプログラムが、入力に対してどのように時間がかかるか、どのようにメモリを使うかというものです。そしてこれがアルゴリズムの理論になります。 ところで、ぼくはブログで「アルゴリズムを勉強す

    プログラムの理論とはなにか - きしだのHatena
  • http://blog.ezyang.com/2010/05/design-patterns-in-haskel/