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()
+
+