OOP – Abstraction – DEV Community

Summarize this content to 400 words in Persian Lang
چی؟
تعریف 1: انتزاع فرآیند پنهان کردن جزئیات پیادهسازی از کاربران است که آنها را قادر میسازد تا بر عملکرد به جای کارهای داخلی تمرکز کنند.
به عنوان مثال: یک قیاس رایج که استفاده می شود، کنترل از راه دور تلویزیون است: کاربران برای کار با تلویزیون بدون نیاز به دانستن نحوه عملکرد مکانیک داخلی با دکمه ها تعامل دارند.
تعریف 2: Abstraction یک طرح یا طرح برای طراحی کلاس ها با مجموعه ای از قوانین تعریف شده ارائه می دهد. سازگاری را تضمین می کند و اعمال رفتارهای خاصی را در کلاس های مشتق شده اعمال می کند.
پیدا می کنم تعریف 2 برای شهودی و ارتباط بیشتر و این پست به تفصیل از این نقطه نظر توضیح می دهد.
چرا؟
برای درک نیاز به انتزاع، اجازه دهید ابتدا یک مسئله را بررسی کنیم.
مشکل:
تصور کنید کلاس هایی برای کشیدن نقاشی از حیوانات ایجاد کنید. هر حیوانی ویژگی های منحصر به فرد خود را دارد، اما ویژگی های خاصی – مانند داشتن چهار پا و دم – در بین آنها مشترک است. بدون یک رویکرد ساختاریافته، توسعهدهندگان ممکن است فراموش کنند که این ویژگیهای مشترک را لحاظ کنند، که منجر به تصاویر ناقص یا نادرست میشود.
class DogPicture {
drawATail() {}
drawFourLegs() {}
drawFloppyEars() {}
}
class CatPicture {
drawATail() {}
drawFourLegs() {}
drawConeShapedEars() {}
}
class HorsePicture {
drawATail() {}
drawFourLegs() {}
drawManeHair() {}
}
class GoatPicture {
drawATail() {}
drawFourLegs() {}
drawHorns() {}
}
class ZebraPicture {
drawATail() {}
drawFourLegs() {}
drawStripesOnBody() {}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
راه حل:
انتزاع می تواند این مشکل را با تعریف یک طرح مشترک یا قوانینی که هر کلاس تصویر حیوانی باید از آن پیروی کند، حل کند. این را می توان با استفاده از یک کلاس انتزاعی یا رابط در TypeScript به دست آورد.
abstract class AnimalPicture {
abstract drawFourLegs(): void;
abstract drawATail(): void;
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
حال هر کلاسی که AnimalPicture را پیاده سازی می کند باید این متدها را تعریف کند. عدم انجام این کار منجر به خطا می شود.
اجرای نادرست
class DogPicture implements AnimalPicture { // this will throw error as `drawFourLegs` & `drawATail` are not implemented.
drawFloppyEars() {}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خطا:
Class ‘DogPicture’ incorrectly implements class ‘AnimalPicture’. Did you mean to extend ‘AnimalPicture’ and inherit its members as a subclass?
Type ‘DogPicture’ is missing the following properties from type ‘AnimalPicture’: drawFourLegs, drawATailts(2720)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اجرای صحیح
class DogPicture implements AnimalPicture {
drawFourLegs(): void {
console.log(“Drawing four legs for a dog.”);
}
drawATail(): void {
console.log(“Drawing four legs for a dog.”);
}
drawFloppyEars() {}
}
class CatPicture implements AnimalPicture {
drawFourLegs(): void {
console.log(“Drawing four legs for a cat.”);
}
drawATail(): void {
console.log(“Drawing four legs for a cat.”);
}
drawConeShapedEars() {}
}
class HorsePicture implements AnimalPicture {
drawFourLegs(): void {
console.log(“Drawing four legs for a horse.”);
}
drawATail(): void {
console.log(“Drawing four legs for a horse.”);
}
drawManeHair() {}
}
class GoatPicture implements AnimalPicture {
drawFourLegs(): void {
console.log(“Drawing four legs for a goat.”);
}
drawATail(): void {
console.log(“Drawing four legs for a goat.”);
}
drawHorns() {}
}
class ZebraPicture implements AnimalPicture {
drawFourLegs(): void {
console.log(“Drawing four legs for a zebra.”);
}
drawATail(): void {
console.log(“Drawing four legs for a zebra.”);
}
drawStripesOnBody() {}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
این تضمین میکند که همه کلاسهای عکس حیوانات قوانین مشترک (drawFourLegs و drawATail) را اجرا میکنند، در حالی که امکان انعطافپذیری را برای ویژگیهای منحصربهفردی مانند گوشهای فلاپی یا راه راه فراهم میکند.
نتیجه گیری
انتزاع در OOP کمک می کند تا یک ساختار سازگار در بین کلاس های مرتبط اعمال شود در حالی که امکان انعطاف پذیری برای پیاده سازی های منحصر به فرد را فراهم می کند. این تضمین می کند که رفتارهای اساسی نادیده گرفته نمی شوند و کد را قابل پیش بینی تر و قابل نگهداری تر می کند.
چی؟
تعریف 1: انتزاع فرآیند پنهان کردن جزئیات پیادهسازی از کاربران است که آنها را قادر میسازد تا بر عملکرد به جای کارهای داخلی تمرکز کنند.
به عنوان مثال: یک قیاس رایج که استفاده می شود، کنترل از راه دور تلویزیون است: کاربران برای کار با تلویزیون بدون نیاز به دانستن نحوه عملکرد مکانیک داخلی با دکمه ها تعامل دارند.
تعریف 2: Abstraction یک طرح یا طرح برای طراحی کلاس ها با مجموعه ای از قوانین تعریف شده ارائه می دهد. سازگاری را تضمین می کند و اعمال رفتارهای خاصی را در کلاس های مشتق شده اعمال می کند.
پیدا می کنم تعریف 2 برای شهودی و ارتباط بیشتر و این پست به تفصیل از این نقطه نظر توضیح می دهد.
چرا؟
برای درک نیاز به انتزاع، اجازه دهید ابتدا یک مسئله را بررسی کنیم.
مشکل:
تصور کنید کلاس هایی برای کشیدن نقاشی از حیوانات ایجاد کنید. هر حیوانی ویژگی های منحصر به فرد خود را دارد، اما ویژگی های خاصی – مانند داشتن چهار پا و دم – در بین آنها مشترک است. بدون یک رویکرد ساختاریافته، توسعهدهندگان ممکن است فراموش کنند که این ویژگیهای مشترک را لحاظ کنند، که منجر به تصاویر ناقص یا نادرست میشود.
class DogPicture {
drawATail() {}
drawFourLegs() {}
drawFloppyEars() {}
}
class CatPicture {
drawATail() {}
drawFourLegs() {}
drawConeShapedEars() {}
}
class HorsePicture {
drawATail() {}
drawFourLegs() {}
drawManeHair() {}
}
class GoatPicture {
drawATail() {}
drawFourLegs() {}
drawHorns() {}
}
class ZebraPicture {
drawATail() {}
drawFourLegs() {}
drawStripesOnBody() {}
}
راه حل:
انتزاع می تواند این مشکل را با تعریف یک طرح مشترک یا قوانینی که هر کلاس تصویر حیوانی باید از آن پیروی کند، حل کند. این را می توان با استفاده از یک کلاس انتزاعی یا رابط در TypeScript به دست آورد.
abstract class AnimalPicture {
abstract drawFourLegs(): void;
abstract drawATail(): void;
}
حال هر کلاسی که AnimalPicture را پیاده سازی می کند باید این متدها را تعریف کند. عدم انجام این کار منجر به خطا می شود.
اجرای نادرست
class DogPicture implements AnimalPicture { // this will throw error as `drawFourLegs` & `drawATail` are not implemented.
drawFloppyEars() {}
}
خطا:
Class 'DogPicture' incorrectly implements class 'AnimalPicture'. Did you mean to extend 'AnimalPicture' and inherit its members as a subclass?
Type 'DogPicture' is missing the following properties from type 'AnimalPicture': drawFourLegs, drawATailts(2720)
اجرای صحیح
class DogPicture implements AnimalPicture {
drawFourLegs(): void {
console.log("Drawing four legs for a dog.");
}
drawATail(): void {
console.log("Drawing four legs for a dog.");
}
drawFloppyEars() {}
}
class CatPicture implements AnimalPicture {
drawFourLegs(): void {
console.log("Drawing four legs for a cat.");
}
drawATail(): void {
console.log("Drawing four legs for a cat.");
}
drawConeShapedEars() {}
}
class HorsePicture implements AnimalPicture {
drawFourLegs(): void {
console.log("Drawing four legs for a horse.");
}
drawATail(): void {
console.log("Drawing four legs for a horse.");
}
drawManeHair() {}
}
class GoatPicture implements AnimalPicture {
drawFourLegs(): void {
console.log("Drawing four legs for a goat.");
}
drawATail(): void {
console.log("Drawing four legs for a goat.");
}
drawHorns() {}
}
class ZebraPicture implements AnimalPicture {
drawFourLegs(): void {
console.log("Drawing four legs for a zebra.");
}
drawATail(): void {
console.log("Drawing four legs for a zebra.");
}
drawStripesOnBody() {}
}
این تضمین میکند که همه کلاسهای عکس حیوانات قوانین مشترک (drawFourLegs و drawATail) را اجرا میکنند، در حالی که امکان انعطافپذیری را برای ویژگیهای منحصربهفردی مانند گوشهای فلاپی یا راه راه فراهم میکند.
نتیجه گیری
انتزاع در OOP کمک می کند تا یک ساختار سازگار در بین کلاس های مرتبط اعمال شود در حالی که امکان انعطاف پذیری برای پیاده سازی های منحصر به فرد را فراهم می کند. این تضمین می کند که رفتارهای اساسی نادیده گرفته نمی شوند و کد را قابل پیش بینی تر و قابل نگهداری تر می کند.