日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

object范式与stream范式

Home Forums 《冒号课堂》讨论区 object范式与stream范式

  • This topic is empty.
Viewing 8 reply threads
  • Author
    Posts
    • #1080
      Todd
      Member

      SICP的第3章比较了object与stream两种范式,但很可惜《冒号课堂》里面没有把stream列为一个独立的范式进行讨论。

      http://mitpress.mit.edu/sicp/full-text/sicp/book/node50.html

    • #1267
      hui
      Keymaster

      object本身并不是编程范式,而object-oriented才是。类似地,stream本身不宜作为独立的编程范式(事实上在SCIP中,它如同object一样被当作一种data structure),相应的stream processing更适合作为一种计算模型(computational model),既可用于函数范式,也可用于并发范式。

      另请参见http://en.wikipedia.org/wiki/Stream_processing。

    • #1268
      Todd
      Member

      虽然stream processing不一定能作为一种范式,看了SICP的介绍我觉得它还是很具有代表性的一种模型。

    • #1269
      Todd
      Member

      今天我用C#的yield实现了一个无限流的Stack。Stack的输入是(operation, data)的流,输出是(data)流:

      class Stack{
      public static IEnumerable<int> Transform(IEnumerable<Command> aSourceStream){
      LinkedList<int> list = new LinkedList<int>();
      foreach(Command command in aSourceStream){
      if(OperationType.PUSH== command.Operation){
      list.AddLast(command.Data);
      }
      else if (OperationType.POP == command.Operation){
      int data = list.Last.Value;
      list.RemoveLast();
      yield return data;
      }
      }
      }
      }

    • #1270
      hui
      Keymaster

      C#、ruby、python等语言确可以利用yield来产生无穷序列,术语称协程(coroutine)。在合适的场合使用这一特性可以让代码更加简明、清晰。另外,这也可看作是函数式所倡导的惰性求值(lazy evaluation)的一种特殊情形。

    • #1271
      Todd
      Member

      最近发现,对象和流两种计算模型可以追溯到古希腊德谟克里特和赫拉克利特的哲学思想。前者提出了原子论,后者认为一切都是流。

    • #1272
      hui
      Keymaster

      很有趣的联想,不过德谟克里特的原子论主要体现的还是还原论思想。

    • #1273
      Todd
      Member

      不是我联想的,Booch的《Object-Oriented Analysis and Design》上面提到了两种分解方式:对象层级和过程层级,他认为这两种方式可以追溯到上面的两位哲学家的思想。但是,我觉得赫拉克利特的思想不仅包含过程分解,更体现了流的思想,比如他的名言“没有人可以两次踏进同一条河流”。

    • #1274
      hui
      Keymaster

      不错,赫拉克利特的一个核心观点是:一切皆流(everything flows)。

Viewing 8 reply threads
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)