Mercurial > hg > Members > nobuyasu > scala
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/chapter10/Element_main.scala Tue Jan 08 16:41:46 2013 +0900 @@ -0,0 +1,90 @@ +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() + +