Browse Source

уточнено задание, добавлены TODO

Ivan Petr 4 years ago
parent
commit
c6fcd65b63
7 changed files with 31 additions and 12 deletions
  1. 3 4
      .idea/workspace.xml
  2. 7 0
      src/Circle.kt
  3. 1 1
      src/Figure.kt
  4. 4 0
      src/Main.kt
  5. 6 3
      src/Rect.kt
  6. 5 0
      src/Square.kt
  7. 5 4
      src/Transforming.kt

+ 3 - 4
.idea/workspace.xml

@@ -2,12 +2,10 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="b9a6b32c-5578-4410-bafa-6b56507d845c" name="Default Changelist" comment="">
-      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/Circle.kt" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/Figure.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Figure.kt" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/src/Main.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Main.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/Movable.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Movable.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/Rect.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Rect.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/Transforming.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/Transforming.kt" afterDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
@@ -20,6 +18,7 @@
       <list>
         <option value="Kotlin File" />
         <option value="Kotlin Interface" />
+        <option value="Kotlin Class" />
       </list>
     </option>
   </component>

+ 7 - 0
src/Circle.kt

@@ -0,0 +1,7 @@
+// TODO: дополнить определение класса размерами и позицией
+class Circle : Figure(0) {
+    // TODO: реализовать интерфейс Transforming
+    override fun area(): Float {
+        return  0.toFloat();
+    }
+}

+ 1 - 1
src/Figure.kt

@@ -1,5 +1,5 @@
+// если хотя бы есть один метод абстрактный (без реализации), класс объявляется абстрактным
 abstract class Figure(val id: Int) {
     // мы не знаем площади абстрактной фигуры, но это не мешает нам определить метод
      abstract fun area(): Float
-
 }

+ 4 - 0
src/Main.kt

@@ -4,7 +4,11 @@ fun main() {
     val figures: Array<Movable>
     val movable: Movable = Rect(0,0,1,1)
     movable.move(1,1)
+    // переменной базового класса
     val f: Figure = Rect(0,0,1,1)
+    val f2: Figure = Circle()
+
     println(f.area())
+    println(f2.area())
 
 }

+ 6 - 3
src/Rect.kt

@@ -1,6 +1,9 @@
+// сочетание определения класса и конструктора одновременно объявляет переменные и задаёт их значения
 class Rect(var x: Int, var y: Int, val width: Int, val height: Int) : Movable, Figure(0) {
-    var color: Int = -1
-    lateinit var name: String // значение на момент определения неизвестно
+    // TODO: реализовать интерфейс Transforming
+    var color: Int = -1 // при объявлении каждое поле нужно инициализировать
+
+    lateinit var name: String // значение на момент определения неизвестно (только для объектных типов)
     // дополнительный конструктор вызывает основной
     constructor(rect: Rect) : this(rect.x, rect.y, rect.width, rect.height)
 
@@ -11,6 +14,6 @@ class Rect(var x: Int, var y: Int, val width: Int, val height: Int) : Movable, F
 
     // для каждого класса area() определяется по-своему
     override fun area(): Float {
-        return (width*height).toFloat()
+        return (width*height).toFloat() // требуется явное приведение к вещественному числу
     }
 }

+ 5 - 0
src/Square.kt

@@ -0,0 +1,5 @@
+// TODO: дополнить определение класса размерами и позицией
+class Square  {
+    // TODO: унаследовать от Figure, реализовать area()
+    // TODO: реализовать интерфейс Transforming
+}

+ 5 - 4
src/Transforming.kt

@@ -1,11 +1,12 @@
 interface Transforming {
-    fun resize(zoomX: Int, zoomY: Int)
-    // TODO: величивает фигуру, не перемещая
+    fun resize(zoom: Int)
+    // TODO: величивает фигуру, не перемещая, с сохранением пропорций
+
     fun rotate(direction: RotateDirection, centerX: Int, centerY: Int)
-    // TODO: величивает фигуру,
+    // TODO: поворот фигуры вокруг точки (centerX, centerY) на 90 градусов
 }
 
 enum class RotateDirection {
-    // направление вращения фигуры
+    // направление вращения фигуры на 90 градусов
     Clockwise, CounterClockwise
 }