Skip to content

Translate to persian #3256

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions localization/fa/abstract-document/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
عنوان: "الگوی سند انتزاعی در جاوا: ساده‌سازی مدیریت داده با انعطاف‌پذیری"
عنوان کوتاه: Abstract Document
توضیح: "با الگوی طراحی Abstract Document در جاوا آشنا شوید. هدف، توضیح، کاربرد، مزایا و نمونه‌های دنیای واقعی برای پیاده‌سازی ساختارهای داده‌ای پویا و منعطف را بیاموزید."
دسته‌بندی : ساختاری
زبان: fa
tag:

Abstraction

Decoupling

Dynamic typing

Encapsulation

Extensibility

Polymorphism

هدف از الگوی طراحی Abstract Document

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

الگوی Abstract Document در جاوا امکان مدیریت پویا ویژگی‌های غیراستا‌تیک را فراهم می‌سازد. این الگو از مفهوم traits استفاده می‌کند تا ایمنی نوع (type safety) را حفظ کرده و ویژگی‌های کلاس‌های مختلف را به مجموعه‌ای از اینترفیس‌ها تقسیم کند.

مثال دنیای واقعی

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

به زبان ساده

الگوی Abstract Document این امکان را می‌دهد که ویژگی‌هایی را به اشیاء اضافه کنیم بدون آنکه اشیاء از وجود این ویژگی‌ها اطلاع داشته باشند.

در ویکی‌پدیا آمده است:

یک الگوی طراحی ساختاری شی‌ء‌گرا برای سازمان‌دهی اشیاء در ساختارهای کلید-مقدار با نوع‌دهی ضعیف و نمایش داده‌ها از طریق نمای‌های نوع‌دار. هدف از این الگو دستیابی به انعطاف‌پذیری بالا بین اجزا در زبان‌های strongly typed است، به گونه‌ای که ویژگی‌های جدید را بتوان به‌صورت پویا به درخت اشیاء اضافه کرد، بدون از دست رفتن ایمنی نوع. این الگو از traits برای جدا کردن ویژگی‌های مختلف یک کلاس به اینترفیس‌های جداگانه استفاده می‌کند.

نمودار کلاس

Abstract Document class diagram
نمونه برنامه‌نویسی از الگوی Abstract Document در جاوا

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

ابتدا کلاس‌های پایه Document و AbstractDocument را تعریف می‌کنیم. این کلاس‌ها امکان نگهداری یک نقشه ویژگی‌ها (property map) و هر تعداد شیء فرزند را فراهم می‌کنند.

// ... کد تغییر نکرده

در مرحله بعد، یک enum به نام Property و مجموعه‌ای از اینترفیس‌ها برای type، price، model و parts تعریف می‌کنیم. این کار امکان ایجاد رابطی شبیه به اینترفیس‌های استاتیک را برای کلاس Car فراهم می‌کند.

// ... کد تغییر نکرده

اکنون آماده‌ایم که Car را معرفی کنیم.

// ... کد تغییر نکرده

و در نهایت نحوه ساخت و استفاده از Car را در یک مثال کامل می‌بینیم:

// ... کد تغییر نکرده

خروجی برنامه:

07:21:57.391 [main] INFO com.iluwatar.abstractdocument.App -- ساخت قطعات و خودرو
07:21:57.393 [main] INFO com.iluwatar.abstractdocument.App -- این هم خودروی ما:
07:21:57.393 [main] INFO com.iluwatar.abstractdocument.App -- -> مدل: 300SL
07:21:57.394 [main] INFO com.iluwatar.abstractdocument.App -- -> قیمت: 10000
07:21:57.394 [main] INFO com.iluwatar.abstractdocument.App -- -> قطعات:
07:21:57.395 [main] INFO com.iluwatar.abstractdocument.App -- wheel/15C/100
07:21:57.395 [main] INFO com.iluwatar.abstractdocument.App -- door/Lambo/300

چه زمانی از الگوی Abstract Document در جاوا استفاده کنیم؟

الگوی طراحی Abstract Document در موقعیت‌هایی که نیاز به مدیریت انواع مختلفی از اسناد با ویژگی‌ها یا رفتارهای مشترک و در عین حال ویژگی‌های خاص دارند، بسیار مفید است. برخی کاربردهای مناسب برای این الگو:

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

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

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

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

مدیریت پیکربندی: برای تنظیمات مختلف در اپلیکیشن‌ها، این الگو امکان مدیریت یکنواخت ویژگی‌ها و دستکاری آسان آن‌ها را فراهم می‌کند.

پلتفرم‌های آموزشی: انواع منابع مانند متن، ویدیو، آزمون، تکلیف که ویژگی‌های مشترکی دارند و ویژگی‌های خاص مانند مدت زمان ویدیو یا تاریخ تحویل تکلیف.

ابزارهای مدیریت پروژه: انواع وظایف مانند to-do، milestone، issue با ویژگی‌های عمومی و خاص مثل تاریخ milestone یا اولویت issue.

ساختار ویژگی‌ها در اسناد متنوع و در حال تغییر است.

نیاز به افزودن ویژگی‌های جدید به‌صورت پویا رایج است.

جداسازی دسترسی به داده از قالب‌های خاص اهمیت دارد.

نگهداری و انعطاف‌پذیری در کد حیاتی است.

ایده اصلی الگوی Abstract Document این است که روشی منعطف و قابل توسعه برای مدیریت موجودیت‌ها یا اسناد با ویژگی‌های مشترک و اختصاصی ارائه دهد. با تعریف یک رابط مشترک و پیاده‌سازی آن در انواع مختلف سند، می‌توان به ساختاردهی بهتر داده‌های پیچیده دست یافت.
مزایا و ملاحظات الگوی Abstract Document

مزایا:

انعطاف‌پذیری: پشتیبانی از ساختارهای مختلف اسناد و ویژگی‌ها

قابلیت توسعه: افزودن ویژگی‌های جدید بدون شکستن کد فعلی

قابلیت نگهداری: ترویج کد تمیز و قابل‌تطبیق با تفکیک وظایف

قابلیت استفاده مجدد: دسترسی نوع‌دار به ویژگی‌ها، استفاده مجدد از کد را ممکن می‌سازد

ملاحظات:

پیچیدگی: نیاز به تعریف اینترفیس‌ها و نمای‌ها، بار پیاده‌سازی دارد

عملکرد: ممکن است نسبت به دسترسی مستقیم به داده، سربار کمی داشته باشد

منابع و اعتبارها

Design Patterns: Elements of Reusable Object-Oriented Software

Java Design Patterns: A Hands-On Experience with Real-World Examples

Pattern-Oriented Software Architecture Volume 4: A Pattern Language for Distributed Computing (v. 4)

Patterns of Enterprise Application Architecture

Abstract Document Pattern (Wikipedia)

Dealing with Properties (Martin Fowler)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading