نمایش نتایج 1 تا 10 از 10

نام تاپیک: من از جاوا چی باید بخوام!؟

  1. #1

    Question من از جاوا چی باید بخوام!؟

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

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

  2. #2

    نقل قول: من از جاوا چی باید بخوام!؟

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

  3. #3
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: من از جاوا چی باید بخوام!؟

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

  4. #4

    نقل قول: من از جاوا چی باید بخوام!؟

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    مشکل اصلی انتظاراتی هست که از زبان های برنامه نویسی داریم. هر کاری زبان یا زبان های مناسبی براش هست و نباید رو یک زبان اصرار داشت. مثلا اگر میخوای برای اندروید برنامه بنویسی که امروزه خیلی هم پرکاربرده میتونی از جاوا استفاده کنی، اگر میخوای برنامه تحت وب بنویسی php هست ولی ممکنه در برخی موارد سمت جاوا بری و...
    دقیقا درست گفتی من از جاوا انتظار همه چی رو دارم ! اینو تازه فهمیدم که جاوا برای همه چی ساخته نشده باید برای هر کاری به سمت زبان مخصوص به خودشو بری!‌ قبلا فکر میکردم جاوا خیلی کامله و برای همه چی ساخته شده و بخاطر این بود که اینجوری بهم معرفیش کرده بودن! این اشتباه خیلی برام گرون تموم شد ممنون!!!!!

  5. #5

    نقل قول: من از جاوا چی باید بخوام!؟

    یه سوال جدید داشتم اگه میشه بگید چرا ما از چند ریختی استفاده میکنیم!؟ یا بهتره بگم چرا ما میگیم مثلا
    Player p = new Mp3Player();
    با فرض اینکه Mp3Player از کلاس Player ارثبری میکنه.
    دلیل سوالمم اینه که مثلا کلاس Mp3Player یک سری رفتارها داره که قاعدتا از رفتارهای کلاس پدر گسترده تر هستن، بعد وقتی ما داریم نوع متغیرمون رو Player میگیریم اون رفتارهایی که متفاوت با Player هستن رو نمیتونیم فراخوانی کنیم و ازشون استفاده کنیم خوب چرا من باید همچین کاری بکنم!؟
    نمیدونم شایدم من مفهوم چندریختی رو اشتباه متوجه شدم. لطفا راهنمایی بفرمایید!!

    ویرایش: مثلا کد
    List aList = new ArrayList();
    الان aList من به متد clone که در کلاس ArrayList هستش دسترسی نداره الان چرا من باید از این روش استفاده کنم؟! دلیل این کار چیه؟! خیلی برام عجیبه وقتی که من دارم محدود میشم به متدهای List چرا باید سازنده یک ArrayList رو فراخوانی کنم؟! خب همون List رو فراخوانی میکنم بهتره دیگه!!!!

  6. #6
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: من از جاوا چی باید بخوام!؟

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

  7. #7

    Question نقل قول: من از جاوا چی باید بخوام!؟

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    هر چند بهتر بود برای این سوال کلا یه تاپیک دیگه ایجاد میکردید. ولی کاربردهاش زیاده، فقط یک مثال میزنم. فرض کنید من یک تابع مینویسم که ورودی List رو میگیره و هر چی از List ارث ببره میتونه اونجا قرار بگیره. پس من تابعی که مینویسم طیف وسیعی از کلاس ها رو پوشش میده و نیازی نیست برای هر کلاس دوباره کد بنویسم. فرض کنید این تابع در یک کتابخانه باشه، اونوقت اگر چنین چیزی نباشه هر کلاسی که از List ارث بری کنه، باید کتابخونه رو تغییر بدی یا کلا اون متد رو دوباره بنویسی. ولی وقتی یک متد یا تابع میگه من این ورودی رو قبول میکنم و عملیات متناسب باهاش رو انجام میدم، اونوقت هر چند تا کلاس دیگه بخوایم بنویسیم به راحتی در این تابع جواب میده
    شک داشتم که تایپیک جدید بزنم یا نزنم از این به بعد واسه هر سوال جدیدی که یه بحث جدید رو باز میکنه، یک تایپیک جدید باز میکنم.

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

    شما فرمودید که یه تابع که یک لیست رو از ورودی بگیره خب درنظر میگیریم یک تابع x یک ورودی از نوع لیست رو میگیره!
    void x(List aList){}

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

    public static void main(String args[]){

    List<Character> aListMain = new ArrayList();

    for(char i = 'a'; i <= 'z'; i++)
    aListMain.add(s);

    x(aListMain);
    }


    اینجا الان من باز با همون ابهام مواجه شدم چرا من باید کانستراکتور ArrayList رو فراخوانی کنم درصورتی که میتونستم کانستراکتور List رو فراخوانی کنم. مشکل من اینجاست این ابهام برام قابل درک نیست و متوجه نمیشم.

  8. #8
    کاربر دائمی آواتار vahid-p
    تاریخ عضویت
    آذر 1391
    محل زندگی
    تهران
    پست
    1,140

    نقل قول: من از جاوا چی باید بخوام!؟

    List کانستراکتور نداره و یک interface هست. ببینید مثلا متد x شما طول یک لیست رو بر میگردونه.
    خب حالا ممکنه من بیام دو تا کلاس Stack و Queue رو ایجاد کنم که هر دو List رو implement میکنند. خب مشخصا اگر فرق صف (Queue) و پشته (Stack) رو بدونید، مطمئنا نمیتونید بگید کانستراکتور List رو صدا بزنم چون هر کلاس برای عملکرد خاصی طراحی شده، نمیشه که یه چیز دیگه رو ایجاد کنید. ولی در این میان یه سری چیزا مشترکه و مربوط به هر لیستی از جمله Stack و Queue میشه. مثلا طول لیست. مثلا عنصر اول لیست (هر چند دقت کنید اینجا جوابها یکی نیست و بر حسب نوع implementation می تونه جوابها متفاوت باشه). مثلا پاک کردن لیست. مثلا اضافه کردن یک عنصر جدید. همه اینا چیزی هست که برای تمام لیست ها صدق میکنه و کافیه یه بار بنویسیم.
    حالا تو برنامه اگر بنویسیم:

    public static int max(List<Integer> aList){
    int max=Integer.MIN_VALUE;
    for(int i=0;i<aList.size();i++){
    if(max<aList.get(i)){
    max=aList.get(i);
    }
    }
    return max;
    }


    خب الان راحت میتونم هر subclass ای از List رو به این تابع بدم. البته generic type اش integer باشه وگرنه مثلا بزرگتری کوچکتری استفاده شده در تابع شاید براش معنی نده.

    Stack<Integer> myStack = new Stack<>();
    Queue<Integer> myQueue = new Queue<>();


    max(myStack);
    max(myQueue);


    اینجا جوابشون یکیه، ولی لزومی نداره جوابشون یکی باشه (چون پیاده سازی متفاوته) ولی همخوانی داره چون ما برای هر List ای به صورت کلی نوشتیم.

  9. #9

    نقل قول: من از جاوا چی باید بخوام!؟

    نقل قول نوشته شده توسط vahid-p مشاهده تاپیک
    List کانستراکتور نداره و یک interface هست. ببینید مثلا متد x شما طول یک لیست رو بر میگردونه.
    خب حالا ممکنه من بیام دو تا کلاس Stack و Queue رو ایجاد کنم که هر دو List رو implement میکنند. خب مشخصا اگر فرق صف (Queue) و پشته (Stack) رو بدونید، مطمئنا نمیتونید بگید کانستراکتور List رو صدا بزنم چون هر کلاس برای عملکرد خاصی طراحی شده، نمیشه که یه چیز دیگه رو ایجاد کنید. ولی در این میان یه سری چیزا مشترکه و مربوط به هر لیستی از جمله Stack و Queue میشه. مثلا طول لیست. مثلا عنصر اول لیست (هر چند دقت کنید اینجا جوابها یکی نیست و بر حسب نوع implementation می تونه جوابها متفاوت باشه). مثلا پاک کردن لیست. مثلا اضافه کردن یک عنصر جدید. همه اینا چیزی هست که برای تمام لیست ها صدق میکنه و کافیه یه بار بنویسیم.
    حالا تو برنامه اگر بنویسیم:

    public static int max(List<Integer> aList){
    int max=Integer.MIN_VALUE;
    for(int i=0;i<aList.size();i++){
    if(max<aList.get(i)){
    max=aList.get(i);
    }
    }
    return max;
    }


    خب الان راحت میتونم هر subclass ای از List رو به این تابع بدم. البته generic type اش integer باشه وگرنه مثلا بزرگتری کوچکتری استفاده شده در تابع شاید براش معنی نده.

    Stack<Integer> myStack = new Stack<>();
    Queue<Integer> myQueue = new Queue<>();


    max(myStack);
    max(myQueue);


    اینجا جوابشون یکیه، ولی لزومی نداره جوابشون یکی باشه (چون پیاده سازی متفاوته) ولی همخوانی داره چون ما برای هر List ای به صورت کلی نوشتیم.

    ممنون بابت توجه شما... من خیلی جستجو کردم و الان با این صحبتهای شما و مطالبی که این چندروزه یادگرفتم یه برداشتی دارم که پایین کامل درباره‌اش مینویسم لطفا در ادامه پاسخ بدید که من مطمئن بشم برداشتم چقدر درست و چقدر غلط بوده ممنون.
    خب من الان میتونم بگم که لیست یه تعریف کلی از یک کلاس یا اینترفیس هستش که قرار برای ما قوانین انجام یک کاری رو تعریف کنه و زمانی که داریم List رو implement میکنیم روی دو کلاس Stack , Queue درواقع از دیدگاه لیست داریم دوتا برداشت میکنیم یا بهتره بگیم که داریم دوتا کار انجام میدیم با قوانینی که برای لیست تعریف کردیم.

    List aList = new Stack();
    List aList = new Queue();

    میتونم اینطور بگم که aList ظاهرا List هستش اما داره کاره Stack رو انجام میده یا مثلا کاره Queue رو انجام میده نمیدونم.
    یک مثالی یکی از استادام زد که برام گنگ بود الان که شما گفتید متوجه شدم که چیکار میکنه این پایین کدش رو میزارم همون مثال Player بود

    public interface Player(){
    public void Play();
    }

    public class Mp3Player implement Player{
    public void Play(){
    System.out.println("Player Play Mp3");
    }
    }

    public class Mp4Player implement Player{
    public void Play(){
    System.out.println("Player Play Mp4");
    }
    }


    الان من این کد رو کامل متوجه شدم زمانی که من میگم
    Play multimediaPlayer = new Mp3Player();
    در واقع من یک کار رو تعریف کردم بصورت کلی به نام Play که کارش پخش کردن هستش الان با فراخوانی کانستراکتور Mp3Player دارم نوع کاری که باید انجام بده رو تعیین میکنم خیلی جالبه پس مفهوم چندریختی میشه این واقعا ممنونم اصلا یه دنیای جدید بروم باز شد یه دیگه خیلی جالب از برنامه نویسی تاز فهمیدم این کار به چه دردی میخوره.!
    aList در ظاهر یک لیست هستش اما داره کاره یک ArrayList رو انجام میده و قطعا رفتارش مثل یک ArrayList هست پس منم باید رفتارم با اون مثل یک ArrayList باشه.
    همونجوری که ممکنه مثل یک Stack یا Queue رفتار کنه.
    متشکرم بابت آموزشتون ممنون.

  10. #10

    نقل قول: من از جاوا چی باید بخوام!؟

    نقل قول نوشته شده توسط silverado1371 مشاهده تاپیک
    ممنون بابت توجه شما... من خیلی جستجو کردم و الان با این صحبتهای شما و مطالبی که این چندروزه یادگرفتم یه برداشتی دارم که پایین کامل درباره‌اش مینویسم لطفا در ادامه پاسخ بدید که من مطمئن بشم برداشتم چقدر درست و چقدر غلط بوده ممنون.
    خب من الان میتونم بگم که لیست یه تعریف کلی از یک کلاس یا اینترفیس هستش که قرار برای ما قوانین انجام یک کاری رو تعریف کنه و زمانی که داریم List رو implement میکنیم روی دو کلاس Stack , Queue درواقع از دیدگاه لیست داریم دوتا برداشت میکنیم یا بهتره بگیم که داریم دوتا کار انجام میدیم با قوانینی که برای لیست تعریف کردیم.

    List aList = new Stack();
    List aList = new Queue();

    میتونم اینطور بگم که aList ظاهرا List هستش اما داره کاره Stack رو انجام میده یا مثلا کاره Queue رو انجام میده نمیدونم.
    یک مثالی یکی از استادام زد که برام گنگ بود الان که شما گفتید متوجه شدم که چیکار میکنه این پایین کدش رو میزارم همون مثال Player بود

    public interface Player(){
    public void Play();
    }

    public class Mp3Player implement Player{
    public void Play(){
    System.out.println("Player Play Mp3");
    }
    }

    public class Mp4Player implement Player{
    public void Play(){
    System.out.println("Player Play Mp4");
    }
    }


    الان من این کد رو کامل متوجه شدم زمانی که من میگم
    Play multimediaPlayer = new Mp3Player();
    در واقع من یک کار رو تعریف کردم بصورت کلی به نام Play که کارش پخش کردن هستش الان با فراخوانی کانستراکتور Mp3Player دارم نوع کاری که باید انجام بده رو تعیین میکنم خیلی جالبه پس مفهوم چندریختی میشه این واقعا ممنونم اصلا یه دنیای جدید بروم باز شد یه دیگه خیلی جالب از برنامه نویسی تاز فهمیدم این کار به چه دردی میخوره.!
    aList در ظاهر یک لیست هستش اما داره کاره یک ArrayList رو انجام میده و قطعا رفتارش مثل یک ArrayList هست پس منم باید رفتارم با اون مثل یک ArrayList باشه.
    همونجوری که ممکنه مثل یک Stack یا Queue رفتار کنه.
    متشکرم بابت آموزشتون ممنون.

    البته دراین شرایطی که کلاس پلیر شما داره انتزاعی تر بود اگر از یک کلاس abstract استفاده میکردید البته که اینترفیس هم ضمنی یک abstract هستش و حتی در نسخه 8 جاوا سطح انتزاع یک کلاس اینترفیس با تعریف متد پیش فرض به کلاس abstract نزدیک تر شده
    به هرحال این یکی از راههای هزارتوی پلی مورفیسم که البته استاد عزیزم vahid-p خیلی خوب توضیح دادند البته برای اینکه بتونید تشخیص بدید که کجا وکی از کدوم نوع کلاس استفاده کنید به ممارست وتمرین زیاد احتیاج هست مثلا همین اینترفیس کاربردهای عجیبی داره که وقتی باهاش درگیر بشی میفهمی شبیه اعجاز در زبان عمل میکنه به هر حال همونطور که ازنامش مشخصه یک واسطه هستش ولی واقعا باید یک اسم دیگه براش تعریف میکردن به خاطر عملکردش مثلا شاید یه جایی احتیاج به اشاره گری از آبجکت نیاز داشته باشی که تو یه نخ و توی حوضچه دیگه ای فعال هستش ما ها که از خیلی قبل تر ها با ++c برنامه نویسی میکنیم حتما میرفتیم سراغ یه pointer آبجکت و مشکلمون و حل میکردیم ولی جاوا که اشاره گر نداره پس اینجاست که اینترفیس وارد بازی میشه خیلی بی درد سر میتونه برای مون اینکار بکنه البته اینم بگم زمانی این جلوه بیشتری پیدا میکنه که شما نمی تونید از آبجکتهای استاتیک استفاده کنید مثال اندروید به علت مسائل رخته در حافظه
    در کل استفاده از زبانهای شی گرا نسیت به زبانهای رویه ایی تفاوت در طراحی نرم افزار در امنیت و سرعت و قابل استفاده مجدد بودن کد هاست وگرنه که میتوان برخی مسائل را بدون شی گرایی هم حل کرد
    و اگر برای اینکه بینش بهتری نسبت به شی گرایی پیدا کنید بهتر است از مفاهیم طراحی شی گرایی SOLID و همچنین استفاده Pattern ها غافل نشوید تا به اهمیت استفاده از چی و کجا در برنامه نویسی دست پیدا کنید که اینهم همانطور که گفتم تمرین میخواهد البته تکنولوژی های جدید هم در این راستا خیلی کمک میکنند مثلا با ظهور جاوا 8 برخی از مفاهیمی که برنامه نویس رو خیلی درگیر میکرد کمرنگ تر شده بجای اینکه فکر کنیم چی طور باید کد بزنیم به این فکر کنیم که چی می خواهیم جاوا 8 خودش برخی کارها رو میکنه

تاپیک های مشابه

  1. چطور خروجی بگیرم تو سایت(باید از جاوا استفاده کنم؟)؟
    نوشته شده توسط hamidreza1636 در بخش JavaScript و Framework های مبتنی بر آن
    پاسخ: 2
    آخرین پست: شنبه 07 فروردین 1389, 02:37 صبح
  2. سوال: چطور خروجی بگیرم تو سایت(باید از جاوا استفاده کنم؟)؟
    نوشته شده توسط hamidreza1636 در بخش برنامه‌نویسی جاوا
    پاسخ: 3
    آخرین پست: سه شنبه 08 دی 1388, 00:55 صبح
  3. مبتدی: سوال های من از جاوا
    نوشته شده توسط قله بلند در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 15
    آخرین پست: شنبه 07 آذر 1388, 13:23 عصر
  4. خروج از رویه مثل Exit Function یا Exit Sub در VB ، تو #C چی باید نوشت ؟
    نوشته شده توسط rahele_sa در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: چهارشنبه 27 دی 1385, 17:29 عصر
  5. من از کجا باید شروع کنم ؟
    نوشته شده توسط shab navard در بخش ASP.NET Web Forms
    پاسخ: 7
    آخرین پست: دوشنبه 17 اسفند 1383, 11:40 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •