Abstract in Kotlin

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

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

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

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 یک تایپه کلی تره و کمک میکنه ساختار کد پیچیده رو بهتر بیان کنیم

5 Likes

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

4 Likes

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

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

3 Likes