Skip to content

Instantly share code, notes, and snippets.

@fijolekProjects
Last active August 29, 2015 14:08
Show Gist options
  • Save fijolekProjects/e4fefcbe21dca76110cc to your computer and use it in GitHub Desktop.
Save fijolekProjects/e4fefcbe21dca76110cc to your computer and use it in GitHub Desktop.

Programowanie obiektowe - z innej strony

W tym ćwiczeniu zajmiemy się tworzeniem sklepu z kosmetykami. Stwórz klasę Product, która będzie naszym wizażowym produktem. Jak na razie produkt będzie posiadał tylko nazwę, name: String.

case class Product(name: String)

Stwórz przykładowy produkt.

val myFavoriteProduct = Product("Super kosmetyk roku 2014")

Każdy produkt ma cenę, dodaj właśność price: Double do klasy Product i stwórz produkt z jakąś ceną. Uwaga: kiedy dodasz nową właśność do klasy, powyżej zdefiniowany myFavoriteProduct będzie błędny, dlatego że nie ma ceny tylko samą nazwę. Zastąp go tym:

val productWithPrice = Product("Super kosmetyk roku 2014", 1234.0d)

Cena 1234.0d ma literkę d na końcu, bo to jednoznacznie określa, że cena jest typu Double, a nie na przykład Float.

Do klasy Product dodaj metodę, która będzie określała czy produkt dużo kosztuje. Np. tak:

case class Product(name: String, ... inne wlasnosci ...) {
  def isExpensive(): Boolean = {
    przyjmijmy, ze jesli cena produktu jest wieksza niz 50 to produkt jest drogi
  }
}

Teraz stwórz produkt, który kosztuje mało oraz taki, który kosztuje dużo.

val expensiveProduct = Product("kosmetyk1", 124.4d)
val cheapProduct = Product("kosmetyk2", 10.3d)

Sprawdź czy powyższe produkty są drogie:

expensiveProduct.isExpensive()
cheapProduct.isExpensive()

Oprócz nazwy i ceny wizażowe produkty posiadają ocenę. Dodaj własność rating: Int do produktu. Kiedy już to zrobisz, zmień produkty na np. takie:

val expensiveProduct = Product("kosmetyk1", 124.4d, 10)
val cheapProduct = Product("kosmetyk2", 10.3d, 5)

Każdy produkt ma stosunek cena/jakość. Dodajmy metodę do produktu, która to wyliczy. Tzn :

case class Product(name: String, ... inne wlasnosci ...) {
  def calculatePriceRatingFactor(): Double = {
    wylicz stosunek cena/jakosc
  }
  ... inne metody ...
}

Teraz zobacz jaki stosunek cena/jakość mają Twoje produkty:

expensiveProduct.calculatePriceRatingFactor()
cheapProduct.calculatePriceRatingFactor()

Dodajmy teraz metodę do produktu, która zwróci nam bardziej opłacalny (ekonomiczny) produkt.

case class Product(name: String, ... inne wlasnosci ...) {
  def getMoreEconomical(otherProduct: Product): Product = {
    bardziej ekonomiczny produkt to taki, który ma lepszy stosunek cena/jakość
  }
  ... inne metody ...
}

Użycie:

expensiveProduct.getMoreEconomical(cheapProduct)

Zajmijmy się naszym wizażowym sklepem, który jak na razie będzie posiadał nazwę oraz wiele produktów, tzn:

case class Shop(name: String, products: List[Product])

Stwórz sklep:

val lipstick = Product("super szminka", 5.0d, 8)
val shampoo = Product("szampon dla bobasa", 11.0d, 7)
val toothpaste = Product("blend-a-med", 7.5d, 9)
val cosmetics = List(lipstick, shampoo, toothpaste)
val shopWithCosmetics = Shop("Rossmann", cosmetics)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment