# فناوری جاوا > برنامه‌نویسی جاوا > بحث و گفتگو در مورد فناوری های مرتبط با جاوا > سوال: تفاوت وراثت در جاوا و سی

## master89

سلام دوستان
در مورد تفاوت وراثت در زبان java و c کی اطلاعات داره؟
لطفا کمک کنید .

----------


## cups_of_java

منظورتون سی پلاس پلاس هست دیگه!؟

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

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

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

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

----------


## mehdi_m1360

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


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

----------


## cups_of_java

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



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

----------


## mehdi_m1360

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


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

----------


## cups_of_java

> حرف شما درسته، این از خواص وراثته و جزو تفاوتها. من تصور کردم که منظور شما به ارث نرسیدن اون متدهاست بنابراین خواستم موضوع رو به این صورت اصلاح کنم که تمامی متدها به ارث میرسند و این تعاریف(publicو private و ...) مربوط میشه به حوزه دسترسی یعنی بنا به تعریف به برخی دسترسی داریم و به برخی خیر.


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

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

class Child : private Parent {
...
}

----------


## alireza_ars

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

----------


## mehdi_m1360

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

----------


## mazdadoost

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


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

----------


## mehdi_m1360

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

----------


## mazdadoost

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

----------


## cups_of_java

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


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

----------


## cups_of_java

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


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

----------


## alireza_ars

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

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

موفق باشید

----------


## alireza_ars

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

----------


## alireza_ars

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


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

----------


## mehdi_m1360

> سلام
> دوست عزیزمون آقا مهدی که میگن "  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

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


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

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

----------


## cups_of_java

> سلام
> دوست عزیزمون آقا مهدی که میگن "  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

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


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

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

----------


## alireza_ars

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


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

----------


## alireza_ars

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


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

----------


## MIDOSE

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


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

----------


## alireza_ars

> والا من جاوا کار نیستم ولی تو نوشته هاتون به راحتی میشه تعصب را دید ضمنن با یک تحقیق کوچولو می شد فهمید چرا بعضی جاها سی پلاس پلاس بهتر است(مثال:پیاده سازی سطح کرنل یا برنامه های Real time یا بعضی بازی های کامپیوتری که نیاز به سرعت بالایی دارند)


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

----------


## mehdi_m1360

در مورد اول اینکه تصور نکنید فقط شما جاوا کارید و بقیه ازش خبری ندارند! لااقل من که از نسخه 1.2 دارم باهاش جلو میرم و این چیزایی که شما میگین رو هم بیشتر مربوط به business model میدونم تا علم!

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

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

----------


## cups_of_java

شما دارید بحث اصلی رو به حاشیه می برید. حرف هایی که می زنی غلط نیستند اما "بزرگ نمایی" شده اند. نمی دونم چند سال هست که کلمه جاوا رو شنیدین اما تمام مطالبی رو که می گی برخی دوستان قبلن مطالعه کردن، تجربه کردن، یاد گرفتن و حس می کنند ولی شما داری یه کمی *نابخردی* می کنی. علاقه به جاوا یا هر چیز دیگه ای بد نیست (من خودم بخشی از زندگیم رو مدیونشم) اما شما باید یک _مهندس واقعی_ و انسانی با دید باز باشید! علاقه بیش از اندازه چشم ها رو می بنده!

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


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

----------


## vcldeveloper

دوستان،

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

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

----------


## alireza_ars

سلام
من از همه بچه ها معذرت میخوام....مخصوصا از cups_of_java    از   mehdi_m1360    از MIDOSE

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

----------


## mazdadoost

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


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

----------


## cups_of_java

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


Reflection در جاوا همچین مکانیزمی رو نداره! می شه منظورتون رو با مثال بیان کنید؟




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


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


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

----------


## mazdadoost

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


جستجو بفرمایید.و تجربه.ضمنا Objective c از interface استفاده می کنه.

----------


## cups_of_java

> جستجو بفرمایید.و تجربه.ضمنا Objective c از interface استفاده می کنه.


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


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

----------


## mazdadoost

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


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

----------


## cups_of_java

> برید خودتون جستجو کنید و سوالای ...اینجا مطرح نکنید. با این حال میتونید در این لینک با استثنایی که گفتم بیشتر اشنا بشید.
> http://java.sun.com/j2se/1.4.2/docs/...Exception.html


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





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


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




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



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

----------


## mazdadoost

> این یک کلاس عمومی Exception هست معرف این که متدی که با Reflection صدا کردیم exception داده! همین! Reflection مکانیزمی برای تغییر ساختار کلاس های جاوا به طور پویا نداره!!!
> 
> 
> 
> 
> شما دید سطح پایین به شی گرایی دارید. دید یک طراح شی گرا (یا برنامه نویس شی گرا حتی) باید یک دید سطح بالا باشه تا بتونه ازش سالم و درست استفاده کنه. در شی گرایی این موارد اصلن اینطور به هم ربط داده نمی شن. ما از دید یک نویسنده کامپایلر به مسئله نگاه نمی کنیم!
> 
> 
> 
> ...


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

----------


## cups_of_java

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


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


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


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

----------


## mazdadoost

> 1. بحث اشراف و یا تجربه نیست. بحث مدیریت دانش هست. بحثی که علمی و فنی هست و با معبار می شه سنجیدش دیگه دام و دید درش تاثیر نداره!
> 
> 
> 2. شی گرایی در اصولش بالغ هست و نا کامل نیست!
> 
> 
> 3. شما به جای اینکه برهان و منطق بیارید بحث رو به بی راهه می برید.


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

----------


## cups_of_java

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


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

----------


## mazdadoost

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

----------


## cups_of_java

> با شما در زمینه استفاده نابجا از ابزار موافقم . منتها چنانچه مایل باشید و وقت داشته باشید مایلم تویه تاپیک جداگانه درباره ویژه گی های شی گرایی در جاوا و حتی کلی تر و مشکلاتش به بحث بشینیم. 
> موفق باشید.


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

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

----------


## panahifar

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


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

----------

