Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #34460

Re: Object oriented programming

Newsgroups comp.lang.javascript
Date 2018-01-05 11:51 -0800
References <3c2333ff-00fe-4087-ab49-f52d0546b29b@googlegroups.com>
Message-ID <9408a4ea-8633-46dd-bc42-43da13cafb87@googlegroups.com> (permalink)
Subject Re: Object oriented programming
From "Michael Haufe (TNO)" <tno@thenewobjective.com>

Show all headers | View raw


On Friday, January 5, 2018 at 12:25:50 PM UTC-6, Jonas Thörnvall wrote:
> If one where to buy a single book, that covers most aspects of object oriented programming from scratch "using Javascript".
> 
> Which book to buy.
> 
> I can see the use of object oriented programming. 
> For example i think i would like a midi track object, but how do you set boundaries for an object. For example that tracks can not use same channel and same out port? As i understand it an object have methods for its variables/"attributes?".
> 
> But rules for how they can be instantiated, can object oriended programming also handle such. Because that seem almost AI like, so i guess some external mechanism must check so the objects attributes do not collide?


I would say, drop the requirement of it being in JavaScript.

Perhaps the best beginners book on the feeling of OOP is: "A little Java, A Few Patterns" by Felleisen and Friedman.

<https://www.amazon.com/Little-Java-Few-Patterns-Press-ebook/dp/B004GCK2MO/ref=sr_1_1?ie=UTF8&qid=1515180547&sr=8-1&keywords=A+little+Java%2C+a+few+patterns>

It's also less than 200 pages in length. 

Afterwards, follow the style of that book and try to write some basic data structures and algorithms in it. 

An example of the feel:

<script>
abstract class List<T>  {
    abstract append(value: T): List<T>
    abstract concat(list: List<T>): List<T>
    abstract length(): number
    abstract isEmpty(): boolean
    abstract toString(): string
    //etc
}
class Nil<T> extends List<T> {
    append(value: T): List<T> { return new Cons(value, this); }
    concat(list: List<T>): List<T> { return list.isEmpty() ? this : list }
    length(): number { return 0 }
    isEmpty(): boolean { return true }
    toString(): string { return "[]" }
 }
class Cons<T> {
    constructor(readonly head: T, readonly tail: List<T>) { }
    append(value: T): List<T> { return new Cons(this.head, this.tail.append(value)) }
    concat(list: List<T>): List<T> {
        return list.isEmpty() ? this : new Cons(this.head,this.tail.concat(list))
    }
    length(): number { return 1 + this.tail.length() }
    isEmpty(): boolean { return false }
    toString(): string { return `${this.head}::${this.tail}` }
}

var xs: List<number> = new Cons(1, new Cons(2, new Cons(3, new Nil())))
var ys: List<number> = new Nil().append(4).append(5).append(6)
var zs: List<number> = xs.concat(ys)

console.log(zs.toString()) // 1::2::3::4::5::6::[]
</script>

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-05 10:25 -0800
  Re: Object oriented programming "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2018-01-05 11:51 -0800
    Re: Object oriented programming Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-01-05 23:47 +0100
      Re: Object oriented programming "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2018-01-05 15:15 -0800
        Re: Object oriented programming Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-01-08 03:08 +0100
    Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-05 15:09 -0800
      Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-05 15:21 -0800
        Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-05 15:27 -0800
  Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-05 12:09 -0800
    Re: Object oriented programming "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2018-01-05 13:01 -0800
      Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-05 14:38 -0800
        Re: Object oriented programming "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2018-01-05 15:29 -0800
          Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-05 15:49 -0800
            Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 02:23 -0800
              Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-06 03:25 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 03:39 -0800
                Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-06 04:24 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 05:26 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 05:28 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 05:34 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 06:08 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 06:27 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 06:36 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 07:34 -0800
                Re: Object oriented programming "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2018-01-06 09:56 -0800
                Re: Object oriented programming John G Harris <niam@jghnorth.org.uk.invalid> - 2018-01-06 14:21 +0000
                Re: Object oriented programming Ben Bacarisse <ben.usenet@bsb.me.uk> - 2018-01-06 17:42 +0000
                Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-06 11:47 -0800
                Re: Object oriented programming "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-01-06 22:11 +0100
                Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-06 13:28 -0800
                Re: Object oriented programming "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-01-07 12:40 +0100
                Re: Object oriented programming "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2018-01-07 13:01 +0100
                Re: Object oriented programming "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-01-07 19:43 +0100
                Re: Object oriented programming "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2018-01-07 20:33 +0100
                Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-07 08:30 -0800
                Re: Object oriented programming John G Harris <niam@jghnorth.org.uk.invalid> - 2018-01-07 14:05 +0000
                Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-07 08:33 -0800
                Re: Object oriented programming John G Harris <niam@jghnorth.org.uk.invalid> - 2018-01-08 09:46 +0000
                Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-08 03:45 -0800
              Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-06 03:39 -0800
                Re: Object oriented programming Julio Di Egidio <julio@diegidio.name> - 2018-01-06 04:24 -0800
              Re: Object oriented programming bit-naughty@hotmail.com - 2018-01-12 22:57 -0800
                Re: Object oriented programming John G Harris <niam@jghnorth.org.uk.invalid> - 2018-01-13 13:27 +0000
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-13 08:24 -0800
      Re: Object oriented programming John G Harris <niam@jghnorth.org.uk.invalid> - 2018-01-06 14:10 +0000
        Re: Object oriented programming "Michael Haufe (TNO)" <tno@thenewobjective.com> - 2018-01-06 23:54 -0800
          Re: Object oriented programming John G Harris <niam@jghnorth.org.uk.invalid> - 2018-01-07 14:13 +0000
            Re: Object oriented programming "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-01-07 15:26 +0100
              Re: Object oriented programming John G Harris <niam@jghnorth.org.uk.invalid> - 2018-01-08 09:39 +0000
                Re: Object oriented programming "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-01-09 00:12 +0100
                Re: Object oriented programming Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-01-09 02:45 +0100
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-08 21:34 -0800
                Re: Object oriented programming Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-01-09 12:52 +0100
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-09 04:41 -0800
                Re: Object oriented programming Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2018-01-09 15:50 +0100
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-09 07:31 -0800
                Re: Object oriented programming "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-01-10 15:03 -0800
                Re: Object oriented programming "Chris M. Thomasson" <invalid_chris_thomasson@invalid.invalid> - 2018-01-10 15:04 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-11 02:06 -0800
                Re: Object oriented programming Jonas Thörnvall <jonas.thornvall@gmail.com> - 2018-01-09 09:50 -0800
                Re: Object oriented programming "Christoph M. Becker" <cmbecker69@arcor.de> - 2018-01-09 13:19 +0100

csiph-web