среда, 7 февраля 2018 г.

Swift 18. Inheritance

В 18 уроке рассмотрена тема наследования классов
Домашнее задание:

/*
 1. Создайте базовый класс артист с "именем", "фамилией" и методом "выступление". У каждого дочернего класса свой метод "выступление" (актер - играет, клоун - развлекает, танцор - танцует), включающее в себя представление участника, в каком жанре выступление и действие (можно просто вывод строки). Создайте дочерний класс "художник", который не хочет, чтобы его называли вы и всегда ставит другое имя, когда вы пытаетесь его назвать. Положить все экземпляры в один массив и пройдясь по нему вызвать у всех выступление.

 2. Базовый класс - "транспортное средство"; свойства - скорость, вместимость, стоимость одной перевозки (все computed properties). Несколько дочерних классов (самолет, корабль, вертолет, машина, поезд) с переопределенными свойствами (для каждого своя скорость вместимость и стоимость). Создать по одному объекту каждому дочернему классу. У всех есть метод, который что-то расчитывает (скорость, расстояние, количество пассажиров), конкретно сколько уйдет денег и времени, чтобы перевести определенное количество человек из пункта А в пункт В. При перевозке 100 и 1000 человек ответить на следующие вопросы:
 -Как быстро мы сможем это сделать и каким транспортом?
 -Стоимость всех перевозок и количество?
 -Какой транспорт быстрее справится и какой более выгодный?

 */

import Foundation
import CoreGraphics

class Artist {
    var firstName: String
    var lastName: String
    init(firstName: String, lastName: String) {
        self.firstName = firstName
        self.lastName = lastName
    }
    func Show() -> String {
        return "\(firstName) \(lastName) Show:"
    }
}

class Actor: Artist {
    override func Show() -> String {
        return super.Show() + " actor's game"
    }
}

class Clown: Artist {
    override func Show() -> String {
        return super.Show() + " сlown`s joke"
    }
}
class Dancer: Artist {
    override func Show() -> String {
        return super.Show() + " breakdancing"
    }
}
class Painter: Artist {
    override var firstName: String {
        get {
            return String(super.firstName.reversed())
        }
        set {
            super.firstName = newValue
        }
        
    }
    override func Show() -> String {
        return super.Show() + " drawing picture"
    }
    
}

let array: [Artist] = [
    Dancer(firstName: "Dan", lastName: "Cer"),
    Clown(firstName: "Clo", lastName: "Wn"),
    Painter(firstName: "Paint", lastName: "Er"),
    Actor(firstName: "Act", lastName: "Or")
]

for artist in array {
    print(artist.Show())
}

/*
 2
 */
print("\nN 2\n")

class Transport {
    var name: String {
        return ""
    }
    var speed: Double {
        return 0
    }
    var capacity: Int {
        return 0
    }
    var price: Double {
        return 0
    }
    func calculatePriceAndTimeAndCountTrips(distance: Double, passengers: Int) -> (Double, Double, Int) {
        if speed <= 0 || capacity <= 0 || price <= 0 {
            return (0, 0, 0)
        }
        let oneTripTime = distance / speed
        let countTrip = ceil (Double(passengers) / Double(capacity))
        return (price * distance * countTrip, oneTripTime * countTrip, Int(countTrip))
        
    }
}

class Car: Transport {
    
    override var name: String {
        return "Car"
    }
    override var speed: Double {
        return 60
    }
    override var capacity: Int {
        return 5
    }
    override var price: Double {
        return 10
    }
}

class Fly: Transport {
    
    override var name: String {
        return "Fly"
    }
    override var speed: Double {
        return 750
    }
    override var capacity: Int {
        return 500
    }
    override var price: Double {
        return 200
    }
}

class Ship: Transport {
    override var name: String {
        return "Ship"
    }
    override var speed: Double {
        return 40
    }
    override var capacity: Int {
        return 500
    }
    override var price: Double {
        return 50
    }
}

let arrayTransport: [Transport] = [Car(), Fly(), Ship()]
func showTransport(distance: Double, passengers: Int) {
    print("Show Transport for Distance: \(distance) and Passengers: \(passengers)")
    var minPriceTransport = arrayTransport.first!
    var (minPrice, minTime, _) = minPriceTransport.calculatePriceAndTimeAndCountTrips(distance: distance, passengers: passengers)
    var minTimeTransport = arrayTransport.first!
    
    for transport in arrayTransport {
        let (price, time, count) = transport.calculatePriceAndTimeAndCountTrips(distance: distance, passengers: passengers)
        print("Transport type: \(transport.name). Distance: \(distance). Passengers: \(passengers). Price: \(price). Time: \(time). Count Trips: \(count)")
        if minTime > time {
            minTimeTransport = transport
            minTime = time
        }
        if minPrice > price {
            minPriceTransport = transport
            minPrice = price
        }
    }
    print("Minimum Price Transport: \(minPriceTransport.name). Price: \(minPrice)\n Minimum Time Transpoert: \(minTimeTransport.name). Time: \(minTime)")
    
}
showTransport(distance: 1000, passengers: 100)
showTransport(distance: 1000, passengers: 1000)


Console 

Dan Cer Show: breakdancing
Clo Wn Show: сlown`s joke
tniaP Er Show: drawing picture
Act Or Show: actor's game

N 2

Show Transport for Distance: 1000.0 and Passengers: 100
Transport type: Car. Distance: 1000.0. Passengers: 100. Price: 200000.0. Time: 333.333333333333. Count Trips: 20
Transport type: Fly. Distance: 1000.0. Passengers: 100. Price: 200000.0. Time: 1.33333333333333. Count Trips: 1
Transport type: Ship. Distance: 1000.0. Passengers: 100. Price: 50000.0. Time: 25.0. Count Trips: 1
Minimum Price Transport: Ship. Price: 50000.0
 Minimum Time Transpoert: Fly. Time: 1.33333333333333
Show Transport for Distance: 1000.0 and Passengers: 1000
Transport type: Car. Distance: 1000.0. Passengers: 1000. Price: 2000000.0. Time: 3333.33333333333. Count Trips: 200
Transport type: Fly. Distance: 1000.0. Passengers: 1000. Price: 400000.0. Time: 2.66666666666667. Count Trips: 2
Transport type: Ship. Distance: 1000.0. Passengers: 1000. Price: 100000.0. Time: 50.0. Count Trips: 2
Minimum Price Transport: Ship. Price: 100000.0
 Minimum Time Transpoert: Fly. Time: 2.66666666666667



Комментариев нет:

Отправить комментарий