فلسفه برنامه نویس چکیده: جنبه های فلسفی برنامه نویسی

آیا ارزش یادگیری برنامه نویسی را دارد؟

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

نکته اصلی این است…

یادگیری برنامه نویسی یا عدم یادگیری؟

سواد در هر زبان کامپیوتری، از HTML ساده گرفته تا C++ پیچیده، نه تنها نیازمند تعهد به فناوری، بلکه به تغییرات بی پایان آن است. HTML5 به دلیلی با یک عدد به پایان می رسد. هنگامی که مرورگرهای وب به اندازه کافی از HTML6 پشتیبانی می کنند، توسعه دهندگان باید دوباره چیزهای جدیدی یاد بگیرند.

دلایل احتمالی برای اینکه بخواهید خودتان را در یک فرآیند یادگیری جدید درگیر کنید:

  • به دست آوردن اعتماد به نفس: چندین مشتری داشتم که فکر می کردند اگر به یک زبان برنامه نویسی تسلط داشته باشند، کامپیوترها کمتر آنها را می ترسانند.
  • ضرورت: مشکلات فنی هر لحظه ممکن است ایجاد شود.
  • هیجان: برخی افراد فقط می خواهند مهارت های جدیدی یاد بگیرند.
  • برای درک آنچه ممکن است: وقتی یک توسعه دهنده می گوید: "این کار غیرممکن است!" آیا منظور او این است که واقعاً این امکان پذیر نیست یا فقط نمی خواهد این سردرد را تحمل کند؟

همیشه کنجکاو باشید

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

من سه رویکرد برای حل یک مشکل با هر پروژه دارم:

  • موضوعی را پیدا کنید که شما را آزار دهد

زمان بندی و پرداخت همه خوب است. اما هیچ چیز بیشتر از خارشی که نمی توان به آن دست یافت به شما انگیزه می دهد. در آینده ای امیدوارکننده، برنامه نویسی نباید به خودی خود یک هدف باشد. این باید به عنوان "چربی برای درهای ترش" شما عمل کند.

  • شما باید برای تلاش اضافی پاداش بگیرید

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

  • پروژه شما باید در حالی انجام شود که مغز شما اشتها دارد.

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

روزانه تمرین کنید

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

امانوئل کانت، کلاهبردار فلسفه، چیز بزرگی برای آنگوستیسیسم ارائه کرد. به اصطلاح "چیز فی نفسه". یک چیز فوق العاده جالب
تراشه به شرح زیر است: در فرآیند معرفتی معمول، یک ارتباط شی - سوژه وجود دارد. آن ها همیشه یک شی وجود دارد که سوژه آن را می شناسد.
دیدگاه‌های زیادی وجود دارد که می‌آموزیم (ایده‌آلیسم، ماتریالیسم و ​​جریان‌های بعدی آنها)، یکی در اینجا کانت از همه پیشی گرفت.
در درک او، شما فقط زمانی می توانید چیزی را بدانید که به شما اجازه دهد. برای مثال، اگر چیزی نمی‌خواهد باز شود، هرگز نمی‌دانید که از چوب ساخته شده است، حتی اگر آن را ببرید.
آن ها او با یکسان دانستن آن با فاعل به آن اراده می دهد. بنابراین، تا زمانی که شما چیز را بشناسید، آن چیز نیز شما را خواهد شناخت. روابط در سطوح مختلف به یک سطح مهاجرت کردند.

دیوانه کننده به نظر می رسد، اما تأیید این فرضیه را می توان همه جا یافت. مثلا مربع سیاه مالویچ. بسیاری آن را فقط یک مربع سیاه می دانند، در حالی که دیگران معنای عمیقی را می بینند.
این کاملاً ممکن است که میدان به سادگی به روی شما باز نشده باشد، اما شخصی در آن بینش پیدا کرده است. و از این قبیل موارد زیاد است. از این گذشته ، اغلب افراد زیادی از کنار چیزی عبور می کنند ، و سپس یک نفر ناگهان کشف / اختراع را به معنای واقعی کلمه انجام می دهد چیزهای سادهکه در اطراف ما خوابیده بودند، اما ما "متوجه" آنها نشدیم. در آنجا، شاید موضوع این نیست که ما متوجه آنها نشده ایم، بلکه چیزها به روی ما باز نشده است؟ این موقعیت بسیار بحث برانگیز و جالب شانس بسیار واقعی برای وجود در واقعیت دارد.

برای مثال، اگر جهان یک برنامه عظیم بود، آیا خالق می‌خواهد کلاس‌های مختلفی برای توصیف اشیاء مختلف ایجاد کند؟ البته نه، چون همه چیز به حداقل انرژی تمایل دارد، همه تا آنجا که می توانند تنبل هستند. بنابراین، برای اینکه زیاد مزاحم نشوید، برنامه نویس یونیورسال تنها یک کلاس برای همه اشیا ایجاد می کند. و فقط باید 1 نوع تعامل شی به شی را مدیریت کند. و کاملاً ممکن است که دقیقاً به همین دلیل، شیء تنها زمانی شیء دیگر را درک کند که تصمیم بگیرد خود را به روی او باز کند.

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

تراز تابع (مقادیر) مقادیر = الگوریتم محاسبه مقادیر

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

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

دیمیتری یاکوشف

"فلسفه"

برنامه نویسی C++

چاپ دوم، بزرگ شده و تصحیح شده است

UDC 004.43 BBK 32.973.202

یاکوشف دی.ام.

Ya49 "فلسفه" برنامه نویسی در C++. / D. M. Yakushev. - ویرایش دوم - م.: بوک پرس، 1385. - 320 ص.

ISBN 5 9643 0028 6

نویسنده زبان C++ Bjarne Stroustrup، کارمند شرکت معروف AT&T است. C++ (یا بهتر است بگوییم، سلف آن، C با کلاس) تحت تأثیر زبان Simula ایجاد شد (باید بگویم که این زبان برنامه نویسی در سال 1967 ظاهر شد). در واقع، زمانی که C++ ظاهر شد، C قبلاً محبوبیت خود را به دست آورده بود. برنامه نویسان حرفه ای به این دلیل که می توانند از معماری خاصی در هنگام ایجاد برنامه ها به زبانی نسبتاً مناسب استفاده کنند مورد احترام است. سطح بالا.

C++ یکی از محبوب ترین (اگر نه محبوب ترین) زبان های برنامه نویسی امروزی است. C++ است که به شما امکان می دهد برنامه ای را با استفاده از رویکردهای شی گرا بنویسید (و برنامه هایی که به این نیاز دارند معمولاً بسیار بزرگ هستند) و در عین حال به اندازه کافی "سریع" هستند.

این کتاب خواننده را با "فلسفه" و مبانی برنامه نویسی C++ آشنا می کند. این کتاب شامل نمونه های بسیاری است که توسط نویسنده گردآوری و تأیید شده است.

UDC 004.43 BBK 32.973.202

قسمت 1.

فصل 1. C++ یک زبان برنامه نویسی همه منظوره است. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

فصل 2. واژگان. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 فصل 3. نحو. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 فصل 4. محدوده. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 فصل 5. تعاریف. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 فصل 6. چیدمان. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 فصل 7. کلاس های حافظه. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 فصل 8. انواع اساسی. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 فصل 9. انواع مشتق شده. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14 ​​فصل 10. اشیاء و LVALUE (آدرس ها). . . . . . . . . . . . . . . . . . . . . . . . .15 فصل 11. نمادها و اعداد صحیح. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15 فصل 12. تحولات. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 فصل 13. عبارات و عملیات. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 فصل 14. توضیحات. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 فصل 15. مشخص کننده های کلاس ذخیره سازی. . . . . . . . . . . . . . . . . . . . . .31 فصل 16. توصیفگرها. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 فصل 17. شرح طبقات. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39 فصل 18. مقدار دهی اولیه. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 فصل 19. نام توابع اضافه بار. . . . . . . . . . . . . . . . . . . . .58 فصل 20. شرح شمارش. . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 فصل 21. شرح اسم. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60 فصل 22. اپراتورها. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61 فصل 23 تعاریف خارجی. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66

فصل 24 خطوط فرمانکامپایلر . . . . . . . . . . . . . . . . . . . .68 فصل 25. بررسی اجمالی انواع. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70 فصل 26. ملاحظات تحرک. . . . . . . . . . . . . . . . . . . . . . . . . .75 فصل 27. حافظه آزاد. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76

قسمت 2. توربو سی پلاس پلاس

فصل 1. محیط توسعه یکپارچه. . . . . . . . . . . . . . . . . . . .78 فصل 2. نوار منو و منوها. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 فصل 3. TURBO C++ windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79 فصل 4 عملیات OSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80

فصل 5. ساختار فایل، انواع داده ها و اپراتورهای ورودی/خروجی. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87

فصل 6. عملیات حسابی، منطقی و عملیات رابطه و انتساب. . . . . . . . . . . . . . . . . . . . . . .91

فصل 7. سازماندهی منطقی برنامه و ساده ترین استفاده از توابع. . . . . . . . . . . . . . . . . . . . . . . . . .95

فصل 8. سازماندهی منطقی یک برنامه ساده. . . . . . . . . . .95 فصل 9. استفاده از ثابت ها انواع مختلف. . . . . . . . . . . . .96 فصل 10. ساختارهای کنترل. . . . . . . . . . . . . . . . . . . . . . . . . . . .98

فصل 11

هنگام کار با آرایه ها . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100

بخش 3. از تئوری تا عمل

فصل 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 فصل 2. STLport. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 فصل 3. زبان برنامه نویسی مایکروسافت: سی شارپ. . . . . . . . . . . . . .106 فصل 4. C++ Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108 فصل 5. استفاده از اشاره گرهای "هوشمند". . . . . . . . . . . . . . . . . . . . . .111 فصل 6. استدلال در مورد اشاره گرهای "هوشمند". . . . . . . . . . . . . .116 فصل 7. ویرانگرهای مجازی. . . . . . . . . . . . . . . . . . . . . . . . . . . .122 فصل 8. نوشتن ساختارهای داده در فایل های باینری. . . . . . . . . . . .126

فصل 9 . . . . . . . . . . . . . . . . .132 فصل 10. سازنده مجازی. . . . . . . . . . . . . . . . . . . . . . . . . . .136 فصل 11. خواندن متون منبع. . . . . . . . . . . . . . . . . . . . . . . . . . . .141 فصل 12. تابع gets() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 فصل 13. خواص. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 فصل 14. نظرات. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 فصل 15. برنامه نویسی وب. . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 فصل 16. خطاها در کار با حافظه. . . . . . . . . . . . . . . . . . . . . . . . . .158 فصل 17. ایجاد نمودار با ploticus. . . . . . . . . . . . . . .161 فصل 18. اتوماسیون کاربردی و موتورسازی. . . . . . . . . . .164 فصل 19. مروری بر کامپایلرهای C/C++ EMX و Watcom. . . . . . . . . .183 فصل 20. استفاده از بخشنامه #واردات. . . . . . . . . . . . . . . . . . .188

فصل 21

ویندوز در Borland C++Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 پرسش و پاسخ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214

نشریه علمی و مردمی

یاکوشف دیمیتری میخایلوویچ

"فلسفه" برنامه نویسی C++

سردبیر B.K. Leontiev

سردبیر A. G. Benetashvili

طرح اصلی توسط I. V. Tsarik

هنرمند O. K. Alekhin

ویرایشگر هنری M. L. Mishin Technical editorK. وی. شاپیرو

تصحیح کنندگان L. S. Zimina، K. V. Tolkacheva

امضا برای انتشار در 2006/05/07. فرمت 60x90/16. هدست "نیوتن". کاغذ افست. چاپ آفست. پچ ل 20. تیراژ 3000.

مقدمه ای بر زبان برنامه نویسی C++

بخش 1. مقدمه ای بر زبان

برنامه نویسی c++

C++ - زبان برنامه نویسی عمومی

نویسنده زبان C++ بیورن استروستروپ، کارمند شرکت معروف AT&T است. C++ (به طور دقیق تر، سلف آن، C با کلاس ها) تحت تأثیر Simula ایجاد شد (باید گفت که این زبان برنامه نویسی در سال 1967 ظاهر شد). در واقع، در آن زمان (زمانی که C ++ ظاهر شد)، C قبلاً محبوبیت خود را به دست آورده بود. معمولاً برای اینکه می‌تواند از ویژگی‌های یک معماری خاص در حالی که هنوز از زبان نسبتاً سطح بالایی استفاده می‌کند استفاده کند، بسیار مورد احترام است. درست است ، معمولاً دقیقاً برای همین است که او را دوست ندارند. البته این امر برخی از اصول ساخت برنامه را از دست داد (یا تحریف کرد). به عنوان مثال، در C، عملاً هیچ توانایی برای ایجاد برنامه های ماژولار وجود ندارد. نه، البته آنها ایجاد می شوند، اما با کمک برخی از "عصاها" در قالب استفاده از دستورالعمل های پیش پردازنده - چنین مدولاری مانند، به عنوان مثال، در Modula 2 یا Ada، در C وجود ندارد. اتفاقاً هنوز در C++ اینطور نیست.

از همان ابتدا تأکید شد که C++ توسعه زبان C است، شاید برخی از گویش های آن. این امر با این واقعیت مشهود است که اولین کامپایلر (هنوز موجود) cfront بود که کار ترجمه منبع ++C به منبع C را انجام داد. این نظر هنوز وجود دارد و باید بگویم که هنوز هم بی اساس نیست. با این حال، C و C ++ - زبانهای مختلفبرنامه نويسي.

تفاوت اصلی بین C++، زمانی که برای اولین بار ظاهر شد، پشتیبانی صریح آن از رویکرد شی گرا برای برنامه نویسی بود. باید بدانید که می‌توانید با استفاده از OOP و OOA در هر جایی برنامه‌نویسی کنید، حتی اگر جعبه ابزار به‌صراحت از آن پشتیبانی نکند. به عنوان مثال، می توانید کتابخانه رابط کاربری را در نظر بگیرید

مقدمه ای بر زبان برنامه نویسی C++

face GTK+ که با زبان C خالص و با استفاده از اصول شی گرا طراحی شده است. معرفی ابزارهایی برای پشتیبانی از OOP در یک زبان برنامه نویسی به این معنی است که در مرحله کامپایل (و نه در مرحله اجرای برنامه) بررسی سازگاری نوع، وجود متدها و غیره انجام می شود. در اصل، بسیار راحت است.

باز هم، همانطور که C یک زبان برنامه نویسی سطح بالا نیست (زیرا به شما اجازه می دهد تا ترفندهای زیادی را انجام دهید)، C++، به طور دقیق، یک زبان برنامه نویسی شی گرا نیست. ویژگی هایی مانند وجود توابع مجازی (زیرا هنگام صحبت در مورد چندشکلی، هیچ کس هرگز شرط نمی کند که برخی از روش ها در آن شرکت می کنند و برخی نه)، وجود تابع اصلی () تا کنون و غیره مانع این امر می شود. . همچنین، هیچ موجودیتی در C++ وجود ندارد، مانند متاکلاس ها (اگرچه احتمالاً خیلی ضروری نیستند) و رابط ها (به جای آن از ارث بری چندگانه استفاده می شود). با این وجود، C++ در حال حاضر یکی از محبوب ترین (اگر نه محبوب ترین) زبان برنامه نویسی است. چرا؟ بله، زیرا تمام این "زشتی ها" به شما اجازه می دهد تا در نهایت برنامه ای را با استفاده از رویکردهای شی گرا بنویسید (و برنامه هایی که به این نیاز دارند معمولاً بسیار بزرگ هستند) و در عین حال کاملاً "سریع". این دقیقاً با حضور توابع مجازی تسهیل می شود (یعنی آنچه که برنامه نویس خود در زمان طراحی به اشتراک می گذارد، جایی که به چند شکلی نیاز دارد، و جایی که ترکیب کردن برخی از توابع در یک گروه با توجه به برخی ویژگی ها کافی است)، حضور اجباری. یک بهینه ساز و غیره. همه اینها اجازه می دهد تا با استفاده مناسب، همچنان یک برنامه کاری بنویسید. درست است که اغلب نمونه هایی از استفاده بی سواد وجود دارد که در نتیجه انتخاب C ++ برای اجرای پروژه به شکنجه برای برنامه نویسان و مدیریت تبدیل می شود.

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

بدون شک نوآوری صحیح از هر طرف. در نهایت، داشتن روش‌های استاندارد برای مرتب‌سازی فهرست به روشی قابل حمل (به معنای از کامپایلر به کامپایلر) (به غیر از نوشتن تمام زیرروال‌های مرتبط و ساختار داده‌ها) زندگی برنامه‌نویس را بسیار آسان‌تر کرد. درست است، هنوز افراد زیادی هستند که تصور ضعیفی از نحوه عملکرد STL و نحوه استفاده از آن ندارند (به جز std::cin و std::cout).

مقدمه ای بر زبان برنامه نویسی C++

نقطه عطف مهم در توسعه برنامه نویسی ایجاد و استفاده گسترده از زبان ++C بود. این زبان با حفظ ابزار زبان C (زبان رویه‌گرا) که به یک استاندارد عمومی شناخته شده برای سیستم نوشتن و برنامه‌های کاربردی تبدیل شده است، وارد شد.

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

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

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

رویکرد ابژه مدل‌سازی اطلاعات حوزه‌های موضوعی با موفقیت بیشتر و بیشتر به عنوان مبنایی برای ساختاردهی بازتاب‌های اطلاعاتی آنها و به‌ویژه پایگاه‌های دانش مورد استفاده قرار می‌گیرد.

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

این مزایای C ++ کیفیت خوبی از توسعه تقریباً هر نوع محصول نرم افزاری را ارائه می دهد.

استفاده از C++ به عنوان یک زبان ابزار به شما امکان می دهد تا برنامه های سریع و فشرده دریافت کنید. در بسیاری از موارد، برنامه های نوشته شده در C++ از نظر سرعت با برنامه های نوشته شده به زبان اسمبلی قابل مقایسه هستند.

در اینجا برخی از ویژگی های ضروری زبان C++ آورده شده است:

C++ مجموعه کاملی از اپراتورهای برنامه نویسی ساخت یافته را ارائه می دهد.

C++ مجموعه غیرعادی بزرگی از عملیات را ارائه می دهد.

مقدمه ای بر زبان برنامه نویسی C++

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

C++ از اشاره گرها به متغیرها و توابع پشتیبانی می کند.

اشاره گر به یک شی برنامه با آدرس ماشین آن شی مطابقت دارد.

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

C++ از محاسبات اشاره گر پشتیبانی می کند و بنابراین امکان دسترسی مستقیم و دستکاری آدرس های حافظه را فراهم می کند.

فصل 2. واژگان

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

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

نظرات

کاراکترهای /* یک نظر را شروع می کنند که با کاراکتر */ ختم می شود. نظرات را نمی توان تودرتو کرد.

کاراکترها // یک نظر را شروع می کنند که در انتهای خطی که در آن ظاهر می شوند به پایان می رسد.

شناسه ها (اسامی)

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

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

شناسه های امضا شده و فرار برای استفاده در آینده محفوظ هستند.

ثابت ها

چندین نوع ثابت وجود دارد. در زیر خلاصه ای از ویژگی های سخت افزاری که بر اندازه آنها تأثیر می گذارد آورده شده است.

ثابت های عدد صحیح

یک عدد صحیح متشکل از دنباله ای از ارقام اگر با 0 (رقم صفر) شروع شود اکتال در نظر گرفته می شود و در غیر این صورت اعشاری. ارقام 8 و 9 ارقام هشتگانه نیستند.

دنباله ای از ارقام که 0x یا 0X قبل از آنها به عنوان یک عدد صحیح هگزا دسیمال در نظر گرفته می شود.

ارقام هگزادسیمال شامل حروفی از a یا A تا f یا F هستند که دارای مقادیر از 10 تا 15 هستند.

یک ثابت اعشاری که مقدار آن بزرگتر از بزرگترین عدد صحیح ماشین علامت دار باشد طولانی در نظر گرفته می شود. ثابت هشت‌گانه و هگزادسیمال که مقدار آن بزرگ‌تر از بزرگترین است

مقدمه ای بر زبان برنامه نویسی C++

عدد صحیح ماشین با علامت گردن، طولانی در نظر گرفته می شود. در غیر این صورت، ثابت های عدد صحیح int در نظر گرفته می شوند.

ثابت های طولانی به صراحت داده شده است

یک ثابت اعشاری، هشت‌گانه یا هگزا دسیمال بلافاصله پس از l (حرف لاتین "el") یا L ثابت طولانی در نظر گرفته می‌شود.

ثابت های نمادین

یک کاراکتر ثابت شامل یک کاراکتر است که در گیومه های تکی (آپوستروف)، مانند "x" محصور شده است. مقدار ثابت کاراکتر، مقدار عددی کاراکتر در مجموعه کاراکترهای ماشین (الفبا) است.

ثابت های کاراکتر داده هایی از نوع int در نظر گرفته می شوند. برخی از کاراکترهای غیر گرافیکی، نقل قول تکی " و بک اسلش \ , را می توان بر اساس لیست دنباله های فرار زیر نمایش داد:

نویسه خط جدید NL (LF)

زبانه افقی NT

زبانه عمودی VT

بازگشت به مرحله BS

بازگشت CR

ترجمه فرمت FF

اسلش \

نقل قول واحد (آپوستروف) "

بیت مجموعه 0ddd

بیت مجموعه 0xddd

دنباله فرار \ddd متشکل از یک بک اسلش است که به دنبال آن 1، 2 یا 3 رقم اکتال، مقدار کاراکتر مورد نظر را مشخص می کند. یک مورد خاص از این ساختار، \ 0 (بدون رقم دنبال می شود)، که کاراکتر تهی را مشخص می کند.

دنباله فرار \xddd از یک اسلش به همراه 1، 2 یا 3 رقم هگزادسیمال تشکیل شده است که مقدار کاراکتر مورد نظر را مشخص می کند. اگر کاراکتر بعد از بک اسلش یکی از کاراکترهای فهرست شده نباشد، بک اسلش نادیده گرفته می شود.

مقدمه ای بر زبان برنامه نویسی C++

ثابت های ممیز شناور

یک ثابت ممیز شناور از یک قسمت صحیح، یک نقطه اعشاری، یک مانتیس، e یا E و یک توان عدد صحیح (اختیاری، اما نه لزوماً امضا) تشکیل شده است. قسمت عدد صحیح و آخوندک هر دو از یک دنباله ارقام تشکیل شده اند. قسمت صحیح یا مانتیس (اما نه هر دو) ممکن است حذف شود. یا نقطه اعشار، یا (E) همراه با تمام توان (اما نه هر دو قسمت در یک زمان) ممکن است حذف شود. ثابت ممیز شناور از نوع double است.

ثابت های برشماری شده

نام های اعلام شده به عنوان شمارشگر از نوع ثابت هستند

روی int .

ثابت های توصیف شده

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

یک رشته دنباله ای از کاراکترها است که در گیومه های دوتایی محصور شده اند: "..." . رشته دارای یک نوع آرایه از کاراکترها و یک کلاس ذخیره سازی static است که با کاراکترهای داده شده مقداردهی اولیه می شود.

کامپایلر یک بایت null (خالی) را در انتهای هر خط قرار می دهد تا برنامه ای که خط را اسکن می کند بتواند انتهای خط را پیدا کند.

در یک رشته، کاراکتر دو گیومه " همیشه باید با \ باشد، علاوه بر این، می توان از همان دنباله های فرار که برای ثابت های کاراکتر توضیح داده شد استفاده کرد.

و در نهایت، کاراکتر خط جدید فقط می تواند بلافاصله پس از \ ; سپس هر دو -\ و کاراکتر خط جدید نادیده گرفته می شوند.

فصل 3 نحو

ورودی نحو

طبق قواعد نحوی نشانه گذاری، مقولات نحوی به صورت مورب و کلمات و کاراکترهای تحت اللفظی با فونت با عرض ثابت هستند.

مقدمه ای بر زبان برنامه نویسی C++

دسته بندی های جایگزین در خطوط مختلف نوشته شده است. یک پایانه اختیاری یا نماد غیر پایانی با زیرنویس "opt" نشان داده می شود، به طوری که (عبارت opt) نشان می دهد که عبارت در براکت های فرفری اختیاری است.

نام ها و انواع

نام یک شی، تابع، نوع، مقدار یا برچسب را نشان می دهد. نام در توضیحات برنامه وارد شده است. یک نام فقط می تواند در یک منطقه از متن برنامه به نام دامنه آن استفاده شود. نام یک نوع دارد که کاربرد آن را تعیین می کند.

یک شی منطقه ای از حافظه است. یک شی دارای یک کلاس ذخیره سازی است که طول عمر آن را مشخص می کند. معنای یک مقدار یافت شده در یک شی با نوع نامی که برای دسترسی به آن استفاده می شود تعیین می شود.

منطقه دید

چهار نوع دامنه وجود دارد: محلی، فایل، برنامه و کلاس.

محلی

نامی که در یک بلوک اعلام شده است محلی برای آن بلوک است و فقط می تواند در آن بلوک بعد از مکان اعلان و در بلوک های محصور شده استفاده شود.

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

V بیرونی ترین بلوک این تابع.

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

نام یک عضو کلاس محلی برای کلاس آن است و فقط می تواند در یک تابع عضو از آن کلاس استفاده شود، پس از اعمال یک عملیات بر روی یک شی از کلاس آن، یا پس از اعمال یک عملیات > به یک اشاره گر به یک شیء کلاس خود

اعضای کلاس ایستا و توابع عضو را می توان با استفاده از عملگر :: در جایی که نام کلاس آنها در محدوده است ارجاع داد.

مقدمه ای بر زبان برنامه نویسی C++

کلاسی که در یک کلاس اعلام شده است، عضو در نظر گرفته نمی شود و نام آن به محدوده ضمیمه تعلق دارد.

یک نام را می توان با توصیف صریح همان نام در یک بلوک یا کلاس پنهان کرد. یک نام در یک بلوک یا کلاس فقط می تواند با نامی که در بلوک یا کلاس دربرگیرنده اعلام شده است پنهان شود.

یک نام غیر محلی پنهان نیز می تواند زمانی استفاده شود که محدوده آن توسط عملیات :: مشخص شده باشد.

نام کلاسی که با نامی که نام نوع نیست پنهان شده است، اگر قبل از کلاس، ساختار یا اتحادیه باشد، همچنان می تواند استفاده شود. یک نام enum که توسط نامی که نام نوع نیست پنهان شده است، اگر قبل از آن با enum باشد، همچنان می تواند استفاده شود.

فصل 5. تعاریف

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

طرح بندی فصل 6

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

هر توضیح نام خارجیدر یک برنامه به همان شی، تابع، کلاس، enum یا مقدار enum اشاره دارد.

انواع مشخص شده در تمام اعلان های نام خارجی باید یکسان باشند. می تواند بیش از یک نوع، enum، تابع درون خطی یا تعریف const غیر مرکب وجود داشته باشد، تا زمانی که تعاریف یکسان باشند، در فایل های مختلف ظاهر شوند و همه اولیه سازها عبارات ثابت باشند.

مقدمه ای بر زبان برنامه نویسی C++

در تمام موارد دیگر، باید دقیقاً یک تعریف برای نام خارجی در یک برنامه وجود داشته باشد.

یک پیاده سازی ممکن است مستلزم این باشد که یک const ترکیبی که در جایی که با تعریف const مواجه نمی شود استفاده می شود باید به صراحت توسط extern اعلام شود و دقیقاً یک تعریف در برنامه داشته باشد. همین محدودیت را می توان بر روی توابع درون خطی اعمال کرد.

فصل 7

دو کلاس حافظه توصیف شده وجود دارد:

خودکار

ایستا

اشیاء خودکار برای هر تماس بلوکی محلی هستند و با خروج بلوک بازنشانی می شوند.

اشیاء استاتیک وجود دارند و ارزش خود را در طول کل برنامه حفظ می کنند.

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

فصل 8

اشیاء اعلام شده به عنوان کاراکتر (char ) برای ذخیره هر عنصر از مجموعه کاراکتر ماشین کافی است و اگر یک کاراکتر متعلق به این مجموعه در یک متغیر کاراکتر ذخیره شود، مقدار آن برابر با کل کد این کاراکتر است.

در حال حاضر سه اندازه صحیح وجود دارد که به‌عنوان short int، int و long int توصیف می‌شوند. اعداد صحیح بلندتر (long int) فضای ذخیره‌سازی کمتری نسبت به اعداد صحیح کوتاه‌تر ندارند (short int)، اما پس از اجرا، طولانی یا کوتاه یا هر دو، می‌توانند معادل یک عدد صحیح معمولی شوند.

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

مقدمه ای بر زبان برنامه نویسی C++

هر enum مجموعه ای از ثابت های نامگذاری شده است. ویژگی های enum با ویژگی های int یکسان است. اعداد صحیح بدون علامت که به عنوان بدون علامت توصیف می شوند از قوانین مدول حسابی 2n پیروی می کنند، که در آن n تعداد بیت ها در نمایش آنها است.

اعداد ممیز شناور تک (شناور) و دوگانه (دوگانه) ممکن است در برخی از پیاده سازی های ماشین مترادف باشند.

از آنجایی که اشیاء انواع ذکر شده در بالا را می توان به عنوان اعداد تفسیر کرد، ما از آنها به عنوان انواع حسابی یاد می کنیم.

انواع char، int در همه اندازه‌ها، و انواع enum در مجموع به عنوان انواع عدد صحیح نامیده می‌شوند. انواع شناور و دوگانه در مجموع به عنوان انواع شناور شناخته می شوند.

نوع داده void (خالی) مجموعه ای خالی از مقادیر را تعریف می کند. مقدار (غیر موجود) شی void به هیچ وجه قابل استفاده نیست، نه تبدیل صریح و نه ضمنی را نمی توان اعمال کرد.

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

فصل 9 انواع مشتق شده

علاوه بر انواع حسابی پایه، از نظر مفهومی بی نهایت انواع مشتق شده از انواع پایه به شرح زیر ساخته شده اند:

آرایه های اشیاء از این نوع;

توابعی که آرگومان های یک نوع معین را می گیرند و اشیایی از یک نوع معین را برمی گرداند.

اشاره گر به اشیاء از این نوع؛

ثابت هایی که مقادیری از یک نوع معین هستند.

مقدمه ای بر زبان برنامه نویسی C++

ساختارهایی که کلاس هایی بدون محدودیت دسترسی هستند.

اتحادیه ها، که ساختارهایی هستند که می توانند زمان متفاوتشامل اشیاء از انواع مختلف است.

که در به طور کلی، این روش های ساخت اشیا را می توان به صورت بازگشتی اعمال کرد.

یک شی از نوع void* (نشانگر به void) می تواند برای اشاره به اشیاء از نوع ناشناخته استفاده شود.

اشیاء و LVALUE (آدرس)

یک شی ناحیه ای از حافظه است. lvalue (آدرس) عبارتی است که به یک شی اشاره می کند. یک مثال واضح از عبارت آدرس، نام یک شی است.

عملیاتی وجود دارد که عبارات آدرس را می دهد: برای مثال، اگر E یک عبارت اشاره گر است، *E یک عبارت آدرس است که به شی اشاره شده توسط E اشاره دارد.

اصطلاح "lvalue" از عبارت انتساب E1=E2 می آید که در آن عملوند سمت چپ E1 باید یک عبارت مقدار باشد.

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

فصل 11

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

تبدیل یک عدد صحیح کوتاه به عدد صحیح طولانی همیشه شامل بسط علامت است. اعداد صحیح مقادیر علامت دار هستند. اینکه آیا کاراکترها حاوی بیت علامت هستند یا نه به ماشین بستگی دارد. نوع کاراکتر بدون علامت واضح تر، تغییر مقدار را از 0 به حداکثر وابسته به ماشین محدود می کند.

در ماشین هایی که کاراکترها به صورت امضا شده (امضا شده) در نظر گرفته می شوند، کاراکترهای مجموعه کد ASCII مثبت هستند.

مقدمه ای بر زبان برنامه نویسی C++

با این حال، یک ثابت کاراکتری که توسط دنباله هشت‌گانه esc داده می‌شود، دچار بسط علامت می‌شود و می‌تواند به عدد منفی تبدیل شود. به عنوان مثال، "\377" دارای مقدار 1 است.

هنگامی که یک عدد صحیح طولانی به یک عدد صحیح کوتاه یا یک کاراکتر تبدیل می شود، به سمت چپ کوتاه می شود. بیت های اضافی به سادگی از بین می روند.

شناور و دوتایی

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

شناور و کامل

تبدیل شناور به انتگرال معمولاً وابسته به ماشین است. به طور خاص، جهتی که اعداد منفی در آن کوتاه می شوند، از ماشینی به ماشین دیگر متفاوت است. اگر فضای کافی برای مقدار در نظر گرفته نشده باشد، نتیجه تعریف نشده است.

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

اشاره گر و اعداد صحیح

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

شما می توانید بیش از دو اشاره گر از یک نوع اشیاء کم کنید. در این حالت نتیجه بسته به دستگاه به نوع int یا long تبدیل می شود.

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

مقدار کوچکترین عدد صحیح بدون علامت برابر با عدد صحیح علامت‌دار است (mod 2** (طول کلمه)) (یعنی مدول 2** (طول کلمه)). در نمایش باینری مکمل، این تبدیل خالی است و هیچ تغییر واقعی در نمایش دودویی رخ نمی دهد.

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

از این پس، من یک نمونه کتاب رایج را با کارمندان یک شرکت در نظر خواهم گرفت، ما چیزی شبیه به SI خواهیم نوشت. استخراج کلاس Employee از کلاس Person ایده خوبی است، به خصوص اگر داده ها را به طور انحصاری در حافظه ذخیره کنید: SQL با ارث بردن جدول مشکلاتی دارد، اما این موضوع نیست - OOP با سلسله مراتب، تجمیع ها، ترکیب ها و وراثت هایش یک ایده آل است. روش سازماندهی داده ها مشکلات روش ها

در پس هر روش منطق تجاری، واقعیتی در جهان وجود دارد که این روش (اغلب نه به تنهایی) آن را مدل می کند. حقایق برنامه نویسی عملیات هستند: در ادامه آنها را به این نام می نامیم. با تبدیل کردن یک متد به عضوی از یک کلاس، OOP از ما می‌خواهد که یک عملیات را به یک شی متصل کنیم، که غیرممکن است زیرا یک عملیات تعاملی از شی‌ها (دو یا بیشتر) است، به جز در مورد یک عملیات واحد، بازتاب خالص. روش PaySalary را می توان به کلاس های کارمند (کارمند)، صندوقدار (نقد)، حساب بانکی (حساب) نسبت داد - همه آنها در حق مالکیت آن معادل هستند. معضل مکان روش کل فرآیند توسعه را همراهی می کند: وضوح نامناسب آن می تواند بحرانی و حتی کشنده باشد.

در کتاب‌های برنامه‌نویسی، نویسندگان صادق با شرمندگی اعتراف می‌کنند که «اشیا واقعاً اشیاء نیستند» و OOP فقط راهی برای سازمان‌دهی کد است، نه مکانیزم مدل‌سازی. اما نکته اصلی این است که "جهان مجموعه ای از حقایق است، نه چیزها" - از این رو ناتوانی اساسی در ساختن یک مدل مناسب، با استفاده از OOP به شکلی که نویسندگان کتاب های درسی نیاز دارند، وجود دارد. درک این نکته مهم است که می توان جهان را به صورت کد مدل کرد، اما اتم های مدل باید واقعیت باشند، نه اشیا.

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


در سال 2015، ممکن است متوجه تغییری در نحوه توسعه برنامه های جاوا اسکریپت شده باشید. توسعه‌دهندگان در حال دور شدن از معماری حالت تغییرپذیر غیرقابل پیش‌بینی به سمت معماری برنامه کاربردی غیرقابل پیش‌بینی‌تر هستند.

با چارچوب هایی مانند Backbone، مرسوم بود که خود داده ها و ارائه داده ها را همگام کنید - برای این کار باید به صورت دستی در رویدادهای ضروری dom مشترک می شوید. این روش مستعد خطا بود و مجبور به استفاده از کد عمومی بیش از حد بود. انگولار آمد و آن را با اتصال خودکار دو طرفه تعمیر کرد.

اما اکنون همه چیز در جهت دیگری پیش می رود.

... اما طبیعی است. هر طرحی بد است و همیشه بد خواهد بود.

اگه باور نمیکنی توضیح بدم...

هیچ پروژه ای با اجرا زنده نمی ماند

وقتی شروع به اجرای آنچه طراحی کرده اید می کنید، ناگزیر با چیزهایی در واقعیت مواجه می شوید که با انتظارات اولیه شما مطابقت ندارند.

ممکن است داده‌ای که انتظار داشتید در یک پاسخ سرویس خارجی مورد نیاز باشد گم شده باشد (یا نامعتبر باشد). منحصربه‌فرد بودن مورد انتظار ممکن است در عمل اصلاً منحصربه‌فرد نباشد (حتی sha1 گاهی اوقات برخورد می‌کند). فرآیندهایی که قرار بود قابل اعتماد باشند، خیلی بیشتر از آنچه انتظار داشتید خراب می شوند.

این خوبه.

در برخی موارد، می‌توانید به سادگی زمان سپری کنید، یک استثنا پرتاب کنید، یا به روش دیگری با صدای بلند تصادف کنید. در موارد دیگر، شما باید الزامات سیستم را کاهش دهید. یا یک لایه فیلتر اضافی اضافه کنید که قبلاً درگیر "تمیز کردن" و انتقال خواهد بود گزینه صحیحداده های ورودی.

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

داده‌های نادرست را می‌توان مفقود دانست، یا می‌توانید آن‌ها را «همان‌طور که هست» بنویسید و یک نسخه تأیید شده اضافی اضافه کنید که تنها در صورتی وجود داشته باشد که نسخه اصلی معتبر باشد.

محدودیت منحصر به فرد می تواند

حتی در حین خواندن، یاد ادسگر دایکسترا با جمله معروفش افتادم: "روز و شب دعا می کنم تا هر چه بیشتر از برنامه نویسان همکارم راهی برای شکستن نفرین سازگاری پیدا کنند" ("من هر روز دعا می کنم که بیشتر از من همکار برنامه نویسان ممکن است ابزاری برای رهایی از خود بیابند نفرینسازگاری") از The Humble Programmer (1972 sic!!!). و بعد اریک ریموند با کلیسای جامع و بازار خود (1997). اما متن وینگ تنها در مورد نفرین سازگاری نیست، در سه صفحه یک لایه کامل از سوالات مطرح شده است (و به طور کلی بی پاسخ مانده است):

  1. مشکل سازگاری در معنای وسیع؛
  2. مشکل حفظ کدهای قدیمی؛
  3. مشکل وابستگی زندگی انسان«از روبات‌های بی‌حساس» (ج)، که ما به سرعت به آن نزدیک می‌شویم.
  4. مشکل داده کاوی به طور کلی و جستجوی یک راه حل آماده در بشکه ای بدون ته از دستور العمل ها به طور خاص (github، پشته سرریز؟)؛
  5. مشکل "بازنویسی" کد قدیمی (هم بد و هم خوب) - این لحظه باعث می شود که بخواهید دوباره آن را بخوانید :)؛
  6. مشکل وسعت فناوری های IT. گاهی اوقات گفته می شود که آخرین فیزیکدان جهانی در اواسط قرن گذشته زندگی می کرد، یعنی لو لاندو. به نظر می رسد زمانی فرا می رسد (یا قبلاً فرا رسیده است) که دیگر امکان یافتن یک برنامه نویس جهانی وجود ندارد.
  7. متن حاوی کلمه هکر، چه در معنای مثبت یا منفی نیست. اما در مورد محققان نیز نوشته شده است، و در مورد مزایایی که می توان با دانستن این یا آن درهای پشتی به دست آورد و در مورد اینکه چه قدرتی می تواند بدهد.
  8. و شاید این تمام نباشد... :)

این تصور به وجود می آید که این را شخصی نوشته است که این مشکلات را در پوست خودش احساس کرده است.
می خواهم توجه داشته باشم که Depth in the Sky در سال 1999 نوشته شده است، زمانی که بسیاری از چیزهایی که وینگ در مورد آنها می نویسد هنوز مشکلی نداشتند یا حتی در افق ظاهر شدند.

به عنوان انتقاد، مایلم به این نکته اشاره کنم که Vinge از هوش مصنوعی گذشت (اعم از قوی و ضعیف، عموماً از شبکه‌های عصبی عبور کرد، حتی به شبکه‌های عصبی دست نزد) و مزایای IT را به عملکرد کاهش داد. همچنین، حضور شرکت‌های بزرگ در متن احساس نمی‌شود (اگرچه البته «Deep in the Sky» در مورد سایبرپانک صدق نمی‌کند)، به جز قنگ-هو. هیچ جنگ حق ثبت اختراع وجود ندارد، موضوع کپی رایت و مشکل توسعه های اختصاصی بسته، که کدهای منبع آنها منتشر نشده است، مورد بررسی قرار نگرفته است.

نه در مورد برنامه نویسی، بلکه در مورد استانداردها

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

در زیر جالب ترین قسمت از متن است. خیلی چیزهای جالب دیگر در رمان وجود دارد که به برنامه نویسی مربوط نمی شود؛ بی جهت نیست که چندین جایزه جمع آوری کرده است. بنابراین خواندن آن را توصیه می‌کنم و در اصل ترجمه‌ای که به من رسید خیلی خوب نیست.
خواندن مبارک :)

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

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

کسی که می داند چگونه کپی کند، او می داند چگونه انجام دهد. لئوناردو داوینچی این را گفت. می بینید، شما از ایده های خود در مورد چیستی XP، Windows، OS ها استفاده می کنید. نحوه صحبت مردم:

من هنوز جوان بودم، XP داشتم، آن روزهای طلایی بود، اما الان مثل الان نیست. زمان جدید، نرم افزار مدرن. من نمی فهمم، چرا به دنبال آشغال است؟ شما حداقل یک کلون از ویندوز دهم می سازید، اما با سرعت خود، ۱۰۰ سال دیگر آن را خواهید ساخت.

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

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

برنامه نویسی اغلب با هنر مقایسه می شود. این با این واقعیت توجیه می شود که با افزایش پیچیدگی برنامه ها، نیاز به افرادی با آموزش های ویژه و مهمتر از آن، با طرز فکر خاصی وجود دارد که بتواند در مغز الکترونیکی پیچیده تر "زندگی تنفس کند". مفهوم "اطلاعات" نقش مهمی در درک فرآیندهای عمیق برنامه نویسی دارد. اطلاعات دانشی است که شخص از مغز خود به یک رسانه مادی یا الکترونیکی منتقل کرده است.

همچنین سخت است که تأثیر معکوس رایانه ها بر تفکر انسان را در نظر نگیریم. چگونه زندگی یک فرد و ارزش های معنوی او تحت تأثیر پیشرفت تکنولوژی تغییر می کند.

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

تفکر کامپیوتری

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

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

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

از این نتیجه به دست می آید که اکنون برنامه های رایانه ای و همچنین رایانه ها نمی توانند فکر کنند.

جنبه اخلاقی برنامه نویسی

عبارت "ویروس های کامپیوتری" محکم وارد زندگی ما شده است. شخصی که با رایانه روبرو شده است این اصطلاح را شنیده است و شخصی مستقیماً با تأثیرات مخرب آن روبرو شده است. و با این حال، این ویروس های کامپیوتری چیست؟ اینها برنامه های ویژه نوشته شده ای هستند که الگوریتم برنامه های دیگر را تغییر می دهند، داده ها را پاک می کنند و از کارکرد عادی کاربر جلوگیری می کنند.

این برنامه ها توسط افراد نوشته می شوند، اما سوال اینجاست: چه چیزی این شخص را هدایت می کند؟

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

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

نتیجه.

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


فهرست کتابشناختی

  1. Varfolomeeva T.N.، Ovchinnikova I.G. آموزشبرنامه نويسي. [متن]: مطالعات. کمک هزینه / Magnitogorsk: MaGU، 2005. تحت عنوان UMO. - 104 ص.
  2. Varfolomeeva T.N.، Ovchinnikova I.G.، Platonova O.I. متدولوژی های برنامه نویسی [متن]: مطالعات. کمک هزینه / Magnitogorsk: MaGU، 2007. - 204 p.
  3. وارفولومیوا، T.N. کارگاه آزمایشگاهی برنامه نویسی شی گرا. [متن]: مطالعات. کمک هزینه / ت.ن. وارفولومیوا، آی.یو. Efimova - مسکو، 2014. (نسخه دوم، کلیشه ای)
  4. وارفولومیوا، T.N. کارگاه آزمایشگاهی برنامه نویسی ساختاریافته به عنوان مثال زبان پاسکال [متن]: کتاب درسی. کمک هزینه / ت.ن. وارفولومیوا، اس.ا. پوویتوهین. - Magnitogorsk: MaGU، 2013. - 123 p.
  5. وارفولومیوا، T.N. راهنمای آمادگی برای آزمون و دانشکده مرکزی انفورماتیک [متن]: کتاب درسی. کمک هزینه در 2 قسمت، جلد. قسمت 1. الگوریتم سازی و برنامه نویسی / T.N. وارفولومیوا، I.G. اووچینیکوف. - Magnitogorsk: MaSU، 2006. - 128 p.
  6. وارفولومیوا، T.N. کتاب درسی آمادگی برای آزمون متمرکز انفورماتیک [متن]: کتاب درسی. کمک هزینه / ت.ن. وارفولومیوا، I.G. اووچینیکوا، N.G. Korneshchuk Magnitogorsk: MaSU، 2002. - 205 p.
  7. وارفولومیوا، T.N. کمک آموزشیبرای آمادگی در کنکور علوم کامپیوتر [متن]: کتاب درسی. کمک هزینه / ت.ن. وارفولومیوا، I.G. اووچینیکوا، E.N. Guseva Magnitogorsk: MaSU، 2002. - 116 p.
  8. افیمووا، آی یو. مدلسازی کامپیوتری [متن]: مجموعه کار عملیویرایش دوم، کلیشه ای / I.Yu. افیمووا، T.N. وارفولومیف. - مسکو: LLC "Flinta"، 2014. - 67 p. شابک: 978-5-9765-2039-4
  9. افیمووا، آی یو. روش ها و فناوری های آموزش علوم کامپیوتر در موسسات آموزشی آموزش حرفه ای[متن]: روش آموزشی. کمک هزینه ویرایش 2، کلیشه ای / I.Yu. افیمووا، تی.ن. وارفولومیف. - مسکو: LLC "Flinta"، 2014. - 41 p. شابک 978-5-9765-2040-0
  10. موچان I.N. رویکردهای نوآورانه در آموزش علوم کامپیوتر در دانشگاه // مدرن تحقیق علمیو نوآوری - 2014. - شماره 5-2 (37). - S. 45.
  11. موچان I.N. برخی از جنبه های آموزش اطلاعات دانشجویان دانشگاه // مجموعه مقالات علمی Sworld - 2008. V.18. - شماره 1. - س 34-36.
  12. Movchan IN کنترل آموزشی فعالیت اطلاعاتی یک دانشجوی دانشگاه در فرآیند آموزش حرفه ای: دیس. … صمیمانه. Ped علوم / مووچان ایرینا نیکولاونا؛ دانشگاه دولتی Magnitogorsk. - Magnitogorsk، 2009، - 205 ص.
  13. اووچینیکوا I.G. ارزیابی اثربخشی آموزش شخصیت [متن] / I.G. اووچینیکوا، V.A. بلیکوف، L.V. کورزاوا // مشارکت اجتماعی در آموزش حرفه ای مجموعه مقالات کنفرانس علمی و عملی همه روسیه. FGOU SPO "کالج آموزشی حرفه ای دولتی Magnitogorsk"، آزمایشگاه برای مطالعه مشکلات مدیریت کیفیت در آموزش حرفه ای ابتدایی و متوسطه شعبه اورال آکادمی آموزش روسیه: شنبه. علمی هنر Magnitogorsk، 2010. - S. 178-187.
  14. اووچینیکوا، I.G. کتاب کار-کارگاه برنامه نویسی [متن]: درسی.-روش. کمک هزینه / آی.جی. اووچینیکوا، T.N. وارفولومیف. - Magnitogorsk: MaSU، 2009. - 77 p.
  15. Sakhnova T.N.، Ovchinnikova I.G. الگوریتم های جستجو در درس علوم کامپیوتر دبیرستان[متن] // انفورماتیک و آموزش. - 2010 - شماره 11 - S. 79-83.
  16. Sakhnova T.N.، Ovchinnikova I.G. الگوریتم های مرتب سازی برای حل مسائل برنامه نویسی [متن] // انفورماتیک و آموزش. - 2011. - شماره 2 - ص 53-57
  17. ساخنووا، تی.ن. مبانی الگوریتم سازی [متن]: کتاب درسی. کمک هزینه، ویرایش دوم، تجدید نظر شده. و اضافی / T.N. ساخنووا، I.G. اووچینیکوف. - Magnitogorsk: MaGU، 2002. تحت عنوان UMO. - 131 ص.
  18. ساخنووا، تی.ن. شرایط آموزشی برای شکل‌گیری تفکر اطلاعاتی حرفه‌ای دانشجویان [متن]: دیس. … می توانید. Ped علوم: 13.00.08 / T.N. ساخنوف. - Magnitogorsk، 2003.
  19. ساخنووا، تی.ن. راهنمای آمادگی برای آزمون و دانشکده مرکزی انفورماتیک [متن]: کتاب درسی. کمک هزینه در 2 قسمت، جلد. قسمت 2. دوره پایه / T.N. ساخنووا، I.G. اووچینیکوف. - Magnitogorsk: MaSU، 2006. - 128 p.
  20. چوساویتینا، G.N. توسعه مدلی برای مدیریت خطرات ناشی از استفاده از راه دور فن آوری های آموزشیدر دانشگاه [متن] / G.N. چوساویتینا، M.O. چوساویتین، تی.ن. Varfolomeeva // بهبود آموزش متخصصان فناوری اطلاعات در جهت "انفورماتیک کاربردی" برای اقتصاد نوآوری: شنبه. علمی tr. مسکو، 2008. - S. 216-218.
بازدید پست: لطفا صبر کنید

 

شاید خواندن آن مفید باشد: