Код IT
← Каталог

Объектно-ориентированное программирование в Swift — Абстрактные классы и методы

Фрагмент из «Объектно-ориентированное программирование в Swift»: Абстрактные классы и методы.

Plain text main.swift
protocol ShapeProtocol {
    func area() -> Double
    func perimeter() -> Double
    func draw()
}

class AbstractShape {
    func area() -> Double {
        fatalError("Метод area() должен быть переопределен")
    }
    
    func perimeter() -> Double {
        fatalError("Метод perimeter() должен быть переопределен")
    }
    
    func draw() {
        fatalError("Метод draw() должен быть переопределен")
    }
}

class Rectangle: AbstractShape {
    var width: Double
    var height: Double
    
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }
    
    override func area() -> Double {
        return width * height
    }
    
    override func perimeter() -> Double {
        return 2 * (width + height)
    }
    
    override func draw() {
        print("Рисование прямоугольника \(width)x\(height)")
    }
}

class Ellipse: AbstractShape {
    var radiusX: Double
    var radiusY: Double
    
    init(radiusX: Double, radiusY: Double) {
        self.radiusX = radiusX
        self.radiusY = radiusY
    }
    
    override func area() -> Double {
        return Double.pi * radiusX * radiusY
    }
    
    override func perimeter() -> Double {
        return 2 * Double.pi * sqrt((radiusX * radiusX + radiusY * radiusY) / 2)
    }
    
    override func draw() {
        print("Рисование эллипса с радиусами \(radiusX) и \(radiusY)")
    }
}
protocol ShapeProtocol {
    func area() -> Double
    func perimeter() -> Double
    func draw()
}

class AbstractShape {
    func area() -> Double {
        fatalError("Метод area() должен быть переопределен")
    }
    
    func perimeter() -> Double {
        fatalError("Метод perimeter() должен быть переопределен")
    }
    
    func draw() {
        fatalError("Метод draw() должен быть переопределен")
    }
}

class Rectangle: AbstractShape {
    var width: Double
    var height: Double
    
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }
    
    override func area() -> Double {
        return width * height
    }
    
    override func perimeter() -> Double {
        return 2 * (width + height)
    }
    
    override func draw() {
        print("Рисование прямоугольника \(width)x\(height)")
    }
}

class Ellipse: AbstractShape {
    var radiusX: Double
    var radiusY: Double
    
    init(radiusX: Double, radiusY: Double) {
        self.radiusX = radiusX
        self.radiusY = radiusY
    }
    
    override func area() -> Double {
        return Double.pi * radiusX * radiusY
    }
    
    override func perimeter() -> Double {
        return 2 * Double.pi * sqrt((radiusX * radiusX + radiusY * radiusY) / 2)
    }
    
    override func draw() {
        print("Рисование эллипса с радиусами \(radiusX) и \(radiusY)")
    }
}