JavaRush /وبلاگ جاوا /Random-FA /اصلاح‌کننده‌ها یا نحوه ایجاد افسون در دنیای جاوا
Petr Gorskin
مرحله
Москва

اصلاح‌کننده‌ها یا نحوه ایجاد افسون در دنیای جاوا

در گروه منتشر شد
روز کهکشانی بخیر، رفقا! این اولین دست نوشته بین سیاره ای من است و از آنجایی که من یک مهندس هستم، تفسیر برخی از مفاهیم را می توان به زبانی فرازمینی انجام داد.
اصلاح کننده ها یا نحوه ایجاد افسون در دنیای جاوا - 1
مقدمه به نظر من جاوا مانند یک راهرو بی پایان با درها (بسته) است. پشت هر یک از این درها فضای آزاد و یک کمد فایل وجود دارد که در آن کوهی از طومارهای جادویی با دستورالعمل (کلاس) برای ایجاد اشیا ذخیره می شود. هر طومار مجموعه‌ای از ویژگی‌ها (متغیرها) و توانایی‌ها (روش‌ها) را توصیف می‌کند - اقدامات (فیلدها) که بر روی خود کلاس یا یک شی که بر اساس آن مونتاژ شده است. در این مرحله بیایید خود را جادوگر تصور کنیم و سعی کنیم یک دستورالعمل (کلاس) کاملاً جدید ایجاد کنیم. بنابراین: اصلاح‌کننده‌ها یا نحوه ایجاد افسون در دنیای جاوا - 2بیایید اکسیر خرد را بنوشیم (اصول را بیاموزیم) و شروع به نوشتن دستورالعمل کنیم. اصلاح‌کننده‌های دسترسی و غیردسترسی بیایید تصور کنیم که هر دستور و شیئی که بر اساس آن ایجاد می‌شود، و همچنین ویژگی‌ها و توانایی‌های آن، در ابتدا به‌طور جادویی مسحور می‌شوند، یعنی. به آنها مجموعه های خاصی از اصلاح کننده ها اختصاص داده می شود. بیایید سعی کنیم راهنمایی در مورد افسون های احتمالی ایجاد کنیم.
  1. اصلاح کننده دسترسی ، که دسترسی یک کلاس، شی یا فیلد را توصیف می کند، مورد نیاز است: در غیاب آن، JVM (این منبع جادوی جهانی است) به طور خودکار یک شناسه پیش فرض را به بسته اختصاص می دهد.

    با شروع از اصلاح کننده دوم، اصلاح کننده های غیر دسترسی وجود دارند که اجباری نیستند و همچنین می توانند با یکدیگر تضاد داشته باشند (اما اول از همه).

  2. اصلاح کننده Static نشان می دهد که کلاس، شی یا فیلد ثابت است. اما این یعنی چه؟ اساساً ما آن را در زمین ها امتحان خواهیم کرد.

    متغیرهای استاتیک، متغیرهای کلاس نامیده می شوند و برای تمام نمونه های آن کلاس منحصر به فرد هستند. متدهای استاتیک را می توان بدون ایجاد شیئی که در آن اعلان شده است فراخوانی کرد. کلاس‌های استاتیک هنگام تودرتو کردن یک کلاس در کلاس دیگر استفاده می‌شوند و اصل تعامل بین کلاس داخلی و خارجی مشابه روش‌ها است (این موضوع برای بحث جداگانه است). همچنین می تواند به عنوان یک بلوک جداگانه در یک شی استفاده شود.

  3. اصلاح کننده نهایی به طور موثر به یک متغیر نشان می دهد که ثابت است. برای متدها - که نمی‌توان آنها را در حین وراثت باطل کرد، اما برای کلاس‌ها این نشانه‌ای است که نمی‌تواند از آن به ارث برده شود (غیرقابل تغییر).

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

  4. اصلاح کننده Abstract فقط برای متدها و کلاس ها اعمال می شود . روش انتزاعی روشی بدون پیاده سازی (بدنه) است.

    اگر یک کلاس به عنوان abstract علامت گذاری شود، یا حاوی متدهای انتزاعی است یا برای جلوگیری از ایجاد نمونه های آن کلاس انجام می شود. اگر یک قیاس ترسیم کنیم، در وسط دستورالعمل ها می توانید عنوان "رنگ آمیزی یک شی" را مشاهده کنید که پس از آن هیچ توضیحی وجود ندارد. آن ها با استفاده از این دستورالعمل می توانید یک شی ایجاد کنید و همچنین می توانید آن را رنگ آمیزی کنید، اما این دستورالعمل خاص نمی گوید که چگونه (دستورالعمل های خود را برای ایجاد یک شی قرمز بر اساس این شی بنویسید و نحوه رنگ کردن آن را توضیح دهید).

هنگام کار در یک محیط چند رشته ای، می توان از اصلاح کننده های ویژه استفاده کرد:
  1. اصلاح کننده Syncronized فقط برای متدها استفاده می شود. وجود آن نشان می دهد که تنها یک رشته می تواند آن را در یک زمان اجرا کند. همچنین می تواند به عنوان یک بلوک جداگانه از کد در یک شی (مشخص کردن شی همگام سازی) استفاده شود.

  2. اصلاح کننده فرار - فقط برای متغیرها . توصیه می شود برای متغیرهایی که می توانند به طور همزمان توسط چندین رشته استفاده شوند استفاده شود. متغیری با چنین اصلاح‌کننده‌ای هر بار که تغییر می‌کند فوراً از حافظه پنهان پردازنده به حافظه اصلی کپی می‌شود و به رشته‌های موازی اجازه می‌دهد تا جدیدترین مقدار را دریافت کنند.

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

  3. اصلاح کننده گذرا - فقط برای متغیرها . این اصلاح‌کننده متغیرهایی را که باید هنگام سریال‌سازی یک شی نادیده گرفته شوند، علامت‌گذاری می‌کند (این یک فرآیند هوشمندانه است که در اصل، خودتان می‌توانید درباره آن مطالعه کنید...)*

    * - من این مقاله را در سطح 17 نوشتم و تا آن زمان سریال سازی به عنوان یک فرآیند شرح داده نشده بود، بنابراین به شما توصیه می کنم به جای کپی پیست در صورت لزوم خودتان آن را مطالعه کنید.

جفت‌های اصلاح‌کننده متناقض علاوه بر کاربرد اصلاح‌کننده‌ها در کلاس‌ها، اشیاء و فیلدهای مختلف، مفهوم جفت‌های متضاد نیز وجود دارد. بیایید بگوییم که مسحور کردن کلاه ایمنی با قدرت آن را سنگین می کند و در عین حال می خواهید آن را مسحور کنید تا سبک باشد. یکی با دیگری جور در نمی آید.
  1. Final و Volatile - وقتی صحبت از متغیرها می شود، نمی توانیم همزمان بگوییم که نهایی است (ثابت) و چندین رشته توانایی تغییر آن را دارند ... بالاخره ثابت است و هر لحظه یک رشته می تواند آن را بخواند. ، اما یک رشته نمی تواند ثابت را تغییر دهد (شورای نظارت جهانی اجازه نمی دهد).
  2. Final و Abstract - کلاس‌ها و متدها نمی‌توانند هم انتزاعی باشند (که در بیشتر موارد نیاز به شفاف‌سازی آنها برای پیاده‌سازی دارد) و هم نهایی، یعنی. تغییرناپذیر به نظر می رسد که دستورالعمل ها می گوید که چگونه از هر ماده (قسمت انتزاعی) یک کلاه ایمنی بادوام خوب ایجاد کنید، اما برای این کار نباید سوراخی در آن وجود داشته باشد (قسمت اجباری نهایی، قابل تغییر نیست).
  3. Abstract و Static - یک روش انتزاعی را نمی توان همزمان ثابت یا همزمان کرد. یک روش انتزاعی ایستا معنی ندارد، زیرا نه تنها کاری انجام نمی دهد، بلکه به کل کلاس تعلق دارد - نتیجه یک چیز بی فایده است.
  4. Abstract and Syncronized - همگام سازی کار با روشی که هیچ کاری انجام نمی دهد چه فایده ای دارد؟
خلاصه بنابراین، شرح اصلاح کننده ها به پایان رسیده است، همه درگیری ها مرتب شده اند و اکنون می توانید نتیجه را با یک برگه تقلب - یک نمودار جادویی تثبیت کنید: اصلاح کننده ها یا نحوه ایجاد افسون در دنیای جاوا - 3در پایان، می خواهم بگویم که نوشتن این مقاله تحقق خواسته من بود. برای مطالعه اصلاح کننده ها این که آیا این تجربه موفق است یا خیر، به شما بستگی دارد که قضاوت کنید. منتظر پیشنهادات شما برای بهبود/تصحیح آن هستم و شاید با هم آن را به یک کتابچه راهنمای بسیار مفید برای بازیکنان مبتدی جاوا تبدیل کنیم.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION