Abstract in Kotlin


#1

سلام دوستان ببخشید میخواستم در مورد ابسترکت کلاس و متد ازتون راهنمایی بخوام
منطق ابسترکت به چه شکله؟ و یعنی تو کجا ها مورد استفاده قرار میگیره؟ یا اصلا چرا باید استفاده کنیم؟

چیزی که از این موضوع میدونم اینه:

وقتی مثلا سه تا کلاس داریم که یه کلاس اصلی و دو تا کلاس فرعی که از کلاس اصلی نشعت میگیره .(فرزند کلاس اصلی) و حالا اگه از کلاس اصلی شی نسازیم باید اونو به صورت ابسترکت در بیاریم :roll_eyes:
:face_with_monocle:


#2

Abstract class شی هست که نمیشه ازش شی بسازی و فقط برای بیان کردن متود های مشترک بین شی هایی که نشعت میگیرند هست
میشه به abstract class به عنوان چارچوب شی ها نگاه کرد
Abstraction برای گروه بندی ساختارها با یک ماهیت هستش

fun main(args: Array<String>) {
    work(Dog())
}

abstract class Animal {
  abstract fun move()
}

class Cat : Animal() {
  override fun move {
    print("cat jump")
  }
}

class Dog : Animal() {
  override fun move() {
    print("slow walk")
  }
}

fun work(a: Animal) {
  print(a.move())
}

function work اینجا بجای اینکه cat یا dog بگیره ارگمنت از تایپه Animal میگیره که یعنی هر کلاس که با چارچوب Animal تطبیق میکنه
(function move داره )

همین نکته ساده بسیار قدرت داره چون Animal یک تایپه کلی تره و کمک میکنه ساختار کد پیچیده رو بهتر بیان کنیم


#3

یک مورد هم من اضافه میکنم، و اونم اینه که abstract قابل extend کردن هست و هر کلسی که وارث abstract هست باید اجزا و متدهای abstract رو هم تعریف کنه مگر اینکه خودش هم یک abstract باشه، قسمت دوم میتونه گاهی باعث پیچیدگی غیر ضروری هم بشه.


#4

میشه درباره خود Abstraction هم بحث کنید؟
Abstraction basically hides the implementation of an object from the user
میدونم اینها چی هستن … اما اینکه این مفاهیم اگه توی OOP خوب پیاده سازی بشن . نمیتونن اندازه FP مشکلات و خطاها رو پوشش بدن و پیچیدگی رو کم کنن ؟

اگه موافق بودید یه تاپیک جدا باز کنید تا از نکات ارزنده تون استفاده کنیم


Abstractions OOP/FP