جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]

اطلاعات شخصی شما برای پردازش سفارش شما استفاده می‌شود، و پشتیبانی از تجربه شما در این وبسایت، و برای اهداف دیگری که در سیاست حفظ حریم خصوصی توضیح داده شده است.

ارسال مجدد کد یکبار مصرف (00:60)
  • 02171058559
  • info@amooznegar.com
  • علاقمندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > کاربرد اصول SOLID در طراحی برنامه‌نویسی اندروید

کاربرد اصول SOLID در طراحی برنامه‌نویسی اندروید

1401-01-20
ارسال شده توسط آموزنگار
اندروید
اصول solid در کاتلین

اصول SOLID مجموعه‌ای از پنج اصل طراحی شی‌گرا هستند که به بهبود کیفیت کد، کاهش پیچیدگی و افزایش قابلیت نگهداری کمک می‌کنند. در برنامه‌نویسی اندروید، این اصول باعث می‌شوند کد تمیزتر، قابل تست‌تر و منعطف‌تر باشد، به طوری که توسعه‌دهندگان بتوانند راحت‌تر آن را تغییر دهند یا گسترش دهند.

با رعایت این اصول:

  • کدها خواناتر و درک آن‌ها ساده‌تر خواهند بود.
  • وابستگی‌های بین کلاس‌ها کاهش می‌یابد.
  • قابلیت تست‌پذیری افزایش می‌یابد.
  • توسعه و نگهداری کد آسان‌تر خواهد شد.

تعریف هر یک از اصول SOLID با مثال کد

1. اصل تک مسئولیتی (Single Responsibility Principle – SRP)

هر کلاس باید فقط یک دلیل برای تغییر داشته باشد، یعنی تنها یک مسئولیت مشخص را بر عهده داشته باشد.

class FileManager {
    fun saveFile(fileName: String, content: String) {
        // ذخیره محتوا در فایل
    }
}

class Logger {
    fun log(message: String) {
        // ثبت لاگ در سیستم
    }
}

در اینجا، مدیریت فایل و ثبت لاگ از هم جدا شده‌اند تا هر کلاس فقط یک مسئولیت داشته باشد.

2. اصل باز-بسته (Open/Closed Principle – OCP)

کلاس‌ها باید برای توسعه باز و برای تغییر بسته باشند. به این معنا که باید بتوان عملکرد جدیدی را بدون تغییر در کد موجود اضافه کرد.

abstract class Payment {
    abstract fun pay(amount: Double)
}

class CreditCardPayment : Payment() {
    override fun pay(amount: Double) {
        println("پرداخت از طریق کارت اعتباری: $amount")
    }
}

class PayPalPayment : Payment() {
    override fun pay(amount: Double) {
        println("پرداخت از طریق PayPal: $amount")
    }
}

در اینجا، برای اضافه کردن روش پرداخت جدید، فقط یک کلاس جدید ایجاد می‌شود و نیازی به تغییر کلاس‌های موجود نیست.

3. اصل جایگزینی لیسکوف (Liskov Substitution Principle – LSP)

آموزش Dagger Hilt – راهنمای گام به گام
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

هر کلاس فرزند باید بتواند بدون تغییر در رفتار برنامه، جایگزین کلاس والد شود.

open class Bird {
    open fun fly() {
        println("پرواز می‌کنم")
    }
}

class Sparrow : Bird() {
    override fun fly() {
        println("گنجشک در حال پرواز است")
    }
}

class Penguin : Bird() {
    override fun fly() {
        throw UnsupportedOperationException("پنگوئن نمی‌تواند پرواز کند")
    }
}

در اینجا، Penguin اصل LSP را نقض می‌کند زیرا رفتار متفاوتی دارد. بهتر است کلاس پایه تغییر کند تا فقط پرندگان پرنده را شامل شود.

4. اصل جداسازی واسط‌ها (Interface Segregation Principle – ISP)

یک کلاس نباید مجبور به پیاده‌سازی متدهایی شود که به آن نیاز ندارد.

interface Worker {
    fun work()
    fun eat()
}

class HumanWorker : Worker {
    override fun work() {
        println("انجام کار")
    }

    override fun eat() {
        println("خوردن غذا")
    }
}

class RobotWorker : Worker {
    override fun work() {
        println("ربات در حال کار کردن است")
    }

    override fun eat() {
        throw UnsupportedOperationException("ربات‌ها غذا نمی‌خورند")
    }
}

اینجا RobotWorker متدی را پیاده‌سازی کرده که نیازی به آن ندارد، بنابراین باید اینترفیس‌ها را تفکیک کنیم:

interface Worker {
    fun work()
    fun eat()
}

class HumanWorker : Worker {
    override fun work() {
        println("انجام کار")
    }

    override fun eat() {
        println("خوردن غذا")
    }
}

class RobotWorker : Worker {
    override fun work() {
        println("ربات در حال کار کردن است")
    }

    override fun eat() {
        throw UnsupportedOperationException("ربات‌ها غذا نمی‌خورند")
    }
}

اینجا RobotWorker متدی را پیاده‌سازی کرده که نیازی به آن ندارد، بنابراین باید اینترفیس‌ها را تفکیک کنیم:

interface Workable {
    fun work()
}

interface Eatable {
    fun eat()
}

class HumanWorker : Workable, Eatable {
    override fun work() {
        println("انجام کار")
    }

    override fun eat() {
        println("خوردن غذا")
    }
}

class RobotWorker : Workable {
    override fun work() {
        println("ربات در حال کار کردن است")
    }
}

5. اصل وابستگی معکوس (Dependency Inversion Principle – DIP)

ماژول‌های سطح بالا نباید به ماژول‌های سطح پایین وابسته باشند، بلکه هر دو باید به انتزاع وابسته باشند.

interface NotificationService {
    fun sendNotification(message: String)
}

class EmailNotification : NotificationService {
    override fun sendNotification(message: String) {
        println("ارسال ایمیل: $message")
    }
}

class SMSNotification : NotificationService {
    override fun sendNotification(message: String) {
        println("ارسال پیامک: $message")
    }
}

class NotificationManager(private val notificationService: NotificationService) {
    fun notifyUser(message: String) {
        notificationService.sendNotification(message)
    }
}

در اینجا NotificationManager وابسته به NotificationService است، نه کلاس‌های پیاده‌سازی خاص. این باعث افزایش انعطاف‌پذیری و تست‌پذیری کد می‌شود.

پشتیبانی از چند زبانه ای و محلی سازی Localization در اندروید
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

نتیجه‌گیری

اصول SOLID در طراحی برنامه‌نویسی اندروید به توسعه‌دهندگان کمک می‌کنند تا کدهای تمیزتر، مقیاس‌پذیرتر و قابل نگهداری‌تر بنویسند. با رعایت این اصول، پروژه‌ها منعطف‌تر شده و تغییرات در آن‌ها بدون تخریب ساختار کلی انجام می‌شود. یادگیری و به‌کارگیری این اصول یکی از مهم‌ترین مهارت‌هایی است که هر توسعه‌دهنده‌ی اندروید باید داشته باشد.

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

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • لینوکس
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، ازگل ، مجتمع تجاری الماس ایرانیان، پارک علم و فناوری فردا

021-71058559

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

ورود
با شماره موبایل
با آدرس ایمیل
آیا هنوز عضو نشده اید؟ اکنون ثبت نام کنید
بازنشانی رمزعبور
با شماره موبایل
با آدرس ایمیل
ثبت نام
با شماره موبایل
با آدرس ایمیل
قبلا عضو شده اید؟ اکنون وارد شوید
محافظت شده توسط