va2012
سه شنبه 30 آبان 1391, 12:19 عصر
سلام
دوستان چند تا سوال در مورد نحوه صحیح برنامه نویسی شی گرا داشتم.
حتما میدونید که یکی از اصول برنامه نویسی شی گرا این هست که ما بیایم یک مسئله (پروژه) بزرگ رو به چند قسمت کوچکتر تقسیم کنیم که هم نظم و ترتیب کدهامون بیشتر بشه و هم بعدها که خواستیم پروژه رو تغییر یا توسعه بدیم کارمون راحت تر باشه و قابلیت استفاده مجدد داشته باشه و کد نویسی کمتر بشه و چندین مزایای دیگه.
خوب معمولا در پروژه ها میان برای یک سری عمل خاص یک کلاس تعریف میکنن و فیلد ها و متدهای مربوطه رو داخل اون کلاس قرار میدن و هر جا لازم بود از اون کلاس استفاده میکنن. با این شیوه کلاس بندی پروژه رو به چند قسمت جزئی تقسیم می کنن که هر قسمت وظایف خودش رو انجام میده.
اما حالا چند تا سوال درباره این شیوه برنامه نویسی دارم ممنون میشم راهنمایی کنید :
1- من اومدم ظاهر فرم اصلی برنامه رو به چند قسمت مختلف تقسیم بندی کردم و بعد هر قسمت رو در یک userControl قرار دادم و بعد فیلدها و متدهای مورد نیاز رو برای هر userControl به صورت جداگانه تعریف کردم .
اما مشکل اینجاست که برخی از این userControl ها دارای متدهای متشابهی هستند که میشه داخل یک کلاس جداگانه قرارشون داد تا نیاز نباشه برای هر کدوم یکبار به صورت جداگانه تعریف بشه . ولی اگر این کار رو بخوام انجام بدم چون در کلاس جدید به کنترل های موجود در هر userControl دسترسی ندارم مجبور میشم خاصیت Modifiy اون کنترل ها رو به Public تغییر بدم که از خیلی از دوستان شنیدم این کار درستی نیست.
پس در چنین مواقعی باید چه کار کرد؟ باید همون userControl ها رو استفاده کنم یا نه در کنار اون ها از یک کلاس جداگانه که شامل متدها و فیلدهای تکراری این userControl هاست استفاده کنم؟
البته میدونم که هر userControl هم خودش دارای یک کلاس هست که میشه متدها و فیلدها رو داخل اون تعریف کرد اما بحث من سر موارد تکراری هست.
2 - مگه یک userControl نمونه ای از یک فرم نیست؟ پس چرا نمیشه یک userControl ساخت که از یک کنترل مثل DataGridView ارث بری کنه؟
3- من از کد زیر برای ارتباط بین فرم ها در برنامه استفاده میکنم اما نمیدونم چرا نام کنترل ها باید به صورت رشته نوشته بشه چون در طول طراحی یک برنامه ممکنه چند بار نام یک کنترل رو تغییر بدیم ولی این تغییرات در کد زیر اعمال نمیشه . منظورم اینه که چرا این کدها مثل موقعی که از یک فرم نمونه میسازیم و موقع درج نام اون نمونه همه کنترل های public فرم در intlisense نمایش داده میشن نیست؟ :
(Application.OpenForms["MainForm"] as mainForm).Controls ...
دوستان چند تا سوال در مورد نحوه صحیح برنامه نویسی شی گرا داشتم.
حتما میدونید که یکی از اصول برنامه نویسی شی گرا این هست که ما بیایم یک مسئله (پروژه) بزرگ رو به چند قسمت کوچکتر تقسیم کنیم که هم نظم و ترتیب کدهامون بیشتر بشه و هم بعدها که خواستیم پروژه رو تغییر یا توسعه بدیم کارمون راحت تر باشه و قابلیت استفاده مجدد داشته باشه و کد نویسی کمتر بشه و چندین مزایای دیگه.
خوب معمولا در پروژه ها میان برای یک سری عمل خاص یک کلاس تعریف میکنن و فیلد ها و متدهای مربوطه رو داخل اون کلاس قرار میدن و هر جا لازم بود از اون کلاس استفاده میکنن. با این شیوه کلاس بندی پروژه رو به چند قسمت جزئی تقسیم می کنن که هر قسمت وظایف خودش رو انجام میده.
اما حالا چند تا سوال درباره این شیوه برنامه نویسی دارم ممنون میشم راهنمایی کنید :
1- من اومدم ظاهر فرم اصلی برنامه رو به چند قسمت مختلف تقسیم بندی کردم و بعد هر قسمت رو در یک userControl قرار دادم و بعد فیلدها و متدهای مورد نیاز رو برای هر userControl به صورت جداگانه تعریف کردم .
اما مشکل اینجاست که برخی از این userControl ها دارای متدهای متشابهی هستند که میشه داخل یک کلاس جداگانه قرارشون داد تا نیاز نباشه برای هر کدوم یکبار به صورت جداگانه تعریف بشه . ولی اگر این کار رو بخوام انجام بدم چون در کلاس جدید به کنترل های موجود در هر userControl دسترسی ندارم مجبور میشم خاصیت Modifiy اون کنترل ها رو به Public تغییر بدم که از خیلی از دوستان شنیدم این کار درستی نیست.
پس در چنین مواقعی باید چه کار کرد؟ باید همون userControl ها رو استفاده کنم یا نه در کنار اون ها از یک کلاس جداگانه که شامل متدها و فیلدهای تکراری این userControl هاست استفاده کنم؟
البته میدونم که هر userControl هم خودش دارای یک کلاس هست که میشه متدها و فیلدها رو داخل اون تعریف کرد اما بحث من سر موارد تکراری هست.
2 - مگه یک userControl نمونه ای از یک فرم نیست؟ پس چرا نمیشه یک userControl ساخت که از یک کنترل مثل DataGridView ارث بری کنه؟
3- من از کد زیر برای ارتباط بین فرم ها در برنامه استفاده میکنم اما نمیدونم چرا نام کنترل ها باید به صورت رشته نوشته بشه چون در طول طراحی یک برنامه ممکنه چند بار نام یک کنترل رو تغییر بدیم ولی این تغییرات در کد زیر اعمال نمیشه . منظورم اینه که چرا این کدها مثل موقعی که از یک فرم نمونه میسازیم و موقع درج نام اون نمونه همه کنترل های public فرم در intlisense نمایش داده میشن نیست؟ :
(Application.OpenForms["MainForm"] as mainForm).Controls ...