دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۲
  • آبان

جلسه ۳۴ : کنترل دسترسی در Swift

  • دسته‌بندی‌ها :
جلسه ۳۴ : کنترل دسترسی در Swift
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش Swift را دنبال می کنند. محدود کردن دسترسی به بلوک های کد، ماژول ها و انتزاع در Swift از طریق Access control (کنترل دسترسی) انجام می شود. کلاس ها، سازه ها و شمارنده ها می توانند با توجه به خصوصیات، متد ها، واسطه ها و شاخص های آنها با مکانیزم های کنترل دسترسی قابل دسترسی باشند. ثابت ها، متغیرها و توابع در یک پروتکل در قالب عمومی و محلی از طریق کنترل دسترسی قابل محدودیت و مجاز به دسترسی است. ویژگی کنترل دسترسی در Swift به خصوصیات اعمال می شود، به نوع ها و توابع نیز می توان به عنوان ‘entities’ (موجودیت) اشاره کرد.

      کنترل دسترسی در Swift

      در این آموزش شما با سینتکس کلی ویژگی کنترل دسترسی در Swift و کار با آن در انواع ساختارها آشنا می شوید.

      مدل ویژگی Access control به ماژول ها و سورس های منبع بستگی دارد.

      ماژول به عنوان یک واحد تکی از کد توزیع تعریف شده است و می توان با کلمه کلیدی ‘import’ آن را وارد کرد.

      یک فایل منبع به عنوان یک فایل کد منبع تکی، با یک ماژول برای دسترسی به انواع و توابع چندگانه تعریف شده است.

      سه سطح دسترسی متفاوت توسط زبان Swift 4 ارائه شده است، که شامل دسترسی عمومی ، داخلی و خصوصی می شود.

      ردیفسطح دسترسی و تعریف
      ۱Public

      موجودیت ها را قادر می سازد تا در هر فایل منبع از ماژول تعیین شده خود، یک فایل منبع از ماژول دیگری که وارد ماژول تعریف می شود، پردازش شود.

      ۲Internal

      موجودیت ها را قادر می سازد در هر فایل منبع از ماژول تعریف شده ما استفاده شود، اما در هر فایل منبعی خارج از آن ماژول اینطور نیست.

      ۳Private

      استفاده از یک موجودیت را به فایل منبع تعریف خود محدود می کند.

      سینتکس

      مثال : 

      کنترل دسترسی برای انواع توابع

      بعضی از توابع ممکن است آرگومان های داخل تابع را بدون هیچ مقدار بازگشتی اعلام کنند.

      برنامه زیر مقدار ۱ و b را به عنوان آرگومان به تابع () sum می دهد.

      در داخل تابع ، مقادیر برای آرگومان های a و b با فراخوانی () sum فراخوانی می شود و مقادیر آن چاپ شده و از این طریق مقادیر بازگشتی را حذف می کنند.

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

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      کنترل دسترسی برای انواع شمارنده

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      شمارنده ها در Swift 4 بصورت خودکار یک سطح دسترسی را برای موارد شاخص یک شمارنده دریافت می کنند.

      به عنوان مثال برای دسترسی به نام های دانش آموزان که در یک کلاس از نوع string تعریف شده و با سه متغیر mark1, mark2 و mark3 از نوع integer قابل مشاهده است.

      در حالت معمول نام دانش آموز چاپ می شود و در صورتی که بلوک مورد نظر اجرا شود. mark هایی که برای نام دانش آموزان مشخص شده چاپ می شود.

      در صورتی ک هیچکدام از موارد بالا انجام نشود بلوک پیش فرض اجرا می شود.

      کنترل دسترسی برای زیر کلاس ها

      Swift 4 اجازه می دهد که کاربر به زیر کلاس هر کلاس بتواند دسترسی داشته باشد.

      یک زیر کلاس نمی تواند سطح دسترسی بالاتری از ابر کلاس داشته باشد.

      کاربر از نوشتن یک زیر مجموعه عمومی یک ابر کلاس خصوصی محدود شده است.

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      کنترل دسترسی برای ثابت ها ، متغیر ها، خصوصیات و زیر مجموعه ها

      ثابت ها، متغیرها یا خصوصیات Swift 4 نمی تواند به عنوان عمومی تعریف شوند.

      نمی توان یک خصوصیت عمومی را با یک نوع خصوصی نوشت.

      به طور مشابه، یک زیر مجموعه نمی تواند عمومی تر از شاخص یا نوع بازگشتی آن باشد.

      هنگامی که یک متغیر مستقل، متغیر، خصوصیت یا زیر مجموعه از یک نوع خصوصی انجام می دهد، ثابت، متغیر، خصوصیت یا زیرمجموعه نیز باید به صورت خصوصی مشخص شود:

      مثال : 

      Getter ها و setter ها

      Getter ها و setter ها برای ثابت ها ، متغیر ها ، خصوصیات و زیر مجموعه ها به طور خودکار یک سطح دسترسی را به عنوان ثابت ، متغیر ، خصوصیت یا زیر مجموعه ای که به آن ها تعلق دارد دریافت می کند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      کنترل دستری برای initializer ها و initializer های پیش فرض

      initializer های سفارشی می تواند به یک سطح دسترسی کوچکتر و یا مساوی نوعی که مقداردهی اولیه شدند تخصیص یابد.

      Initiator لازم است که  همان سطح دسترسی را به عنوان کلاس متعلق به آن داشته باشد.

      انواع پارامترهای اولیه نمی تواند خصوصی تر از سطح دسترسی خصوصی خود باشد.

      برای اعلام هر زیر کلاس از مقداردهی اولیه کلمه کلیدی ‘required’ برای نعریف قبل از تابع ()init نیاز است.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      یک initializer پیش فرض یک سطح دسترسی را به عنوان نوع آن initializes داراست مگر اینکه این نوع به عنوان عمومی تعریف شده باشد.

      وقتی که initialize پیش فرض به عنوان نوع عمومی داخلی در نظر گرفته شده و کاربر نیاز به یک نوع عمومی بدون آرگومان بدون initializes دارد، یک initializer بدون آرگومان ارائه می شود.

      کنترل دسترسی برای پروتکل ها

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

      کنترل دسترسی Swift 4 اجازه نخواهد داد که کاربران یک پروتکل عمومی را تعریف کنند که از یک پروتکل “داخلی” به ارث برده شود.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      کنترل دسترسی به افزونه ها

      زمانیکه کاربر از افزونه برای اضافه کردن پروتکل استفاده می کند،Swift 4 کاربران را مجبور به ارائه یک مادیفایر سطح دسترسی صریح برای یک برنامه افزودنی می کند.

      سطح دسترسی پیش فرض برای هر پیاده سازی مورد نیاز پروتکل درون پسوند با سطح دسترسی پروتکل خود به خود ارائه می شود.

      کنترل دسترسی به Generic ها

      Generic ها اجازه می دهند که کاربر حداقل سطوح دسترسی را برای دسترسی به محدودیت های نوع پارامترها مشخص کند.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      کنترل دسترسی برای انواع نام مستعار

      کاربر می تواند انواع اسامی مستعار را برای انواع دسترسی مجاز تعریف کند.

      سطح دسترسی و یا سطوح دسترسی مختلف می تواند توسط کاربر تعریف شود.

      زمانیکه نوع اسامی مستعار ‘private’ باشد اعضای مرتبط آن می توان به صورت ‘private’ یا نوع عمومی داخلی تعریف شود.

      وقتیکه نوع اسامی مستعار عمومی (public) باشد اعضای آن نمی تواند نام مستعار از نوع ‘internal’ یا ‘private’ داشته باشد.

      هر گونه نام های مستعار که شما تعریف می کنید به عنوان انواع متمایز برای اهداف کنترل دسترسی مورد استفاده قرار می گیرند.

      یک نوع نام مستعار می تواند سطح دسترسی کمتر یا برابر با سطح دسترسی آن نوع اسامی مستعار را داشته باشند.

      برای مثال یک نوع نام مستعار private می تواند به نوع های private, internal یا public اعمال شود.

      اما یک نوع نام مستعار public نمی تواند به عنوان نام مستعار داخلی یا private در نظر گرفته شود.

      مثال :

      مثال : 

      نتیجه ی کامپایل و اجرای کد فوق:

      مثال : 

      Encoding و Decoding در Swift

      Swift 4 یک پروتکل Codable جدید را معرفی می کند که اجازه می دهد سریال های شما بدون نوشتن کد خاص و بدون نیاز به نگرانی در مورد از دست دادن انواع ارزش های خود، استفاده کنید.

      مثال :

      مثال : 

      توجه داشته باشید که زبان سازگار با پروتکل Codable است.

      حالا ما آن را به نمایندگی داده Json با استفاده از یک خط ساده تبدیل می کنیم:

      مثال : 

      Swift به صورت خودکار تمام مقادیر داخل نوع داده ی شما را encode می کند.

      شما می توانید با استفاده از تابع  Decoder داده را encode کنید:

      مثال : 

      هر دو نوع JSONEncoder و PropertyListEncoder گزینه های زیادی را برای سفارشی کردن چگونگی عملکرد خود دارند.

      کلام آخر

      مکانیزم کنترل دسترسی در Swift را می توان بر انواع ساختارها از جمله ، ثابت ها، متغیرها ، خصوصیات ، توابع و … اعمال کرد و با این ویژگی می توان سطح دسترسی عمومی ، خصوصی و … را برای آن ها تعیین کرد.

      QR:  جلسه ۳۴ : کنترل دسترسی در Swift
      به اشتراک بگذارید


      دیدگاه کاربران
      1. تصویر کاربر
        • تصویر کاربر