Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'org.jetbrains.kotlin.jvm' version '2.2.10'
id 'org.jetbrains.kotlin.jvm' version '2.0.21'
}

kotlin {
Expand Down
31 changes: 0 additions & 31 deletions src/main/kotlin/ru/otus/cars/Car.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package ru.otus.cars
package ru.otus.home_work5

import ru.otus.home_work5.carfacory.car.Car

abstract class VazPlatform(override val color: String) : Car {
// Положение руля. Доступно только внутри класса и наследникам
protected var wheelAngle: Int = 0 // Положение руля

// Реализация интерфейса CarInput
override fun wheelToRight(degrees: Int) { wheelAngle += degrees }
override fun wheelToRight(degrees: Int) {
wheelAngle += degrees
}

// Реализация интерфейса CarInput
override fun wheelToLeft(degrees: Int) { wheelAngle -= degrees }
override fun wheelToLeft(degrees: Int) {
wheelAngle -= degrees
}

// Получить оборудование
override fun getEquipment(): String = "Кузов, колеса, движок"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ru.otus.home_work5.carfacory.car

import ru.otus.home_work5.carfacory.tank_system.LpgMouth
import ru.otus.home_work5.carfacory.tank_system.PetrolMouth
import ru.otus.home_work5.carfacory.tank_system.TankMouth
import kotlin.random.Random.Default.nextInt

sealed class AbstractCarBuilder : CarBuilder {
protected fun getRandomTankMount(): TankMouth {
return when (nextInt(2)) {
0 -> PetrolMouth()
else -> LpgMouth()
}
}
}
48 changes: 48 additions & 0 deletions src/main/kotlin/ru/otus/home_work5/carfacory/car/Car.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package ru.otus.home_work5.carfacory.car

import ru.otus.home_work5.carfacory.tank_system.TankMouth

/**
* Машина целиком
*/
interface Car : CarInput {
/**
* Номерной знак
*/
val plates: Plates

/**
* Цвет машины
*/
val color: String

/**
* Следит за машиной
*/
val carOutput: CarOutput

/**
* Горловина авто для залива топлива
*/
val tankMouth: TankMouth

/**
* Получить оборудование
*/
fun getEquipment(): String

/**
* Внутренний статический класс - номерной знак
*/
data class Plates(
/**
* Регистрационный номер
*/
val number: String,

/**
* Код региона регистрации
*/
val region: Int
)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.otus.cars
package ru.otus.home_work5.carfacory.car

/**
* Сборщик машины
Expand All @@ -8,4 +8,5 @@ sealed interface CarBuilder {
* Собери машину
*/
fun build(plates: Car.Plates): Car
}
}

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.otus.cars
package ru.otus.home_work5.carfacory.car

/**
* Автозавод
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.otus.cars
package ru.otus.home_work5.carfacory.car

/**
* Рулит машиной
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package ru.otus.cars
package ru.otus.home_work5.carfacory.car

/**
* Следит за машиной
Expand All @@ -8,4 +8,9 @@ interface CarOutput {
* Скажи текущую скорость
*/
fun getCurrentSpeed(): Int

/**
* Остаток топлива
*/
fun getFuelReserve(): Int
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ru.otus.cars
package ru.otus.home_work5.carfacory.car

object Taz: Car {
import ru.otus.home_work5.carfacory.tank_system.TankMouth

object Taz : Car {
/**
* Номерной знак
*/
Expand All @@ -18,6 +20,9 @@ object Taz: Car {
override val carOutput: CarOutput
get() = throw NotImplementedError("Приборов нет")

override val tankMouth: TankMouth
get() = throw NotImplementedError("Взрыв топливной системы!")

/**
* Получить оборудование
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package ru.otus.cars
package ru.otus.home_work5.carfacory.car

import ru.otus.home_work5.VazEngine
import ru.otus.home_work5.VazPlatform
import ru.otus.home_work5.carfacory.tank_system.TankMouth
import kotlin.random.Random

/**
Expand All @@ -9,7 +12,7 @@ class Vaz2107 private constructor(color: String) : VazPlatform(color) {
/**
* Сам-себе-сборщик ВАЗ 2107.
*/
companion object : CarBuilder {
companion object : AbstractCarBuilder() {
private fun getRandomEngine(): VazEngine {
return when (Random.nextInt(0, 2)) {
0 -> VazEngine.LADA_2107(1300)
Expand All @@ -20,6 +23,7 @@ class Vaz2107 private constructor(color: String) : VazPlatform(color) {
override fun build(plates: Car.Plates): Vaz2107 = Vaz2107("Зеленый").apply {
this.engine = getRandomEngine()
this.plates = plates
this.tankMouth = getRandomTankMount()
}

/**
Expand All @@ -40,6 +44,8 @@ class Vaz2107 private constructor(color: String) : VazPlatform(color) {
override lateinit var engine: VazEngine
private set

override lateinit var tankMouth: TankMouth
private set
/**
* Семерка едет так
*/
Expand Down Expand Up @@ -74,5 +80,9 @@ class Vaz2107 private constructor(color: String) : VazPlatform(color) {
override fun getCurrentSpeed(): Int {
return this@Vaz2107.currentSpeed
}

override fun getFuelReserve(): Int {
return this@Vaz2107.tankMouth.tankFreeSpace()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package ru.otus.cars
package ru.otus.home_work5.carfacory.car

import ru.otus.home_work5.VazEngine
import ru.otus.home_work5.VazPlatform
import ru.otus.home_work5.carfacory.tank_system.TankMouth
import kotlin.random.Random

/**
Expand All @@ -9,7 +12,7 @@ class Vaz2108 private constructor(color: String) : VazPlatform(color) {
/**
* Сам-себе-сборщик ВАЗ 2108.
*/
companion object : CarBuilder {
companion object : AbstractCarBuilder() {
private fun getRandomEngine(): VazEngine {
return when (Random.nextInt(0, 3)) {
0 -> VazEngine.SAMARA_2108(1100)
Expand All @@ -21,6 +24,7 @@ class Vaz2108 private constructor(color: String) : VazPlatform(color) {
override fun build(plates: Car.Plates): Vaz2108 = Vaz2108("Красный").apply {
this.engine = getRandomEngine()
this.plates = plates
this.tankMouth = getRandomTankMount()
}

fun alignWheels(vaz2108: Vaz2108) {
Expand All @@ -37,6 +41,8 @@ class Vaz2108 private constructor(color: String) : VazPlatform(color) {
// Переопределяем свойство родителя
override lateinit var engine: VazEngine
private set
override lateinit var tankMouth: TankMouth
private set

/**
* Восьмерка едет так
Expand Down Expand Up @@ -78,5 +84,9 @@ class Vaz2108 private constructor(color: String) : VazPlatform(color) {
override fun getCurrentSpeed(): Int {
return this@Vaz2108.currentSpeed
}

override fun getFuelReserve(): Int {
return this@Vaz2108.tankMouth.tankFreeSpace()
}
}
}
33 changes: 33 additions & 0 deletions src/main/kotlin/ru/otus/home_work5/carfacory/tank_system/Tank.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ru.otus.home_work5.carfacory.tank_system

/**
* Интерфейс Tank представляет хранилище топлива с возможностью приема и отслеживания текущего уровня топлива.
*
* @author Yuriy Tilman
* @author GigaChat
*/
interface Tank {
/**
* Горловина резервуара, через которую производится прием топлива.
*/
val mouth: TankMouth

/**
* Возвращает текущее количество топлива в резервуаре.
*
* @return количество топлива в литрах
*/
fun getContents(): Int

/**
* @return вместимость бака
* */
fun getCapacity(): Int

/**
* Производит прием указанного количества топлива в резервуар.
*
* @param liters количество топлива, которое нужно добавить в резервуар
*/
fun receiveFuel(liters: Int)
}
Loading