view chapter10/Element_main.scala @ 0:b316eec6fa7a draft default tip

add sample files
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 08 Jan 2013 16:41:46 +0900
parents
children
line wrap: on
line source

import Element.elem

abstract class Element {
    def contents: Array[String]
    val height: Int = contents.length
    val width: Int = contents.length
	if (height == 0) 0 else contents(0).length
    def demo() {
	println("Element's implementation invoked")
    }
    def above(that: Element): Element = 
	elem(this.contents ++ that.contents)
    def beside(that: Element): Element = {
	elem (
	    for (
		(line1, line2) <- this.contents zip that.contents
	    ) yield line1 + line2
	)
    }
    override def toString = contents mkString "\n"
}



class ArrayElement(conts: Array[String]) extends Element {
    def contents: Array[String] = conts
    final override def demo() {
	println("ArrayElement's implementation invoked")
    }
}

class LineElement(s: String) extends ArrayElement(Array(s)) {
    override def width = s.length
    override def height = 1
    override def main() {
	println("LineElement's implementation invoked")
    }
}

/*
 class LineElement(s: String) extends Element {
 val contents = Array(s)
 override def width = s.length
 override def height = 1
 }
 */

class Cat {
    val dengerous = false
}

class Tiger {
    override val dangerous: Boolean,
    private var age: Int
} extends Cat

class Tiger(param1: Boolean, param2: Int) extends Cat {
    override val dengerous = param1
    private var age = param2
}

class UniformElement {
    ch: Char,
    override val width: Int,
    override val height
} extends Element {
    private val line = ch.toString * width
    def contents = Array.make(height, line)
}

def invokeDemo(e: Element) {
    e.demo()
}


def main() {
    val ae = new ArrayElement(Array("hello", "world"))
    println(ae.width)
    val e: Element = new ArrayElement(Array("hello"))
    println(e.width)

    val e1: Element = new ArrayElement(Array("hello", "world"))
    val ae: ArrayElement = new LienElement("hello")
    val e2: Element = ae
    val e3: Element= new UniformElement(Element('x', 2, 3))
}

main()