PDA

View Full Version : سوال: تفاوت وراثت در جاوا و سی



master89
دوشنبه 19 اسفند 1387, 14:11 عصر
سلام دوستان
در مورد تفاوت وراثت در زبان java و c کی اطلاعات داره؟
لطفا کمک کنید .

cups_of_java
سه شنبه 20 اسفند 1387, 14:01 عصر
منظورتون سی پلاس پلاس هست دیگه!؟

1. در سی پلاس پلاس، وراثت چندگانه (مستقیمن) پشتیبانی می شه ولی در جاوا این مسئله رو نداریم ولی می شه از چند Interface چندگانه وراثت کرد.

2. در سی پلاس پلاس، چیزی به نام Interface که کاملن Abstract باشه نداریم ولی جاوا داره.

3. سی پلاس پلاسی انواع وراثت داره یعنی وراثت می تونه public، private و یا protected باشه ولی در جاوا وراثت فقط به صورت public امکانپذیر هست.

ولی سعی کنید سوالات درسیتون رو اینجا نپرسید و به جاش خودتون تحقیق کنید.

mehdi_m1360
سه شنبه 27 اسفند 1387, 00:20 صبح
3. سی پلاس پلاسی انواع وراثت داره یعنی وراثت می تونه public، private و یا protected باشه ولی در جاوا وراثت فقط به صورت public امکانپذیر هست.



تا اونجا که من میدونم فقط در وضعیت private امکان call و همینطور overwrite کردن متدها نیست و در بقیه حالت ها وجود داره (تو حالت پکیج باید در یک پکیج باشند).

cups_of_java
سه شنبه 04 فروردین 1388, 00:34 صبح
تا اونجا که من میدونم فقط در وضعیت private امکان call و همینطور overwrite کردن متدها نیست و در بقیه حالت ها وجود داره (تو حالت پکیج باید در یک پکیج باشند).


خوب؟ این تفاوت نیست! این از خواص وراثت هستش!

mehdi_m1360
شنبه 08 فروردین 1388, 21:23 عصر
خوب؟ این تفاوت نیست! این از خواص وراثت هستش!
حرف شما درسته، این از خواص وراثته و جزو تفاوتها. من تصور کردم که منظور شما به ارث نرسیدن اون متدهاست بنابراین خواستم موضوع رو به این صورت اصلاح کنم که تمامی متدها به ارث میرسند و این تعاریف(publicو private و ...) مربوط میشه به حوزه دسترسی یعنی بنا به تعریف به برخی دسترسی داریم و به برخی خیر.

cups_of_java
یک شنبه 09 فروردین 1388, 00:32 صبح
حرف شما درسته، این از خواص وراثته و جزو تفاوتها. من تصور کردم که منظور شما به ارث نرسیدن اون متدهاست بنابراین خواستم موضوع رو به این صورت اصلاح کنم که تمامی متدها به ارث میرسند و این تعاریف(publicو private و ...) مربوط میشه به حوزه دسترسی یعنی بنا به تعریف به برخی دسترسی داریم و به برخی خیر.



نه! فکر کنم منظورمو واضح بیان نکردم. من نوع ارث بری رو گفتم نه اینکه اجزای private به ارث نمی رسند یا اینکه private ها رو دسترسی نداریم.

ببینید! در سی پلاس پلاس خود ارث بری می تونه از نوع public، private یا protected باشه ولی در جاوا ارث بری همواره public هستش و بقیه رو پشتیبانی نمی کنه.
مثلن در سی پلاس پلاس شما می تونی بگی:



class Child : private Parent {
...
}

alireza_ars
پنج شنبه 13 فروردین 1388, 02:32 صبح
سلام
من عضو جدیدم
ببینید...این یکی از معجزات جاوا هست که وراثت چند گانه رو نداره(تا برنامه قره قورتی نشه)...بلکه interface داره
"پشتیبانی نمیکنه" نگین...چون یه نوعی ضعف به نظر میاد...در حالی که این قدرت مطلقی هست که جاوا در اختیار برنامه نویس قرار میده
جاوا اصول داره...هیچ وقت با سی پلاس پلاس مقایسه نکنین...یا با هر زبانه قره قورتی دیگه ای
اگه در مورد جاوا سوالی داشتین...مستقیم بپرسین...نه با مقایسه
اونوقت میفهمین فرق جاوا با دیگر زبانها چیه

mehdi_m1360
پنج شنبه 13 فروردین 1388, 13:41 عصر
دوست عزیز هیچ تکنولوژی مطلق نیست! لااقل به عنوان کسانی که در این رشته فعالیت میکنیم باید بدانیم که تفاوتها بین تکنولوژی ها و ابزارهای مختلف چیه و هر وقت که یکی از این تفاوت ها مزیت شد، به اون توجه کنیم. من با اینکه 6-7 ساله به صورت خاص روی جاوا کار میکنم، تا به حال به چشم "قره قورتی" به زبانهای دیگه نگاه نکردم و فکر میکنم که آدم عاقل به جای تعصب، به همه امکانات اطرافش به چشم فرصت نگاه میکنه حتی اگه این امکانات زبانهای برنامه نویسی باشه.
در ثانی مقایسه برای کسانی که به یکی از زبانها مسلط هستند و به یکی دیگه آشنا میتونه بسیار مفید باشه

mazdadoost
پنج شنبه 13 فروردین 1388, 21:44 عصر
تا اونجا که من میدونم فقط در وضعیت private امکان call و همینطور overwrite کردن متدها نیست و در بقیه حالت ها وجود داره (تو حالت پکیج باید در یک پکیج باشند).

سلام:
میشه!با Reflection! همچنبن با پردازنده های بایت کد!
در کل فرق چندانی به لحاظ مفهومی (OOP) ندارند.فرق در میزان قابلیت نگهداری کد ها و میزان پیچیدگی مورد نیاز برنامه نویس هست.در واقع هر دومفاهیم مختلف OOP رو با ابزار مختلفی پشتیبانی می کنند.
موفق باشید.

mehdi_m1360
جمعه 14 فروردین 1388, 11:28 صبح
سلام، آره با Reflection میشه ولی در زمان اجرا نه در هنگام توسعه. ما در مورد تفاوتهای دوزبان صحبت میکردیم و تا اونجا که من میدونم Reflection مربوط به کار با اشیا در Run time و این خیلی به قابلیت ها و تفاوتهای دو زبان در وراثت مربوط نمیشه. Reflection یه API هست که به ما امکانات مختلفی میده اما صحبت از ساختار چیز دیگه ای هستش.

mazdadoost
جمعه 14 فروردین 1388, 12:56 عصر
همونطور که عرض کردم به لحاظ مفهومی چندان فرقی ندارند. از طرفی ران تایم و کامپایل تایم هردو جزی از محیط جاوا هستند و در نتیجه از خصوصیات جاوا. پس reflection هم هرچند به شکلی نامتعارف اما واقعی در زمینه وراثت در جاوا موثره.و حتی میتونه ساختار کامپایل تایم رو تغیر بده. و این یعنی تاثیر در ساختار برنامه .البته این ها برای من فرقی نمیکنه.
موفق باشی.

cups_of_java
شنبه 15 فروردین 1388, 10:17 صبح
سلام
من عضو جدیدم
ببینید...این یکی از معجزات جاوا هست که وراثت چند گانه رو نداره(تا برنامه قره قورتی نشه)...بلکه interface داره
"پشتیبانی نمیکنه" نگین...چون یه نوعی ضعف به نظر میاد...در حالی که این قدرت مطلقی هست که جاوا در اختیار برنامه نویس قرار میده
جاوا اصول داره...هیچ وقت با سی پلاس پلاس مقایسه نکنین...یا با هر زبانه قره قورتی دیگه ای
اگه در مورد جاوا سوالی داشتین...مستقیم بپرسین...نه با مقایسه
اونوقت میفهمین فرق جاوا با دیگر زبانها چیه

سعی کنید متعصبانه و غیر فنی نظر ندید. زبان سی پلاس پلاس رو نمی شه قره قورتی نام برد. باید دانست که چه مساعلی جاوا رو مجاب کرد وراثت چند گانه از طریق کلاس ها رو پشتیبانی نکنه و Interface رو اضافه کنه! این هرگز یک ضعف نیست!

cups_of_java
شنبه 15 فروردین 1388, 10:22 صبح
همونطور که عرض کردم به لحاظ مفهومی چندان فرقی ندارند. از طرفی ران تایم و کامپایل تایم هردو جزی از محیط جاوا هستند و در نتیجه از خصوصیات جاوا. پس reflection هم هرچند به شکلی نامتعارف اما واقعی در زمینه وراثت در جاوا موثره.و حتی میتونه ساختار کامپایل تایم رو تغیر بده. و این یعنی تاثیر در ساختار برنامه .البته این ها برای من فرقی نمیکنه.
موفق باشی.

جاوا امکان عوض کردن ساختار کلاس (و وراثت) رو با Reflection به شما نمی ده! از این حیث جاوا زبان dynamicی از نظر انواع داده نیست.
این تفاوتی بین جاوا و سی پلاس پلاس از نظر شی گرایی و وراثت نیست.

alireza_ars
سه شنبه 25 فروردین 1388, 02:24 صبح
سلام
دوست عزیزمون آقا مهدی که میگن " Reflection در زمان اجرا نه در هنگام توسعه " باید بگم که اینطور نیست....چون debuger جاوا به کمک array reflection نوشته شده که class رو تکه تکه میکنه و آخرش ارایه میکنه و دوباره از اون آرایا عنصر میگیره و ادامه debug...پس کاملا run time میباشد....

شما میتوانید با کلاسهای reflector به هر نوع(private , public , protected , package) متود ، فیلد ، constructor ، class....دسترسی داشته باشید.
حتی کلاسهای member از اون کلاس...یا
کلاسهای nested از ائن کلاس....یا
کلاسهای Local از اون کلاس...یا
کلاسهای enunmes از اون کلاس

موفق باشید

alireza_ars
سه شنبه 25 فروردین 1388, 02:41 صبح
سلام
ببینید...این کاملا غیر اصولی هست که یک کلاس بتونه از چند کلاس ارث ببره
اگه هر دو پدر متودی همنام داشته باشن...وقتی فرزند بخواد یکی از متود هاش رو مورد استفاده قرار بده...موقع فراخوانی متود...متود کدوم پدرش رو فراخوانی خواهد کرد...
قبول که این مشکل هم حل میشه...آیا این اصولی هست که هنگام برنامه نویسی مشکلی ناشی از غیره اصولی بودن یک زبان برنامه نویسی داشته باشیم که مجبور بشیم...غیر اصولی هم این مشکل رو حل کنیم...
آخرین بار که آمار تفاوت ها و امتیازات جاوا از ++C رو میدیدم...از وبلاگ یکی از متخصصین sun .... صد و یک دلیل همراه با کده یک برنامه کامل آورده بودن ...که جاوا بهتر از ++c هست و ++c از اصولی مناسبی برخوردار نیست
ضمنان...شما یک ابزار از ++c نام ببرید که قوی تر از ابزار جاوا باشه؟
من همین جا ابزارهایی از جاوا رو میگم که قوی تر از ابزارهای ++c هستند. >> همه ی ابزارهای جاوا قوی تر از ابزارهای هر زبانی هستند.
میتونین تحقیق کنین
یه سوال دیگه...یه دلیل منطقی بیارین برای ارث بری چند گانه؟
منتظر جوابتون هستم...!
موفق باشین

alireza_ars
سه شنبه 25 فروردین 1388, 02:58 صبح
دوست عزیز هیچ تکنولوژی مطلق نیست! لااقل به عنوان کسانی که در این رشته فعالیت میکنیم باید بدانیم که تفاوتها بین تکنولوژی ها و ابزارهای مختلف چیه و هر وقت که یکی از این تفاوت ها مزیت شد، به اون توجه کنیم. من با اینکه 6-7 ساله به صورت خاص روی جاوا کار میکنم، تا به حال به چشم "قره قورتی" به زبانهای دیگه نگاه نکردم و فکر میکنم که آدم عاقل به جای تعصب، به همه امکانات اطرافش به چشم فرصت نگاه میکنه حتی اگه این امکانات زبانهای برنامه نویسی باشه.
در ثانی مقایسه برای کسانی که به یکی از زبانها مسلط هستند و به یکی دیگه آشنا میتونه بسیار مفید باشه



سلام دوست عزیز
باید به عرض شما برسونم که...
جاوا در واقع یک زبان برنامه نویسی نیست...جاوا یک علمه
اینطور که به نظر میاد...فعلا که مطلقه
درسته که scala میخواد جایگزین جاوا بشه...اما از اصول جاوا پیروی میکنه
جاوا نباشه...اصولش که هست
در مورد ++c هم مطلب نوشتم در همین تاپیک...خودتون بخونبن و به سوالم پاسخ بدین.
ضمنا...با وجود زبانهای برنامه نویسی قدری مثل جاوا ، ++c دیگه منسوخه....
و با وجود jsp یا ruby (محصولی از شرکت sun از سال1993 که به دلیل راحت طلبی و تنبلی ما ایرانی ها هنوز در کشور ما ناشناخته هست) asp هم دیگه منسوخه
به اونایی که در عالم .net سیر میکنن....پیشنها میکنم از دنیای کوچک .net بیان بیرون
در مورد ruby باید بدونین که...آینده ی وب هست...یک زبان اسکریپتی شیئ گرا...یعنی معجزه
موفق باشید

mehdi_m1360
سه شنبه 25 فروردین 1388, 14:22 عصر
سلام
دوست عزیزمون آقا مهدی که میگن " Reflection در زمان اجرا نه در هنگام توسعه " باید بگم که اینطور نیست....چون debuger جاوا به کمک array reflection نوشته شده که class رو تکه تکه میکنه و آخرش ارایه میکنه و دوباره از اون آرایا عنصر میگیره و ادامه debug...پس کاملا run time میباشد....

شما میتوانید با کلاسهای reflector به هر نوع(private , public , protected , package) متود ، فیلد ، constructor ، class....دسترسی داشته باشید.
حتی کلاسهای member از اون کلاس...یا
کلاسهای nested از ائن کلاس....یا
کلاسهای Local از اون کلاس...یا
کلاسهای enunmes از اون کلاس

موفق باشید

دوست من کسی نمیگه با این تکنیک نمیشه به اینا دسترسی داشت، صحبت سر معماری یه زبانه! شاید حالتهایی باشه که شما مجبور بشید از reflection استفاده کنید اما نمیشه وسط طراحی یه سیستم اومد و گفت من متد private رو با reflection صدا میزنم چون منطقی نیست، حرف من اینه که reflection وارد حوزه API میشه نه Structure! اینجا هم حوزه بحث صرفا راحع به structure هستش...

mehdi_m1360
سه شنبه 25 فروردین 1388, 14:31 عصر
سلام دوست عزیز
باید به عرض شما برسونم که...
جاوا در واقع یک زبان برنامه نویسی نیست...جاوا یک علمه
اینطور که به نظر میاد...فعلا که مطلقه
درسته که scala میخواد جایگزین جاوا بشه...اما از اصول جاوا پیروی میکنه
جاوا نباشه...اصولش که هست
در مورد ++c هم مطلب نوشتم در همین تاپیک...خودتون بخونبن و به سوالم پاسخ بدین.
ضمنا...با وجود زبانهای برنامه نویسی قدری مثل جاوا ، ++c دیگه منسوخه....
و با وجود jsp یا ruby (محصولی از شرکت sun از سال1993 که به دلیل راحت طلبی و تنبلی ما ایرانی ها هنوز در کشور ما ناشناخته هست) asp هم دیگه منسوخه
به اونایی که در عالم .net سیر میکنن....پیشنها میکنم از دنیای کوچک .net بیان بیرون
در مورد ruby باید بدونین که...آینده ی وب هست...یک زبان اسکریپتی شیئ گرا...یعنی معجزه
موفق باشید

جاوا یک علم نیست! در بهترین حالت تکنولوژیه! علم تعریفی داره و شما نباید به همچین چیزی محدودش کنید!

در ضمن اصولا در علم چیزی مطلق نیست! چه برسه به زیر مجموعه هاش (اگه بخوای فلسفی نگاه کنی). صحبت سر جاوا که چنانه و چنینه هم اینطوریا نیست که اگه بود همه هرچی زبان و تکنولوژی تو دنیا هست رو ول میکردن میشستن با جاوا کار میکردن. بهتره بدونید که بخش بسیار بزرگی از علم نرم افزار وجود داره که موقع توسعه با همون فرترن یا کوبول یا ++C پیاده سازی میشه و Net. یا جاوا یا ruby اصلا جایی توش نداره...

cups_of_java
سه شنبه 25 فروردین 1388, 19:47 عصر
سلام
دوست عزیزمون آقا مهدی که میگن " Reflection در زمان اجرا نه در هنگام توسعه " باید بگم که اینطور نیست....چون debuger جاوا به کمک array reflection نوشته شده که class رو تکه تکه میکنه و آخرش ارایه میکنه و دوباره از اون آرایا عنصر میگیره و ادامه debug...پس کاملا run time میباشد....

شما میتوانید با کلاسهای reflector به هر نوع(private , public , protected , package) متود ، فیلد ، constructor ، class....دسترسی داشته باشید.
حتی کلاسهای member از اون کلاس...یا
کلاسهای nested از ائن کلاس....یا
کلاسهای Local از اون کلاس...یا
کلاسهای enunmes از اون کلاس

موفق باشید


من جملاتتون رو واضح نمی فهمم اما Reflection یک واسط برنامه نویسی برای دسترسی به ساختار اشیا هست نه کلاس ها! و اینکه Reflection به درد زمان اجرا می خوره و نهایتن اینکه Reflection اصلن نمی تونه ساختار یک شی رو عوض کنه! Reflection اصلن در بحث این تاپیک نمی گنجه!

cups_of_java
سه شنبه 25 فروردین 1388, 19:54 عصر
سلام
ببینید...این کاملا غیر اصولی هست که یک کلاس بتونه از چند کلاس ارث ببره
اگه هر دو پدر متودی همنام داشته باشن...وقتی فرزند بخواد یکی از متود هاش رو مورد استفاده قرار بده...موقع فراخوانی متود...متود کدوم پدرش رو فراخوانی خواهد کرد...
قبول که این مشکل هم حل میشه...آیا این اصولی هست که هنگام برنامه نویسی مشکلی ناشی از غیره اصولی بودن یک زبان برنامه نویسی داشته باشیم که مجبور بشیم...غیر اصولی هم این مشکل رو حل کنیم...
آخرین بار که آمار تفاوت ها و امتیازات جاوا از ++C رو میدیدم...از وبلاگ یکی از متخصصین sun .... صد و یک دلیل همراه با کده یک برنامه کامل آورده بودن ...که جاوا بهتر از ++c هست و ++c از اصولی مناسبی برخوردار نیست
ضمنان...شما یک ابزار از ++c نام ببرید که قوی تر از ابزار جاوا باشه؟
من همین جا ابزارهایی از جاوا رو میگم که قوی تر از ابزارهای ++c هستند. >> همه ی ابزارهای جاوا قوی تر از ابزارهای هر زبانی هستند.
میتونین تحقیق کنین
یه سوال دیگه...یه دلیل منطقی بیارین برای ارث بری چند گانه؟
منتظر جوابتون هستم...!
موفق باشین

در مورد وراثت چندگانه:
این نوع وراثت در شرایطی کاملن قابل توجیه و ممکن هست اونهم وراثت چندگاته از رفتارها هست. (Interface Inheritance) طبعن وراثت از دو تا کلاس Concrete به همون دلیلی که گفتید منطقی نیست اما یک شی می تونه از چند Interface به ارث ببره و اتفاقن بسیار هم کاربردیه. وراثت چندگانه یه این مدل خیلی هم کاراست. مثل یک دستگاه سه کاره که هم اسکنره هم پرینتر هم دستگاه کپی! یعنی داره از سه Interface به ارث می بره.

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

alireza_ars
سه شنبه 25 فروردین 1388, 22:45 عصر
در مورد وراثت چندگانه:
این نوع وراثت در شرایطی کاملن قابل توجیه و ممکن هست اونهم وراثت چندگاته از رفتارها هست. (Interface Inheritance) طبعن وراثت از دو تا کلاس Concrete به همون دلیلی که گفتید منطقی نیست اما یک شی می تونه از چند Interface به ارث ببره و اتفاقن بسیار هم کاربردیه. وراثت چندگانه یه این مدل خیلی هم کاراست. مثل یک دستگاه سه کاره که هم اسکنره هم پرینتر هم دستگاه کپی! یعنی داره از سه Interface به ارث می بره.

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

سلام
1_ بوجود آمدن جاوا هیچ ربطی به وجود ++c نداره...به دلیل مشکلات فراوانی که در برنامه نویسی برای serverهای sun با زبان ++c وجود داشت...آقای james gosling به حدی از ++c متنفر میشه که تصمیم به پیاده سازی پروژه جاوا میشه...تا INDEPENDENT بودن یک زبان رو به ارمغان بیاره...
ضمنا شما گفتین " همین امروزه کار هایی هست که فقط با سی پلاس پلاس می شه انجام داد "...!!! جای دیگه این حرف رو نزنین!!!...یا حداقل یه مثال بیارین تا بقیه برنامه نویسان دنیا هم از این قضیه مطلع بشن...!!!!...مخصوصا برنامه نویسان sun...!!!
موفق باشین

alireza_ars
سه شنبه 25 فروردین 1388, 22:53 عصر
جاوا یک علم نیست! در بهترین حالت تکنولوژیه! علم تعریفی داره و شما نباید به همچین چیزی محدودش کنید!

در ضمن اصولا در علم چیزی مطلق نیست! چه برسه به زیر مجموعه هاش (اگه بخوای فلسفی نگاه کنی). صحبت سر جاوا که چنانه و چنینه هم اینطوریا نیست که اگه بود همه هرچی زبان و تکنولوژی تو دنیا هست رو ول میکردن میشستن با جاوا کار میکردن. بهتره بدونید که بخش بسیار بزرگی از علم نرم افزار وجود داره که موقع توسعه با همون فرترن یا کوبول یا ++C پیاده سازی میشه و Net. یا جاوا یا ruby اصلا جایی توش نداره...

سلام
دوست عزیز
از آنجایی که علم نا محدوده...و جاوا هم نا محدوده...واسه همین جاوا لقب علم گرفته
ای کاش از update شدن های روزانه جاوا خبر داشتین...از کتابخانه هایی که هر روز واسه جاوا نوشته میشه...معجزه هستن...در بارشون تحقیق کنید
موفق باشید

MIDOSE
سه شنبه 25 فروردین 1388, 23:56 عصر
سلام
دوست عزیز
از آنجایی که علم نا محدوده...و جاوا هم نا محدوده...واسه همین جاوا لقب علم گرفته
ای کاش از update شدن های روزانه جاوا خبر داشتین...از کتابخانه هایی که هر روز واسه جاوا نوشته میشه...معجزه هستن...در بارشون تحقیق کنید
موفق باشید
والا من جاوا کار نیستم ولی تو نوشته هاتون به راحتی میشه تعصب را دید ضمنن با یک تحقیق کوچولو می شد فهمید چرا بعضی جاها سی پلاس پلاس بهتر است(مثال:پیاده سازی سطح کرنل یا برنامه های Real time یا بعضی بازی های کامپیوتری که نیاز به سرعت بالایی دارند):لبخند:

alireza_ars
چهارشنبه 26 فروردین 1388, 01:25 صبح
والا من جاوا کار نیستم ولی تو نوشته هاتون به راحتی میشه تعصب را دید ضمنن با یک تحقیق کوچولو می شد فهمید چرا بعضی جاها سی پلاس پلاس بهتر است(مثال:پیاده سازی سطح کرنل یا برنامه های Real time یا بعضی بازی های کامپیوتری که نیاز به سرعت بالایی دارند):لبخند:
سلام
ببینید تعصب داشتن عیب نیست...آدم به هر چیزی که علاقه داره...طبیعی هست که تعصب داشته باشه
اما نه بیش از اندازه...من فقط دفاع کردم...آخه یه چیزایی میگن که...
ضمنا..جاوا برای گیم درست کردن و اینا نیست
اما میشه درست کرد..اما بچه ها میگن با ++c برنامه ای میشه نوشت که با جاوا نمیشه!!!!
میتونین بحث ها رو بخونین
موفق باشین

mehdi_m1360
چهارشنبه 26 فروردین 1388, 09:17 صبح
در مورد اول اینکه تصور نکنید فقط شما جاوا کارید و بقیه ازش خبری ندارند! لااقل من که از نسخه 1.2 دارم باهاش جلو میرم و این چیزایی که شما میگین رو هم بیشتر مربوط به business model میدونم تا علم!

در مورد مثال، میتونید یه کار خیلی ساده انجام بدید، برنامه ای بنویسید که عدد پی رو تا 100000 رقم محاسبه کنه، بیبنید با فرترن به کجا میرسید، با ++C چه نتیجه ای میگیرید و همینطور با جاوا یا ruby! برنامه های realtime هم مثال خوبیه، نمونه دیگش نرم افزارهایی هستش که کاربرد نظامی دارند. مثال زیاد میشه زد...

با این صحبت ها داریم از بحث اینجا فاصله میگیریم و من ترجیح میدم ادامه ندیم، اما اگه علاقه داشتید میتونیم یه forum برای همین بحث باز کنیم.

cups_of_java
چهارشنبه 26 فروردین 1388, 12:10 عصر
شما دارید بحث اصلی رو به حاشیه می برید. حرف هایی که می زنی غلط نیستند اما "بزرگ نمایی" شده اند. نمی دونم چند سال هست که کلمه جاوا رو شنیدین اما تمام مطالبی رو که می گی برخی دوستان قبلن مطالعه کردن، تجربه کردن، یاد گرفتن و حس می کنند ولی شما داری یه کمی نابخردی می کنی. علاقه به جاوا یا هر چیز دیگه ای بد نیست (من خودم بخشی از زندگیم رو مدیونشم) اما شما باید یک مهندس واقعی و انسانی با دید باز باشید! علاقه بیش از اندازه چشم ها رو می بنده!

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


-اگر c++ نبود دنیای کامپیوتر و علم برنامه نویسی شاید به اینجا نمی رسید! چه برسه به جاوا! شما برید بیشتر کسب دانش کنید.
-فکر نمی کنم لزومی داشته باشه شما در مقابل تعدادی از دوستان با تجربه جاوا کار از جاوا دفاع کنید!
-جاوا بستر بسیار بزرگی از تکنولوژی ها و استاندارد هاست! (خیلی بزرگ) نه علم!
-نرم افزار هایی RealTime بسیار زیادی در کاربرد های مختلف هست که نوشتن اون ها با جاوا ریسک هستش.
-نوشتن یک درایور سخت افزاری با جاوا تقریبن اصلن عملی نیست!
-همین الان در بخش وب اینقدر زبان های توصیفی زیاد اومده که با چند کلیک web application درست می کنند! که مثلن دنبال جاوا رفتن برای یک web application برای یک فروشگاه اینترنتی دیوانگیه!
...

vcldeveloper
چهارشنبه 26 فروردین 1388, 16:14 عصر
دوستان،

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

ثانیا، از موضوع تاپیک خارج نشید. موضوع تاپیک تفاوت در وراثت در جاوا و ++C هست، اما بحثی که من الان دارم می بینم، کل کل بی مورد درباره جاوا و سایر زبان ها ست.

alireza_ars
یک شنبه 30 فروردین 1388, 14:18 عصر
سلام
من از همه بچه ها معذرت میخوام....مخصوصا از cups_of_java (http://www.barnamenevis.org/forum/member.php?u=67212) از mehdi_m1360 (http://www.barnamenevis.org/forum/member.php?u=92863) از MIDOSE (http://www.barnamenevis.org/forum/member.php?u=86226)

خیلی خیلی بی ادبانه رفتار کردم...بگذارید به حساب تازه کار بودن و مشکلات وسختی هایی که این مدت با آنها دست به قریبان بودم ...
در اینجا بین همه بچه های این تاپیک اعلام میکنم...در مقابل این دوستان چیزی نیستم...این دوستان واقعا با سواد هستن...و باز هم از این دوستان عذر میخوام...از صاحب این سوال هم معذرت میخوام که باعث شدم بحث عوض بشه
امید وارم منو به عنوان دوست منو بپذیرین و ببخشین و در جمعتون منو راه بدین....
موفق باشید...از طرف یک تازه کار

mazdadoost
پنج شنبه 03 اردیبهشت 1388, 10:58 صبح
جاوا امکان عوض کردن ساختار کلاس (و وراثت) رو با Reflection به شما نمی ده! از این حیث جاوا زبان dynamicی از نظر انواع داده نیست.
این تفاوتی بین جاوا و سی پلاس پلاس از نظر شی گرایی و وراثت نیست.

چرا میتونه دینامیک باشه!شما میتونید در رفلکشن متدی رو روی شی صدا بزنید که تعریف در کد کامپایل نشده باشه.و در استثنای تولیدی طوری رفتار کنید که انگار اون متد وجود داره!
و از طرفی .در مورد ساختار و امکانات API نکات مختلفی رو باید مد نظر داشت . مخصوصا برای زبان هایی که روی یک پلت فرم نرم افزاری پیاده شدن مثل جاوا یعنی زبان و فریم ورک در هم آمیخته هستن یکی بدون دیگری نمیتون باشه . اما درمورد زبان هایی که مستقیما (در هر صورت با واسطه اسمبل و اپ کد ) روی سخت افزار اجرا میشند این وابستگی کمتر هست و در نتیجه زبان و مرز های ساختار زبانی مشخص تر هست. اینکه وراثت جند گانه و یگانه و برتری هاشون نسبت به هم چیه به نظر من همونطور که گفتم صرفا دید متفاوتی از حل مسئله مدیریت کد هاست . (ما Objective C رو هم داریم که زبان Native مک هست و از واسط ها استفاده میکنه!).
در مورد C و CPP هم دوستی گفتن منسوخ شده که واقعا کم لطفی و تا حد زیادی بی اطلاعی هست.به نظرش همین جاوا رو تو پلت فرم های مختلف سخت افزاری پیاده سازی میکنند؟و همین براوزری که داره باش کار میکنه؟ و نرم افزار های افیسش .لینوکس ویندوز ووووووووو.

cups_of_java
پنج شنبه 03 اردیبهشت 1388, 22:30 عصر
چرا میتونه دینامیک باشه!شما میتونید در رفلکشن متدی رو روی شی صدا بزنید که تعریف در کد کامپایل نشده باشه.و در استثنای تولیدی طوری رفتار کنید که انگار اون متد وجود داره!Reflection در جاوا همچین مکانیزمی رو نداره! می شه منظورتون رو با مثال بیان کنید؟


اینکه وراثت جند گانه و یگانه و برتری هاشون نسبت به هم چیه به نظر من همونطور که گفتم صرفا دید متفاوتی از حل مسئله مدیریت کد هاستمنطورتون رو از مدیریت کد ها متوجه نمی شم!؟ اینا موضوعات طراحی شی گرا هستند.


Objective C چه ربطی به تفاوت های وراثت در جاوا و سی پلاس پلاس داره؟

mazdadoost
شنبه 05 اردیبهشت 1388, 11:08 صبح
Reflection در جاوا همچین مکانیزمی رو نداره! می شه منظورتون رو با مثال بیان کنید؟

منطورتون رو از مدیریت کد ها متوجه نمی شم!؟ اینا موضوعات طراحی شی گرا هستند.


Objective C چه ربطی به تفاوت های وراثت در جاوا و سی پلاس پلاس داره؟
جستجو بفرمایید.و تجربه.ضمنا Objective c از interface استفاده می کنه.

cups_of_java
شنبه 05 اردیبهشت 1388, 14:00 عصر
جستجو بفرمایید.و تجربه.ضمنا Objective c از interface استفاده می کنه.

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


2. عرض من این بود که object C اصلن ربطی به موضوع این بحث و سوال دوستمون نداشت.

mazdadoost
چهارشنبه 09 اردیبهشت 1388, 11:42 صبح
1. بازم می گم: Reflection امکاناتی مثل افزودن یک متد پویا به ساختار یک کلاس جاوا رو نمی ده. با Reflection شما فقط می تونی ساختار ها رو در زمان اجرا پیمایش کنی. بخونی و فراخوانی کنی.
شما هر حرفی می زنید باید بر اساس سند و دلیل باشه که بتونید ازش دفاع کنید. فکر می کنم در این زمینه در مدیریت دانشتون دچار اشتباهی شدید.


2. عرض من این بود که object C اصلن ربطی به موضوع این بحث و سوال دوستمون نداشت.
سلام:
1-از توجهتون ممنون.
2-اینکه بنده در مدیریت دانشم اشتباه کنم که در احتمالش شکی نیست.
3-در مورد دلیل و مدرک بنده به اون پست اولای تاپیک خودتون استناد کردم که فرموده بودید برید خودتون جستجو کنید و سوالای ...اینجا مطرح نکنید. با این حال میتونید در این لینک با استثنایی که گفتم بیشتر اشنا بشید.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/InvocationTargetException.html
4-در مورد ابجکتیو c به نظر بنده چون سوال این تاپیک تفاوت های وراثت در سی و جاوا بود و عده ای اصولا بحث رو به فرق سی پلاس پلاس و جاوا کشوندن و به نکته اصلی که اصولا سی زبانی شی گرا نیست که از وراثت پشتیبانی کنه رو مد نظر قرار ندادن در ادامه بنده سعی کردم بحث دوستان رو سط بدم. عده ای فرموده بودن وراثت چند گانه در جاوا با اینتر فیس ها ممکنه و در CPP با وراثت چند گانه مسقیم . بنده گفتم این صرفا نگاه متفاوت به مدیریت کد هاست. عده ای گفتن که cpp ابستراکت محظ نداره اما بد نیست به تمپلیت کلاس های cpp نگاه کنند. از طرفی ایا کلاس ها در جاوا همون هستنند که در جاوا هستنند .در جاوا شما دقیقا در اینترفیس ها در نقطه مقابل وراثت چند گانه مستقیم در CPP هستید که به عنوان فرق با این حدود مشخص میکنید . نظرتون در باره اینترفیس های مارکر چیه؟ و ربط رفلکشن و انونیشن و پردازنده ای بایت کد با معنا پیدا کردن این اینتر فیس ها .یا انونیشن ها با با رفلکش و اینکه امروز شما از انونش چقدر در ساختار کد هاتون استفاده میکنید (مثلا میتونید ماکرو های سی رو باشون شبیه سازی کنید!)یا ....
نگاه متفاوت به مدیریت کد ها : ببینید برنامه نویسی شی گرا لایه های اضافه ای رو روی کد ماشین برای رسیدن به تکامل زبان برنامه نویسی بنا میکنه . کمی که اشزاف برنامه نویس روی برنامه نویسی و رابطش با معماری کامپیوتر بیشتر بشه در قلب هر دستور زبان کامپایلر اینترپرتر و هر ابزار دیگه ای روح سطح پایین ابزار برنامه نویسیش رو میبینه . و اینکه چطور مثلا اینتر فیس ها در حافظه بار میشن و به کلاس های مختلف امکان ادقام و ارث بری چند گانه رو میدن. همینطور در مورد CPP و همه زبان ها . در نهایت تمام این قطعات کد به زبان ماشین که دستور العمل هایی روال گرا داره تبدیل میشن! این یعنی در هر زبان سطح بالایی یا سطح میانه شما دارید از امکاناتی که اون زبان یا در مورد جاوا یک پلت فرم برای مدیریت کد های بزرگ روی روال هایی که میتونن خیلی برای یک انسان پیچیده بشند کار میکنید.
5-تازگی ها در گیر دو پروژه جدید و نگهداری یکی از قدیمی ها هستم. متاسفانه پست هام هم تحت تاثیر کمی وقته.پس اگر کمو کاستی دیدید به بزرگی خودتون ببخشید.

cups_of_java
چهارشنبه 09 اردیبهشت 1388, 15:07 عصر
برید خودتون جستجو کنید و سوالای ...اینجا مطرح نکنید. با این حال میتونید در این لینک با استثنایی که گفتم بیشتر اشنا بشید.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/InvocationTargetException.html

این یک کلاس عمومی Exception هست معرف این که متدی که با Reflection صدا کردیم exception داده! همین! Reflection مکانیزمی برای تغییر ساختار کلاس های جاوا به طور پویا نداره!!!



عده ای فرموده بودن وراثت چند گانه در جاوا با اینتر فیس ها ممکنه و در CPP با وراثت چند گانه مسقیم . بنده گفتم این صرفا نگاه متفاوت به مدیریت کد هاست.

شما دید سطح پایین به شی گرایی دارید. دید یک طراح شی گرا (یا برنامه نویس شی گرا حتی) باید یک دید سطح بالا باشه تا بتونه ازش سالم و درست استفاده کنه. در شی گرایی این موارد اصلن اینطور به هم ربط داده نمی شن. ما از دید یک نویسنده کامپایلر به مسئله نگاه نمی کنیم!


ربط رفلکشن و انونیشن و پردازنده ای بایت کد با معنا پیدا کردن این اینتر فیس ها .یا انونیشن ها با با رفلکش و اینکه امروز شما از انونش چقدر در ساختار کد هاتون استفاده میکنید (مثلا میتونید ماکرو های سی رو باشون شبیه سازی کنید!)یا ....
نگاه متفاوت به مدیریت کد ها : ببینید برنامه نویسی شی گرا لایه های اضافه ای رو روی کد ماشین برای رسیدن به تکامل زبان برنامه نویسی بنا میکنه . کمی که اشزاف برنامه نویس روی برنامه نویسی و رابطش با معماری کامپیوتر بیشتر بشه در قلب هر دستور زبان کامپایلر اینترپرتر و هر ابزار دیگه ای روح سطح پایین ابزار برنامه نویسیش رو میبینه . و اینکه چطور مثلا اینتر فیس ها در حافظه بار میشن و به کلاس های مختلف امکان ادقام و ارث بری چند گانه رو میدن. همینطور در مورد CPP و همه زبان ها . در نهایت تمام این قطعات کد به زبان ماشین که دستور العمل هایی روال گرا داره تبدیل میشن! این یعنی در هر زبان سطح بالایی یا سطح میانه شما دارید از امکاناتی که اون زبان یا در مورد جاوا یک پلت فرم برای مدیریت کد های بزرگ روی روال هایی که میتونن خیلی برای یک انسان پیچیده بشند کار میکنید.


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

mazdadoost
پنج شنبه 10 اردیبهشت 1388, 13:55 عصر
این یک کلاس عمومی Exception هست معرف این که متدی که با Reflection صدا کردیم exception داده! همین! Reflection مکانیزمی برای تغییر ساختار کلاس های جاوا به طور پویا نداره!!!




شما دید سطح پایین به شی گرایی دارید. دید یک طراح شی گرا (یا برنامه نویس شی گرا حتی) باید یک دید سطح بالا باشه تا بتونه ازش سالم و درست استفاده کنه. در شی گرایی این موارد اصلن اینطور به هم ربط داده نمی شن. ما از دید یک نویسنده کامپایلر به مسئله نگاه نمی کنیم!




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

خوب هربر نامه نویسی اشرافه خودش رو به مسائل داره. بایدی در کار نیست!شی گرایی هم در اصول خودش کامل و بالغ نیست. جواب من شاید چون کمتر کتابی و بیشتر تجربی بود به نظر نا متعارف بیاد. منتها هر چه کیسه تجربه آدم پر تر میشه چیز هایی رو میبینه که دیگران نمیتونن ببینن. در مورد مسایل تئوریک کلا دام هایی جلوی افراد وجود داره که میتونه تا همیشه درگیرشون کنه.همین پارادایم در مباحثی در باره کاربرد اینترفیس ها -کلاس ها و ابستراکت کلاس ه در جاوا رو در تاپیک دیگر داشتم.

cups_of_java
پنج شنبه 10 اردیبهشت 1388, 23:12 عصر
خوب هربر نامه نویسی اشرافه خودش رو به مسائل داره. بایدی در کار نیست!شی گرایی هم در اصول خودش کامل و بالغ نیست. جواب من شاید چون کمتر کتابی و بیشتر تجربی بود به نظر نا متعارف بیاد. منتها هر چه کیسه تجربه آدم پر تر میشه چیز هایی رو میبینه که دیگران نمیتونن ببینن. در مورد مسایل تئوریک کلا دام هایی جلوی افراد وجود داره که میتونه تا همیشه درگیرشون کنه.همین پارادایم در مباحثی در باره کاربرد اینترفیس ها -کلاس ها و ابستراکت کلاس ه در جاوا رو در تاپیک دیگر داشتم.

1. بحث اشراف و یا تجربه نیست. بحث مدیریت دانش هست. بحثی که علمی و فنی هست و با معبار می شه سنجیدش دیگه دام و دید درش تاثیر نداره!


2. شی گرایی در اصولش بالغ هست و نا کامل نیست!


3. شما به جای اینکه برهان و منطق بیارید بحث رو به بی راهه می برید.

mazdadoost
شنبه 19 اردیبهشت 1388, 18:53 عصر
1. بحث اشراف و یا تجربه نیست. بحث مدیریت دانش هست. بحثی که علمی و فنی هست و با معبار می شه سنجیدش دیگه دام و دید درش تاثیر نداره!


2. شی گرایی در اصولش بالغ هست و نا کامل نیست!


3. شما به جای اینکه برهان و منطق بیارید بحث رو به بی راهه می برید.

1-بنده نظرات خودم رو گفتم و هیچ اجباری نیست کسی بپذیرتشون.
2-فک کنم تنهاچیز کاملی که انسان تا حالا سخته همین شی گرایی باشه که شما فرمودین .چون طبق اصول مصنوعات ذهن رو به پیشرفت انسان به علت اینکه در زمان به تکامل میرسند و کامل شدنشون نسبیه همگی ناقص هم هستند. شی گرایی هم استثنا نیست و مشکلات خواص خودش رو داره.(فعلا اینو جستجو کنید oop pitfalls).
3-درباره دلیل و منطق هم پیشنهاد میکنم دوباره تاپیک رو مطالعه بفرمایید.
موفق باشید.

cups_of_java
شنبه 19 اردیبهشت 1388, 23:50 عصر
1-
2-فک کنم تنهاچیز کاملی که انسان تا حالا سخته همین شی گرایی باشه که شما فرمودین .چون طبق اصول مصنوعات ذهن رو به پیشرفت انسان به علت اینکه در زمان به تکامل میرسند و کامل شدنشون نسبیه همگی ناقص هم هستند. شی گرایی هم استثنا نیست و مشکلات خواص خودش رو داره.(فعلا اینو جستجو کنید oop pitfalls).


این مسائل بر می گرده به استفاده نادرست و نا بجا از مفاهیم شی گرایی نه ناقص بودن یا مشکلات اون!
شما نمی تونید بگید تبر وسیله ناقصیه چون می شه باهاش سر یک آدم رو شکست! بلکه از تبر باید استفاده درست بشه (مثل تکه تکه کردن تنه شکسته درختان)
هر تکنولوژی ای رو می شه درست استفاده کرد می شه افراط و تفریط کرد!
:لبخندساده:

mazdadoost
دوشنبه 21 اردیبهشت 1388, 14:17 عصر
با شما در زمینه استفاده نابجا از ابزار موافقم . منتها چنانچه مایل باشید و وقت داشته باشید مایلم تویه تاپیک جداگانه درباره ویژه گی های شی گرایی در جاوا و حتی کلی تر و مشکلاتش به بحث بشینیم.
موفق باشید.

cups_of_java
دوشنبه 21 اردیبهشت 1388, 16:39 عصر
با شما در زمینه استفاده نابجا از ابزار موافقم . منتها چنانچه مایل باشید و وقت داشته باشید مایلم تویه تاپیک جداگانه درباره ویژه گی های شی گرایی در جاوا و حتی کلی تر و مشکلاتش به بحث بشینیم.
موفق باشید.

خیلی خوبه! تاپیک جالبی می تونه از آب در بیاد. فقط:
۱. دید دوستان باید در برنامه نویسی سطح بالا (نه زبان ماشین و performance و ...) باشه و معطوف بشه به شی گرایی نه مساپل دیگه! یعنی حوزه مسله مورد بحث روشن باشه.

۲. باز اینکه تصمیم بگیریم می خوایم از فلسفه شی گرایی به طور کلی و جدا از زبان حرف بزنیم یا امکانات شی گرایی پیاده سازی شده در جاوا! باز این دو تا دید مختلف به موضوع مورد بحث هستش!

panahifar
دوشنبه 15 تیر 1388, 15:32 عصر
سلام
من عضو جدیدم
ببینید...این یکی از معجزات جاوا هست که وراثت چند گانه رو نداره(تا برنامه قره قورتی نشه)...بلکه interface داره
"پشتیبانی نمیکنه" نگین...چون یه نوعی ضعف به نظر میاد...در حالی که این قدرت مطلقی هست که جاوا در اختیار برنامه نویس قرار میده
جاوا اصول داره...هیچ وقت با سی پلاس پلاس مقایسه نکنین...یا با هر زبانه قره قورتی دیگه ای
اگه در مورد جاوا سوالی داشتین...مستقیم بپرسین...نه با مقایسه
اونوقت میفهمین فرق جاوا با دیگر زبانها چیه

ببین دوست خوبم این حرف رو به ذهنت بسپار .
"تعصب عصای دست آدمای ضعیف"
من برنامه نویسی با سی++ رو دوست دارم ولی تعصبی نسبت به این برنامه نویسی رو ندارم چرا ؟ چون عصر عصر تکنولوژی و پیشرفته