PDA

View Full Version : ارتباط دو کلاس



mehrdad2025
چهارشنبه 24 مهر 1392, 08:31 صبح
با سلام خدمت دوستان
من یه مشکلی دارم ولی جوابی براش پیدا نمی کنم.
فرض کنید یک کلاس Person داریم و یک کلاس Phone.
کلید اصلی کلاس Person توی کلاس Phone قرار داره.حالا توی Form برنامه می خوام یک select بنویسم
که از هر دو کلاس استفاده کنم.(در واقع همون Inner Join خودمون).بهترین روش چیه؟
لطفا کمک کنید.

Kubuntu
چهارشنبه 24 مهر 1392, 12:32 عصر
منظورتون از کلاس جدوله؟ یا اینکه فایل کلاس در ویژوال؟! و اینکه شما اگه کوئری می خوای باید سوالت رو در بخش sql بپرسی.

اما اون چیزی که فکر می کنم به دردت بخوره اینه که:
ممکنه ما در دیتابیس دوتا جدول داشته باشیم یکی person که اطلاعات شخص توشه و چون می خوایم چندتا شماره تلفن از هر نفر داشته باشیم واسه بهینه شدن می یایم یه جدول جدا واسه تلفن ایجاد می کنیم که کلید اصلی person ، کلید خارجی واسه جدول تلفن می شه.
حالا وقتی می خوایم تو ویژوال کلاسش رو بنویسیم نیاز نیس دو تا کلاس ایجاد کنیم. کافیه اطلاعات یک شخص هرچی که هست رو در یک کلاس قرار بدیم. نوع داده ی پراپرتی تلفن رو هم generic List (http://www.dotnetperls.com/list) یا آرایه انتخاب می کنیم.

mehrdad2025
پنج شنبه 25 مهر 1392, 20:50 عصر
سلام خیلی ممنون از راهنماییتون.
منظورم اینکه هر جدول از دیتا بیس یک کلاس توی محیط برنامه نویسی هستش.حالا چطور می شه ارتباط دو کلاس رو فراهم توی محیط برنامه نویسی.

Kubuntu
پنج شنبه 25 مهر 1392, 21:35 عصر
خب دیگه منم همینو دارم می گم!! نباید واسه هر جدول یه کلاس داشته باشی!!! شی گرایی چه ربطی به جدول داره!! دوباره پست قبلی رو بخون... قطعا متوجه می شی.
شما فقط به یک کلاس نیاز دارید!!

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

mehrdad2025
جمعه 26 مهر 1392, 10:59 صبح
سلام.
خوب با این حساب ما واسه هر جدول کلاس نداریم.فقط یک کلاس Person داریم و کلاس Phone رو هم داخل کلاس Person تعریف می کنیم حالا بخواهیم شماره یک فرد رو پیدا کنیم داخل همون کلاس Person یک
Select می زنیم بدون اینکه از کلاس Phone نمونه سازی یا Object داشته باشیم؟درست گفتم؟

Kubuntu
جمعه 26 مهر 1392, 19:02 عصر
حالا وقتی می خوایم تو ویژوال کلاسش رو بنویسیم نیاز نیس دو تا کلاس ایجاد کنیم. کافیه اطلاعات یک شخص هرچی که هست رو در یک کلاس قرار بدیم. نوع داده ی پراپرتی تلفن رو هم generic List (http://www.dotnetperls.com/list) یا آرایه انتخاب می کنیم.
همونطور که قبلا گفتم: اصلن کلاسی بنام phone نداریم. بجاش یک متغیر بصورت آرایه واسه phone داریم. شما می گی کلاس phone رو داخل کلاس person ایجاد می کنی.... خب بازم دو کلاسه دیگه :چشمک: درستش اینه بگی پراپرتی (مشخصه) phone را داخل کلاس person تعریف می کنیم.

در sql سعی می کنی جدولها بهینه باشه ولی در ویژوال به واقعیت نگاه کن تا بتونی شی گرایی رو درست پیاده کنی. داخل کلاس شخص اون مشخصاتی وجود داره که مرتبط به یک فرد هستش. تلفن یک فرد مثل اسمش می مونه.

موفق باشی

mehrdad2025
جمعه 03 آبان 1392, 12:04 عصر
خیلی ممنون از راهنمایی های شما.
اونی شما می گین درسته ولی در دید من یه تفاوتی بین شی گرایی و Sql ایجاد شده که می خوام این تفاوت رو بردارم واسه همین بحث رو زیادی کش می دم امیدوارم شما ناراحت نباشید از این موضوع.
آخه اگر یک فرد بیش از 3 تا شماره تلفن داشته باشه نمی شه که همه این 3 تا تلفن رو با همون مشخصات توی همون جدول Person تکرار کرد.پس من بایستی ارجاش بدم به یک جدول دیگه یعنی یک سری مشخصات برای یک فرد تعریف کنم با یک کلید و همون کلید رو ببرم توی یه جدول دیگه به اسم Phone که اونجا کلید اصلی Person توی اون جدول Phone به عنوان کلید خارجی تعریف بشه.با این حساب کتاب برای یک رکورد از جدول Person می تونم توی جدول Phone شماره های بیشتری داشته باشم و جلوی افزونگی رو بگیرم.توی Sql مشکلی نداریم ولی وقتی میایم این دو تا جدول رو به صورت شی گرایی تحلیل کنیم به مشکل بر می خوریم که آیا دو کلاس داشته باشیم یا فقط یه کلاس؟
مشکل من تحلیل این قسمت با شی گرایی هستش؟
با تشکر از راهنمایی های شما

nafisehk
شنبه 04 آبان 1392, 09:11 صبح
خیلی ممنون از راهنمایی های شما.
اونی شما می گین درسته ولی در دید من یه تفاوتی بین شی گرایی و Sql ایجاد شده که می خوام این تفاوت رو بردارم واسه همین بحث رو زیادی کش می دم امیدوارم شما ناراحت نباشید از این موضوع.
آخه اگر یک فرد بیش از 3 تا شماره تلفن داشته باشه نمی شه که همه این 3 تا تلفن رو با همون مشخصات توی همون جدول Person تکرار کرد.پس من بایستی ارجاش بدم به یک جدول دیگه یعنی یک سری مشخصات برای یک فرد تعریف کنم با یک کلید و همون کلید رو ببرم توی یه جدول دیگه به اسم Phone که اونجا کلید اصلی Person توی اون جدول Phone به عنوان کلید خارجی تعریف بشه.با این حساب کتاب برای یک رکورد از جدول Person می تونم توی جدول Phone شماره های بیشتری داشته باشم و جلوی افزونگی رو بگیرم.توی Sql مشکلی نداریم ولی وقتی میایم این دو تا جدول رو به صورت شی گرایی تحلیل کنیم به مشکل بر می خوریم که آیا دو کلاس داشته باشیم یا فقط یه کلاس؟
مشکل من تحلیل این قسمت با شی گرایی هستش؟
با تشکر از راهنمایی های شما

سلام
نیازی نیست که شما دو کلاس جدا داشته باشید.
یه جدول برای انواع شماره تلفن و یک جدول برای کانتکتها و یک جدول واسط که Id نوع شماره تلفن ، id کانتکت و شماره تلفن و داره...
و فقط یه کلاس کانتکت.

mehrdad2025
یک شنبه 05 آبان 1392, 08:26 صبح
نه کانتکت کلاس نمی تونه باشه.چون اصولا کانتکت موجودیت نیست.Person کلاس هستش چرا چون من می خوام واسه نمونه های مختلف رکورد داشته باشم.ولی کانتکت هستش که باید متصل بشه به کلاس Person تا در کنار اون کلاس یک اطلاعاتی رو بتونیم ذخیره و بازیابی کنیم.بحث سر ایجاد چند کلاس متفاوت مثل Person و Phone هستش که آیا یک کلاس به نام Person ایجاد کنیم یا دو کلاس Person و Phone