Esempi sulla ereditarietà

This commit is contained in:
Fabio Scotto di Santolo
2019-11-09 15:43:51 +01:00
parent 9d83898dcc
commit e3396ac17e

View File

@@ -1,11 +1,17 @@
package org.gym.fp package org.gym.fp
import java.io.File
import java.nio.CharBuffer
import scala.collection._
object App { object App {
def main(args: Array[String]): Unit = { def main(args: Array[String]): Unit = {
doOperationsOnTuples() doOperationsOnTuples()
doHighOrderFunctions() doHighOrderFunctions()
doPatternMatching() doPatternMatching()
doInheritance()
} }
def doOperationsOnTuples(): Unit = { def doOperationsOnTuples(): Unit = {
@@ -81,7 +87,9 @@ object App {
} }
val domainName = "www.example.com" val domainName = "www.example.com"
def getURL = urlBuilder(ssl = true, domainName) def getURL = urlBuilder(ssl = true, domainName)
val endpoint = "users" val endpoint = "users"
val query = "id=1" val query = "id=1"
val url = getURL(endpoint, query) val url = getURL(endpoint, query)
@@ -136,4 +144,72 @@ object App {
} }
def doInheritance(): Unit = {
class Customer(val name: String, val address: String) extends Ordered[Customer] {
val total: Double = 0.0
override def compare(that: Customer): Int = this.name.compareTo(that.name)
override def toString: String = s"$name is located at $address"
}
class DiscountedCustomer(name: String, address: String) extends Customer(name, address)
trait Readable {
def read(buffer: CharBuffer): Int
}
class FileReader(file: File) extends Readable with AutoCloseable {
override def read(buffer: CharBuffer): Int = {
val linesRead: Int = 0
return linesRead
}
override def close(): Unit = ???
}
trait Sortable[A <: Ordered[A]] extends Iterable[A] {
def sort: Seq[A] = {
this.toList.sorted
}
}
class Customers extends Sortable[Customer] {
private val customers = mutable.Set[Customer]()
def add(customer: Customer) = customers.add(customer)
override def iterator: Iterator[Customer] = customers.iterator
}
class CustomersSortableBySpend extends Customers {
override def sort: Seq[Customer] = {
this.toList.sorted((a: Customer, b: Customer) => b.total.compare(a.total))
}
}
val customers = new Customers()
customers.add(new Customer("Fred Jones", "8 Tuna Lane"))
customers.add(new Customer("Velma Dinkley", "316 Circle Drive"))
customers.add(new Customer("Daphne Blake", "101 Easy St"))
customers.add(new Customer("Norville Rogers", "1 Lane"))
println(customers.sort)
trait Counter {
protected var count: Int // abstract field
def increment()
}
class IncrementByOne extends Counter {
override protected var count: Int = 0
override def increment(): Unit = count += 1
}
class ExponentialIncrementer(rate: Int) extends Counter {
override protected var count: Int = 1
override def increment(): Unit = count *= rate
}
}
} }