0 امتیاز
قبل در برنامه نویسی توسط (10 امتیاز)
ویرایش شده قبل توسط

در زبان سی داده ها و حتی اشیا هنگام ارسال به توابع کپی می شوند به گونه ای که ما اطمینان داریم که بدون تصریح شدن از جانب ما (ارسال با ارجاع) یک تابع نمی تواند داده و شی را در بیرون از محدوده ی خود تغییر بدهد

اما در جاوا به علت ارسال شدن اشیاء به صورت by pointer این مشکل وجود دارد

در واقع هرگاه ما یک شی را در جاوا به تابعی ارسال می کنیم، ممکن است بدون اجازه ما داده ها و فیلدهای آن شی تغییر داده شود

آیا این یک مشکل امنیتی نیست؟

مگر اینکه قبل از هر بار ارسال یک مرتبه از clone استفاده کنیم، که آیا در این صورت رویکرد زبان سی بهینه تر نبوده است؟

2 پاسخ

0 امتیاز
قبل توسط (40 امتیاز)
ویرایش شده قبل توسط

نه عزیز این دوتا هیچ ربطی نداره.

 C یکی از ضعیف ترین ها در امنیت هست و اصلا نقطه ی قوت جاوا در امنیتش هست.

شما در C می تونید Call by Refrence  و Call by value  داشته باشید و مدیریتش با خودتونه اما در جاوا تمام متغیر ها به جز primitive ها از نوع Object هستند و نمیشه به صورت معمولی بدون Clone کردن Call by value داشت .

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

یا متد ها رو خودتون نوشتید و مسئولیتش با خودتونه. یعنی بدون اجازه دیگه نمیشه.

یا از متد کس دیگری استفاده می کنید که خوب اون فرد باید تو مستنداتش بگه متغیر شما تغییر خواهد کرد و نتیجه در همین متغیر به شما داده میشه.

البته زبان های دیگه مثل php ,  و #C می تونید به صراحت این دو روش رو تعیین کنید.

قبل توسط (10 امتیاز)
امیدوارم نحوه ی بحث علمی رو رعایت کنیم و از جملاتی مانند این بپرهیزیم:
"از هر کسی که سه واحد programming language پاس کرده یا درس داده بپرسی بهت میگه"
یا
"اما جاواست دیگر گاهی اوقات اینجوری حال می کند."

بخشی از امنیت این است که برنامه نویس از اشتباهات سهوی دور بماند، این رویکرد جاوا نقض کننده این بخش از امنیت است
و سی در این بخش بهتر و مطمئن تر عمل کرده است
قبل توسط (40 امتیاز)
منظور من شما نبودید . برای تلطیف جو گفتم.  در این بخش شاید ولی در کل سی زبان امنی نیست.
زبان های دیگر هم این قابلیت را دارند و جاوا برای سادگی همه چیز را Object در نظر گرفته.
بازم معذرت اگر ناراحت شدید. جوابو اصلاح کردم.
0 امتیاز
قبل توسط (90 امتیاز)
ویرایش شده قبل توسط

شما می توانید از کلید واژه final استفاده کنید. 

سوالات مشابه

+1 امتیاز
1 پاسخ 683 بازدید
+2 امتیاز
1 پاسخ 2.1هزار بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Mahkh (130 امتیاز)
+1 امتیاز
1 پاسخ 449 بازدید
+2 امتیاز
3 پاسخ 2.9هزار بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
+1 امتیاز
1 پاسخ 342 بازدید
+1 امتیاز
1 پاسخ 1.1هزار بازدید
+1 امتیاز
2 پاسخ 328 بازدید
...