کلاس درس OOP

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

مدیر انجمن: Parsian

Ramin

کلاس درس OOP

پست توسط Ramin » پنج‌شنبه 18 بهمن 1386, 10:06 am

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

میخوام کمی در مورد مبحث شیرین و زیبای شی گرایی براتون حرف بزنم Laughing الان همه صفحه رو میبندن Laughing
خوب اونایی که موندن 5 نمره بهشون آخر ترم میدم Wink
من به زبون شیرین vb.net بهتون درس میدم چون خودم بیشتر به این زبون کار میکنم اگر C# هم بخواهید No problem براتون توضیح میدم .
اصلا شی چیه ؟
این یکی مبهم ترین سوالهایی هست که برنامه نویسان با آن مواجه هستند Rolling Eyes در دنیای واقعی به هر چیزی که بتونیم حسش کنیم میگیم شی ء . اما آیا تو دنیای کامپیوتر و برنامه نویسی هم همینطوره ؟ نه دیگه اشتباه نکنید ، اینجا نمیتونید حسش کنید Cool
ما تو برنامه نویسی به هر موجودیتی که مستقل باشه و دارای یک سری مشخصات و رفتار باشه که قابل شناسایی باشه میگیم شی ء .
برای مثال یک انسان رو در نظر بگیرید ( البته منظور تو دنیای واقعیه ها )
چه مشخصاتی داره ؟
حتما میگید که :
دو تا پا داره
قد
رنگ پوست
رنگ چشم
رنگ مو
نژاد
و .....
اما چه رفتارهایی انجام میده ؟
راه میره
میشینه
غذا میخوره
میبینه
گوش میده
و ........

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

--------------------------------------

جلسه دوم :

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

با شی که آشنا شدید ، گفتیم دارای یک سری ویژگی ها و رفتار هست که ما اونو درست میکنیم .
اما بیشتر کار ما با وهله ها یا Instance ها هست ، وهله ها یک شی واقعی است که از روی الگو ( همان کلاس ها ) ایجاد میشوند ، درواقع ما از هر کلاس فقط یکی داریم ولی وهله ها میتونند بی نهایت باشند . حالا برای اینکه گیج نشید یه مثال بگم .

كد:
Dim Ramin As New Human


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

البته نمیدونم متوجه منظور من میشید یا نه آخه از اینجا به بعد چیزهایی که میخوام بگم باید کمی تا حدی زیاد Very Happy با برنامه نویسی آشنا باشید . ولی من یه جوری توضیح میدم که همگی متوجه شید .

حالا بیایید ببینیم خاصیت یا Property چیه ؟

یک انسان رو در نظر بگیرید ، رنگ چشم ، رنگ مو ، قد و .... خصوصیات یا Property یک انسان به شمار میروند .

متد method چیه ؟

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

رویداد یا Event چیه ؟

بازم یه انسان رو در نظر بگیرید ( حالا الان میگید چه گیری داده به انسان Laughing ) رفتارهایی که در مقابل محرکهای بیرونی انجام میده میشه رویداد ، مثلا وقتی با یک چوب میزنید تو سرش چی میشه ؟ خوب معلومه دیگه فریاد میکشه Laughing ای فریاد کشیدن همون رویداده

---------------------------------

جلسه سوم :

تا اینجا توضیحات مختصری به شما دادم ، لازم است بدانیم که هر چیزی که شما در دات نت با آن سر و کار دارید کلاس هستند مثلا وقتی شما مینویسید :

كد:
Dim strname As String


در واقع شما با نوشتن این کد یک وهله از کلاس String ایجاد کردید که این کلاس یک سری خصوصیات مثل Chars یا Length داره و یک سری متد مثل Toupper یا Trim و ....
اما String رویداد ندارد !! این مهمه که بدونید هر کلاس حتما لازم نیست که خصوصیات ، متد یا رویداد داشته باشه .
پس همه چیز تو دات نت کلاس هستند . ok ؟

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

حالا این 4 تا چیه ؟
تجرید ، کپسوله کردن ، پلی مورفیسم و وراثت

کجا ؟ چرا فرار میکنید ، وایسید بابا ، زیادم سخت نیست .

1 - تجرید ( Abstraction ) : یعنی اینکه ساز و کار و پیچیدگی های شی رو از محیط خارج پنهان کنیم ، خوب واسه اینکه بهتر بفهمید بزارید یه مثال براتون بزنم
MP3 Player دارید ؟ نداری ؟ موبایل چی ؟ موبایل که دارید دیگه ، برای کار با موبایل شما لازم نیست بدونید توش چه خبره ، فقط کافیه روشنش کنید و ازش استفاده کنید .


2 - کپسوله کردن ( encapsulation ) :
یعنی اینکه هر شی باید همه چیزهایی که برای کارکردن صحیح نیاز داره رو داشته باشه و برای تامین داده ها و اطلاعات خودش به دنیای بیرون نیازی نداشته باشه .
مثلا باز همون انسان رو در نظر بگیرید Very Happy انسان برای غذا خوردن همه چیز رو داره ، دندون برای جویدن ، معده برای هضم کردن و .....
این به این معنی نیست که همه چیز رو باید از اول بسازید ، میتونید از کلاسهای دیگه داخل شی خود استفاده کنید که این استفاده مجدد از اشیا از مهمترین ویژگی های مدل شی گرا محسوب میشه .

3 - پلی مورفیسم ( polymorphism ) : یعنی اینکه اشیاء میتونند کارهای مشابهی رو انجام بدن ، ولی به روشهای مختلف ( این رو به زودی توی نوشتن کدها به صورت کامل براتون توضیح میدم )

4 - وراثت ( Inheritance ) : این مورد یکی از مهمترین ویژگی های برنامه نویسی شی گرا محسوب میشه .
به ارث بردن یکی از بهترین روشها برای تولید ویژگیهای جدیده .مثلا انسان رو در نظر بگیرید ، گفتیم که یک سری ویژگی های عام داره ( رنگ پوست ، مو و .... ) حالا فرض کنید که ما یک زیرکلاس به اسم مثلا زن و یک زیر کلاس به اسم مرد میسازیم ، این دو زیر کلاس علاوه بر داشتن ویژگی های عمومی انسان یک سری ویژگی های خاص خودشون هم دارند .

خوب از پست های بعدی کمی بیشتر کد نویسی میکنیم و از حالت تئوری در میاییم

Ramin

پست توسط Ramin » پنج‌شنبه 18 بهمن 1386, 10:36 am

قبل از اینکه شروع کنم به کد نویسی ، چند تا اصطلاح هست که باید بدونید :

اعضای کلاس : تمام داده ها ، متغیرها و توابعی که در یک کلاس به کار میبریم تشکیل اعضای یک کلاس رو میدهند تمام اعضای یک کلاس میتونند به یکی از روش های زیر تعریف شوند :

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

1 - Public : هر کدام از اعضا که به صورت Public تعریف شوند میتوانند توسط دنیای خارج در دسترس قرار بگیرند .

2 - Private : تمام اعضایی که به صورت Private تعریف بشن فقط توسط اعضای داخلی همان کلاس در دسترس خواهند بود .

3 - Protected : اعضایی که به صورت Protected تعریف شوند فقط و فقط در داخل همان کلاس قابل استفاده هستند و نمیتونند در کلاسهایی که از کلاس جاری مشتق شدند استفاده بشند .

بزارید در مورد این دومی و سومی یک مثال بزنم براتون . کلاس انسان که یادتون هست ، فرض کنید شما یک خاصیت تعریف میکنید به این صورت :

Private Hair as string
Protected legs as integer

حالا فرض کنید یک زیرکلاس میسازیم به اسم Men ، شما در این زیرکلاس میتونید از متغیر Hair کلاس پایه استفاده کنید اما هرگونه تلاش برای استفاده از متغیر legs بی فایده خواهد بود .
حالا تو مثالهای عملی باز هم بیشتر توضیح میدم در این مورد .

4 - Shared : یادتون باشه که در #C به جای Shared از Static استفاده میکنیم ، اعضایی که به صورت Shared تعریف بشن ، بدون ایجاد یک نمونه از کلاس جاری قابل دسترس خواهند بود .

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

Ramin

پست توسط Ramin » جمعه 19 بهمن 1386, 12:28 pm

به به ، عجب کلاس فعالیه ، نگاه کن همه خوابن
ما رو باش میخواستیم تازه شروع کنیم به نوشتن Class

آواتار کاربر
kanan
كاربر عالي
كاربر عالي
پست: 1617
تاریخ عضویت: دوشنبه 16 مهر 1386, 1:00 pm
محل اقامت: تبريز شهر اولين ها

پست توسط kanan » جمعه 19 بهمن 1386, 7:32 pm

rtech نوشته شده:به به ، عجب کلاس فعالیه ، نگاه کن همه خوابن
ما رو باش میخواستیم تازه شروع کنیم به نوشتن Class
استاد کی گفته خوابیم من که امروز حاضر هستم
استاد من حاظرم من که 3 جلسه غیبت دارم اگه یه جلسه دیگه غیبت بخورم حذف میشم :lol:
استاد چطوره یه دستگاه حضور و غیاب بخریم

با تشکر فراوان از استاد محترم آقای احمدی ( استاد ترم آخره ببین اون نمره مارو چیکار میکنی :lol: :wink: )
زندگي را مثل پيازي ديدم كه هر ورقشو باز كردم
اشك منو درآورد!!

خدا بگم چيكارت نكنه اون كسي كه منو معتاد سريال فرار از زندان كردي

گفتگو آنلاين اعضا انجمن
http://www.tinychat.com/6kclp

آواتار کاربر
amin24
همکار قدیمی
همکار قدیمی
پست: 313
تاریخ عضویت: سه‌شنبه 10 مهر 1386, 2:46 pm
محل اقامت: تهران
تماس:

پست توسط amin24 » شنبه 20 بهمن 1386, 8:12 am

ببخشيد رامين جان، من يه مشكلي داشتم كه به اينترنت هم دسترسي نداشتم.
امروز حاضر هستم.
البته خواستم با موبايل بيام فروم كه فقط صفحه اول فروم رو اورد و ديگه هنگ كرد.
راستي كلاس اومده طبقه آخر اونم بدون آسانسور!!!!
باز هم ممنون رامين خان :wink:
مهم نيست گودال كوچك آبي باشي يا درياي بيكران، زلال كه باشي آسمان در توست.

KIMO
کاربر ساده
کاربر ساده
پست: 52
تاریخ عضویت: پنج‌شنبه 25 مرداد 1386, 4:31 pm
محل اقامت: اینجا
تماس:

پست توسط KIMO » شنبه 20 بهمن 1386, 9:10 am

سلام :)
من خیلی خوشحالم از اینکه شما این قدر خوب دارید دات نت درس می دید ،
من منتظر هستم تا بیشتر با دات نت آشنا بشم. :)

با تشکر فراوان :)

Ramin

پست توسط Ramin » شنبه 20 بهمن 1386, 1:17 pm

خوب حالا که بچه ها حاضرند ، میریم سراغ ادامه درس ، اولا بهتون بگم اینجا خبری از notepad و ادیتورهای ساده نیست ها !!!! هرکتابی رو نگاه کنید نوشته ما کدهامون رو تو ادیتورهای ساده انجام میدیم ، اما اینجا از این خبرها نیست ، کشور خارجی نیست که کلی پول نرم افزار بخواهید بدید ، همین الان میرید یک نسخه ویژوال استودیو ( من 2005 دارم ولی 2008 بگیرید بهتره ) میخرید ( بیرون ریخته 1 دی وی دی 1000 تومان :lol: ) بعد نصب میکنید و کارهای زیر رو انجام میدید .

یک چیزی رو هم یادم رفت بگم و اون اینه که خواهشا اگر از این مطالب در سایت و وبلاگ خودتون میخواهید استفاده کنید نام نویسنده فراموش نشه ( هرچند ایرانی ها زیاد به بحث کپی رایت و حقوق دیگران کاری ندارند ! )

خوب بیایید یک کلاس ساده بنویسیم که مشخصات یک فرد مثل نام ، نام خانوادگی و سن او را بگیرد و همچنین یک متد هم برای تلفیق نام و نام خانوادگی بنویسیم .
اون ردیف های آخر ، کسی نخوابه ها !!

در وی بی دات نت ما به این صورت یک کلاس تعریف می کنیم :

کد: انتخاب همه

Public Class daneshjoo

End Class
و در سی شارپ :

کد: انتخاب همه

Public Class Daneshjoo 
{
}
خوب گفتیم میخواهیم مشخصات نام و نام خانوادگی و سن یک دانشجو رو بگیریم . به جلسات اول مراجعه کنید ، گفتیم یک کلاس شامل یک سری مشخصات هست ، ما اینجا 3 مورد خصوصیت یا Property داریم ، برای تعریف خصوصیت در وی بی به این صورت عمل میکنیم :

کد: انتخاب همه

Public Property Name() As String
        Get

        End Get
        Set(ByVal value As String)

        End Set
    End Property
و در سی شارپ :

کد: انتخاب همه

public string Name {
            
         get { }
            
         set { }
     }
خوب همانطور که متوجه شدید هر خصوصیت یا Property از دو قسمت Get و Set تشکیل شده است ، قسمت Set برای گرفتن اطلاعات از محیط خارج و تجزیه و تحلیل درستی اطلاعات به کار میرود ، مثلا در مورد سن کاربر نمیتونه مقدار 0 و منفی وارد کنه که باید در اینجا چک بشه و در قسمت Get هم ما اطلاعات را به دنیای خارج منتقل میکنیم .
اجازه بدید این کلاس را به صورت کامل با 3 خصوصیت براتون بنویسم :

کد: انتخاب همه

Public Class daneshjoo

    Private strname As String
    Private strfamily As String
    Private intage As Integer

    Public Property Name() As String
        Get
            Return strname
        End Get
        Set(ByVal value As String)
            strname = value
        End Set
    End Property

    Public Property Family() As String
        Get
            Return strfamily
        End Get
        Set(ByVal value As String)
            strfamily = value
        End Set
    End Property

    Public Property Age() As Integer
        Get
            Return intage
        End Get
        Set(ByVal value As Integer)
            intage = value
        End Set
    End Property
End Class
به سی شارپ :

کد: انتخاب همه

public class daneshjoo
  {
     
      private string strname;
      private string strfamily;
      private int intage;
     
      public string Name {
          get { return strname; }
          set { strname = value; }
      }
     
      public string Family {
          get { return strfamily; }
          set { strfamily = value; }
      }
     
      public int Age {
          get { return intage; }
          set { intage = value; }
      }
  }
خوب بزارید یه توضیحی بدم که گیج نشید .
اول کار ما 3 تا عضو یا متغیر داخلی تعریف کردیم که از دنیای بیرون قابل استفاده نیستند و فقط در خود کلاس دانشجو میتونند در دسترس قرار بگیرند .

سپس 3 تا خصوصیت تعریف کردیم برای گرفتن نام و نام خانوادگی و سن ، اگر توجه کنید در قسمت های Set و Get و از متغیرهای داخلی خود کلاس استفاده کردیم اما خود Property ها به صورت Public تعریف شدند تا بتونیم از بیرون به آنها دسترسی داشته باشیم .

حالا بیایید در یک صفحه جدید یک نمونه یا وهله از این کلاس بسازیم و ازش استفاده کنیم .
شما میتونید در Page_load و یا هرجای دیگری از این کلاس به این صورت استفاده کنید :

اول یک نمونه ازش میسازیم :

وی بی :

کد: انتخاب همه

Dim class1 as new Daneshjoo
سی شارپ :

کد: انتخاب همه

Daneshjoo class1= new Daneshjoo();
حالا به این صورت میتونید مشخصات رو وارد کنید :

کد: انتخاب همه

class1.name="Ramin"
class1.family="Ahmadi"
class1.age=23
حالا فرض کنید میخواهید این مشخصات را در 3 لیبل نمایش دهید :

کد: انتخاب همه

Lable1.text=class1.name
label2.text=class1.family
Label3.text=class1.Age
به همین راحتی فعلا یک کلاس ساده نوشتیم ، در پست بعدی یک متد اضافه میکنیم بهش و کمی پیشرفته تر کار میکنیم

اما پرسشی که ممکنه در ذهن شما به وجود اومده باشه اینه که چرا به جای استفاده از Property ها متغیرهای رو به صورت Public تعریف نکنیم و از آنها استفاده نکنیم ؟
این کار چند دلیل دارد :

1 - مخفی کردن ساز و کار کلاس از دنیای خارج ( تجریدی بودن )
2 - از طریق Property ها میتونیم صحت اطلاعات وارد شده را کنترل کنیم .

در پست های بعدی کمی بیشتر با کلاس ها کار میکنیم . :20:

هر سوالی دارید بپرسید ، چون هرچی جلوتر بریم سخت تر میشه ، من به همین راحتی به کسی نمره نمیدم ها !!!!! :lol:

در ضمن اگر کدها رو نمیتونید درست بخونید به این آدرس مراجعه کنید :

http://mobicomp.net/yaf_postst1341_----.aspx

anima
پست: 4
تاریخ عضویت: جمعه 19 بهمن 1386, 8:12 pm

استاد خسته نباشی

پست توسط anima » چهارشنبه 1 اسفند 1386, 6:42 pm

استاد بقیه کلاسا کی تشکیل میشه؟ من هیچی نمیدونم از vb .استاد نمره نمیخوام میخوام خودم یاد بگیرم :lol:
واقعا خسته نباشی. ایول با مرام سایت
یا علی

Ramin

پست توسط Ramin » چهارشنبه 1 اسفند 1386, 8:38 pm

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

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

کد: انتخاب همه

dim myclass as new daneshjoo
myclass.name=ramin
myclass.family=ahmadi
label1.text=myclass.name + myclass.family
اما یک روش ساده تر و بهتر اینه که یک متد برای این کار بنویسیم ، به کلاس دانشجو برید و کد زیر را در آن بنویسید :

قبل از اینکه کد را براتون بنویسم چند تا نکته رو بهتون بگم
تفاوت بین سابروتین و تابع :
یک سابروتین که اونایی که با وی بی کار میکنند بارها دیدن ، سابروتین با Sub شروع و با End Sub به پایان میرسد ، تابع با Function شروع و با End Function به پایان میرسد .
اما تفاوت سابروتین با تابع در اینه که سابروتین هیچ مقداری رو بر نمیگردونه ولی تابع مقداری را به برنامه برمیگردونه .
ما در اینجا یک تابع مینویسیم که نام و نام خانوادگی را ادغام کند .

Public Function ConCatName(firstname as string , lastname as string) as string
return Firstname & lastname
end function

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

کد: انتخاب همه

dim myclass as new daneshjoo
Dim a as string="ramin"
dim b as string = "ahmadi"
dim c as string
c=myclass.concatname(a,b)
این یه تعریف خیلی ساده از متد بود ، اگر مشکلی داشتید بگید :wink:

آواتار کاربر
amin24
همکار قدیمی
همکار قدیمی
پست: 313
تاریخ عضویت: سه‌شنبه 10 مهر 1386, 2:46 pm
محل اقامت: تهران
تماس:

پست توسط amin24 » جمعه 3 اسفند 1386, 10:37 am

مرسي رامين جان.
ميان ترم نميگيري؟
مهم نيست گودال كوچك آبي باشي يا درياي بيكران، زلال كه باشي آسمان در توست.

Ramin

پست توسط Ramin » دوشنبه 6 اسفند 1386, 7:38 pm

خوب دوستان عزیز ، به علت اینکه OOP داره کم کم از رده خارج میشه ، ادامه کلاس دیگه برگزار نمیشه ، من هم دارم از OOP به سمت COP نقل مکان میکنم 8)
COP مخفف Component Object Programming هست :wink:
حالا یه مقایسه کوچیکش رو میتونید در زیر ببینید :

تصویر

آواتار کاربر
amin24
همکار قدیمی
همکار قدیمی
پست: 313
تاریخ عضویت: سه‌شنبه 10 مهر 1386, 2:46 pm
محل اقامت: تهران
تماس:

پست توسط amin24 » سه‌شنبه 7 اسفند 1386, 8:32 am

خوب بالاخره آقا رامين كاره خودشو كرد و كلاس رو تعطيل كرد!!
مهم نيست گودال كوچك آبي باشي يا درياي بيكران، زلال كه باشي آسمان در توست.

javad_mjt
کاربر ساده
کاربر ساده
پست: 23
تاریخ عضویت: پنج‌شنبه 15 شهریور 1386, 12:18 am
محل اقامت: مشهد
تماس:

پست توسط javad_mjt » پنج‌شنبه 16 اسفند 1386, 12:21 am

سلام
من تازه این تاپیک و دیدم از اول تا اخر نشستم خوندم.خیلی روون و جالب توزیح دادی.خیلی لذت بردم ممنون بازم از این کارا بکن :wink: منتظر COP هستیم

Energy_PlusPlus
کاربر ساده
کاربر ساده
پست: 15
تاریخ عضویت: سه‌شنبه 22 مرداد 1387, 8:30 pm
تماس:

Re: کلاس درس OOP

پست توسط Energy_PlusPlus » جمعه 25 مرداد 1387, 10:57 am

ramin جان بسیار عالی ، ساده و روان نوشتی! کتاب Thinking in Java: The Definitive Introduction to Object-Oriented Programming کتاب بسیار عالی هستش که قواعد و اصول برنامه نویسی شی گرا رو از پایه آموزش میده و ضمنا اکثر اساتید دانشگاه ها هم اون رو پیشنهاد میکنند! امیدوارم مفید واقع بشه! yes:

nanimehr
کاربر فعال
کاربر فعال
پست: 198
تاریخ عضویت: پنج‌شنبه 3 مرداد 1387, 11:42 am
محل اقامت: کویر
تماس:

Re: کلاس درس OOP

پست توسط nanimehr » جمعه 5 مهر 1387, 4:45 am

استاد خیلی سخته ما که متوجه نمیشیم! wc:
----------------------------------------------------------------------------
در دنیایی که همه به دنبال چشمان زیبا هستند، تو به دنبال نگاه زیبا باش. دکتر علی شریعتی
----------------------------------------------------------------------------
میگن با یک گل بهار نمیشه ، اما ما یه گل داریم که با اومدنش تموم دنیا بهار میشه؛ جهت تعجیل در فرج آقا امام زمان صلوات.

قفل شده

بازگشت به “مباحث متفرقه و سوالات کامپیوتری”