سلام
1- آقا سجاد شما گفتی که از کلاس Array نمی شه شی ساخت چون abstract است ولی در حد تعربف ارور نمیده (قسمت 15 - 01:44:00 ) (شما پرانتز گذاشتی)
با این کد کاری می شه کرد؟
2- abstract یعنی "انتزاعی" یا "مجرد" . کلاس انتزاعی چیه و چه فرقی با کلاس غیر انتزاعی داره. اصلا من معنی خود کلاس رو نفهمیدم چه برسه به انتزاعی یا مجرد بودنش. (البته می دونم گفتی در قسمت های بعد توضیح دادی ولی الان یکمی بدونم بد نیست)
3- کد زیر رو در نظر بگیر
شما گفتی که a رو یک جعبه در نظر بگیریم و 10 رو ده عدد سیب. و شما گفتی که هر کدوم از اون سیب ها یک شی است اما جعبه شی نیست ولی در دنیای واقعی جعبه هم یک شی است همون طور که یک سیب یک شی است
4- کد زیر:
کد:
int[] myArray = new int[4] { 1, 2, 3, 4 };
شما گفتی myArray مثلا نیسان و عدد ها شی داخل جعبه هستن
الف) در اینجا جعبه ها چی هستن
ب) هر کدوم از شی ها داخل یک جعبه جداگانه هستن یا هر 4 تاشون داخل یک جعبه هستن
سلام آقا رامین
1) منظورم از تعریف ، تعریف نوع داده ای به عنوان Array (سمت چپ مساوی) هست
منظورتون از پرانتز ، قسمت سمت راست مساوی ، در کد زیر هست؟ :
اگه آره ، اینو گذاشتم تا مخاطب ببینه که نمیشه از کلاس abstract شی ساخت و کمپایلر ارور میده
ولی ساختن شی از کلاس یه چیزی هه (مثل کد خط بالا) که با قرار دادن پرانتز انجام میشه ولی ساختن شی از آرایه ، یه چیز دیگه . در کد شماره ی 1 تون که کلوشه گذاشتید ، یعنی نوشتید :
در واقع ، سمت راست مساوی ، شما شی ای از آرایه ساختید (شی ای از آرایه ای از Array) ، نه شی ای از کلاس Array (واسه ی همین کمپایلر در اینجا ارور نمیده)
بله میشه با این کد ، کاری کرد ولی الان بهتون بگم ، احتمالا گیج کننده میشه چون اولِ آرایه ها هستین . شما وقتی مینویسید :
کد:
int[] a = new int[] { 4, 68, 7 };
int[] a =
new int[] { 4, 68, 7 };
اعضای داخل کلوشه (اعضای آرایه در اینجا اعداد) را شی هایی (اعداد) میدید که با سمت راست مساوی که قرمز رنگ هه (نه صرفا سمت چپ مساوی) سازگار باشن یعنی تک تک اعضای اون آرایه (مثلا عضو 0 ام اش که عدد 4 هست و ...) ، شی ای از کلاس int ، یا فرزندان int باشن (البته int در اینجا استراکچر هه و فرزند نمیتونه داشته باشه)
حالا وقتی مینویسید :
Array c =
new Array[3];
یعنی اولا که تا 3 عضو براش مشخص بشه و دوما اینکه تک تک اعضای این آرایه ، با Array سازگار باشن . یعنی شی ای از کلاس خود Array یا فرزندانش باشن . از خود کلاس Array که بخاطر abstract بودنش نمیشه شی ساخت پس فقط میشه شی ای از فرزندان کلاس Array ساخت . اینم که گفته بودم که همه ی آرایه ها ، فرزندان کلاس Array هستن . پس در کد بالا ، تک تک اعضاش ، بازم باید شی ای از آرایه ها (هر آرایه ای که طرف دلش خواست) بهش بده :
کد:
Array v = new Array[] { new int[2] , new string[4] };
البته من در کد بالا ، 2 تا شی از آرایه دادم ، بخاطر اینکه در new Array[] دیگه تعداد اعضاش را مشخص نکردم
و از اونجایی هم که هر آرایه ، میتونه عضوی داشته باشه ، پس اعضای داخلی این آرایه (که خودشون آرایه هست) هم میتونن عضو داشته باشن :
کد:
Array v = new Array[] { new int[] { 2, 56}, new string[] { "salam", "khobi?"} };
اما موقع استفاده و فراخونی این آرایه ، تبدیل های مختلفی نیاز داره . این قضیه را در قسمت های بعدی گفتم .
فعلا شاید متوجه نشید و نیازی هم نیست
2) توضیح اینکه کلاس چیه و کلاس انتزاعی چیه ، کار یک خط و دو خط نیست و بسیار طول میکشه . مفهوم کلاس و شی گرایی را در قسمت 27 و بعد گفتم . شما همین الان هم میتونین اون قسمت را ببینین (هر چند چون با تابع آشنا نیستین ، شاید یه کم درک اش براتون سخت تر بشه) ولی فعلا چون میخواین کلیات مفهوم کلاس را متوجه بشین ، موردی نداره و تا چندین قسمت بعد اش را هم ببینین ، بازم کلیات اش را متوجه میشین (البته اگه صبور نیستین
)
کلاس انتزاعی هم در حالت کلی کلاسی هه که نمیشه ازش شی ساخت
3) در مَثَل که مناقشه نیست
من مثال زدم . بهتر از این ، توی دنیای واقعی ، بلد نبودم مثال پیدا کنم
اگه درست تر اش ررا بخواین ، اصلا اون مقدار 10 در متغییر a ، برابر 10 تا دونه سیب نیست . برابر یک مقدار واحد هه (مثلا یک دونه سیب)
4)
الف) اعضای اون آرایه ها ، همون جعبه میشن مثلا
ب) هر کدوم ، داخل یک جعبه ی جداگانه ولی در کنار هم (مثل بارهای جعبه ای که داخل یک نیسون
(پیش استاد علی ، آبروی ما را نبر
) یا هر وسیله ی باربری دیگه ای ، کنار هم چیده شدن)
مثلا (در کدی که دادین) ، مقدار 1 داخل جعبه ی myArray[0] هست و مقدار 2 داخل جعبه ی myArray[1] هست و ...