tomron87/hebrew-wikipedia-sentences-corpus huggingface dataset:
ב-2022 הושלם השלב השני של הפרויקט בשדרות ז'בוטינסקי, והחלו לפעול באופן מלא מרכז הבקרה של נתיבי ההעדפה, וכן מסוף תחבורה ציבורית חדש בצומת שדרות בני ברית פינת מורדי הגטאות – מסוף בני ברית ומסוף ביג בואכה תחנת הרכבת אשדוד – עד הלום ומרכז הקניות "BIG Fashion".
לימים, שונה שם הרפורמה ל"אשדוד מטרו בס" (Ashdod Metro Bus), כמיתוג מחדש ל-Rebus.
עם זאת, לא בוצעו חלקים מהותיים בו, ונעשו ליקויים רבים תחתיו – ביניהם ביטול הסבת כיכר אילן רמון לתחבורה ציבורית (תוכנית שחודשה ב-2025).
ביוני 2019 פורסמה לגבי התוכנית דוח של מבקר המדינה, יוסף שפירא.
הדוח מתח ביקורת קשה כנגד התנהלותה של עיריית אשדוד בניהול צידה במיזם, וטען לכשלים חמורים שהובילו להכפלת עלותו הכספית.
שפירא טען שהעירייה הפלתה את השכונות הוותיקות בכך שביטלה את ציר התחבורה הציבורית המזרחי (שנועד לשרת את תושבי הרבעים ג', ו' ו-ח') וכי פעלה בחוסר שקיפות – והמליץ להטיל חיוב אישי על מנכ"ל העירייה, אילן בן עדי, וראש העירייה לסרי.
רצועת החוף של אשדוד מתמשכת לאורך 11 קילומטרים על שפת הים התיכון, כאשר 6 מהם בתוואי העירוני – מתחנת הכוח אשכול ועד חוף באר שבע ברובע ט"ו.
היא מהווה נדבך מרכזי בתרבות ובתיירות בעיר אשדוד, כעיר חוף ונמל.
רצועת החוף מהווה חלק מרכזי מהתרבות העירונית.
נמל אשדוד, שקדם לה והספיק להפוך לסימן היכר שלה, כעיר נמל, מבוטא חזותית בסמל העיר אשדוד, הכולל בגרסתו המקורית מ-1962 עוגן וספינה תנ"כית בצבע כחול, שהוחלפו ב-2016 במפרשים – כולם אלמנטים הקשורים בשיט ובים.
בחופה של אשדוד פועל גם השוק העירוני הפתוח מאז אוקטובר 1974, במגרש החנייה של חוף לידו.
באופן מסורתי, הוקפד לשמור בעיר על קו בינוי נמוך ובעל צפיפות נמוכה המאפשר תצפית לים, כחלק מעקרונות היסוד של תוכנית האב לעיר מ-1959.
בסוף המאה ה-20 ותחילת המאה ה-21, החלה עיריית אשדוד לשלב באופן גובר את רצועת החוף בתכנון עיר, ולהתוות טיילת רציפה לאורך הרצועה.
פארק לכיש אשדוד: בצפון הרצועה, הוקם במהלך שנות ה-90 "פארק לכיש אשדוד" לאורך הגדה הדרומית של נחל לכיש המשוקם.
רחוב הטיילת ומרטין בובר: שדרת מסעדות וברים ברחוב הטיילת שברובע א', הנושקת לחופים מי-עמי ולידו, שהוקמה בשנות ה-2000. ברחוב שוכנים גם כמה מגדלים רבי-קומות המשמשים למלונאות.
טיילת הספורט / שדרות משה דיין: טיילת סלולה לאורך שדרות משה דיין הנושקת לרצועת החוף, שלאורכה שבילי הליכה ואופניים לצד מתקני כושר, וריהוט כמו פרגולות וספסלים מבטון.
הטיילת, שנבנתה בעלות של 30 מיליון ש"ח, נחנכה בפברואר 2012. השדרה, המתעקלת פנימה באזור המרינה מהווה את מרבית טיילת החוף.
פארק אשדוד-ים: הפארק העירוני הגדול בעיר, נושק לשדרות משה דיין ומשקיף על חוף הקשתות.
פארק האגם של מרינה אשדוד: כיכר עירונית שבליבה אגם מלאכותי לצד מרכז מסחרי, הצופה על הים.
הפארק, שנכון לינואר 2025 טרם נפתח, ממשיך את טיילת החוף, שהרצף בה נקטע בין חוף לידו לחוף הקשתות.
תכנון הפארק לווה בשיתוף ציבור התושבים.
ב-2011 החלה ההנגשה של חורבות העיר העתיקה אשדוד ים, מצודת אשדוד ים, שהסתיימה ב-2020. העבודות במצודה כללו את חיזוק הקירות התומכים, הוצאת חולות וסינונם, יציקת רצפה וסלילת שבילים המנגישים את המצודה למבקרים ולבעלי מוגבלויות.
אופי השימור ותכנונו מטעם עיריית אשדוד ורשות העתיקות ספג ביקורת מארגונים להגנת הסביבה בישראל.
בקרבת המצודה, שוכן מגדל איתות עתיק המכונה "המצדית".
גם המצדית שומרה, והיא ניצבת כיום בכיכר בלב שכונת מגורים שנבנתה סביבה ברובע ט"ו.
דרומית לפארק אשדוד-ים, הוקם ב-2020 מרחב הטבע העירוני "פארק אקולוגי מצודת-ים אשדוד" בתכנון אדריכל הנוף ליאב שלם.
הפארק משתרע על 300 דונם וכולל שבילי הליכה לא-כבושים המסומנים על ידי עמודי עץ.
הוא נמתח מחוף המצודה ועד החוף הדרומי ביותר, באר שבע.
בינוי בקו החוף של אשדוד, ובפרט הקמת בתי מלון היא סוגיה שנויה במחלוקת בתרבות העירונית, שידעה מחאות, סכסוכים משפטיים ומינהליים בוועדות התכנון השונות.
עוד בשנותיה הראשונות של העיר, עת עריכת תחרות האדריכלים לתכנון מרכז העיר ב-1965 "חברת אשדוד" ציינה בדרישותיה את החובה לשמירה על רצועת חוף שפת הים ברוחב של עד 50 מטר, מכיוון שהשטח שמור לרחצה בלבד ו.
כמו כן, נכתב כי בהינתן חריגה, בכל מקרה אין למנוע את המשכיות החוף.
מאז מבנה בית המלון נותר נטוש בחוף הים ונחשב ל"פיל לבן".
מאז 1980 מתמשכת מחלוקת על הקמת בתי מלון בשני מגרשים בחוף לידו ("100" ו-"17א"), במרחק של 60 עד 35 מטרים, בימי גאות, מקו החוף.
ב-2022 החלה בנייה ללא אישור מהרשויות, ועל אף דחיית התוכנית בוועדת הערר המחוזית לתכנון ולבנייה.
היא נעצרה בהוראת עיריית אשדוד, אך שטח הבנייה לא פונה.
היזם חולק על פרשנות חוק שמירת הסביבה החופית, וטוען כי אין הוא כפוף לאיסורי הבינוי על קו החוף, מפני שהמגרשים נרכשו טרם חקיקתו.
נכון לדצמבר 2024, התוכנית אושרה להפקדה על ידי ועדת בניין הערים של אשדוד וועדת המשנה לעררים של הוועדה המחוזית לתכנון ובניה, אך לא התקבלה בוועדה לשמירת הסביבה החופית.
"התחדשות עירונית" היא שם כללי לתהליך התערבות באזור עירוני במטרה לגרום לצמיחה והתפתחות.
התחדשות עירונית שואפת להחיות את הרקמה העירונית הוותיקה לצד החדשה.
ההתחדשות העירונית באשדוד נערכת על בסיס תוכניות מתאר ייעודיות לפי רבעים, תחת תוכנית אב כללית.
כמו כן, בהסכם הגג של עיריית אשדוד וממשלת ישראל הוחלט על השקעה ממשלתית בהתחדשות העירונית של הרבעים הוותיקים.
במסגרת ההתחדשות העירונית באשדוד, מקודם גם פיתוח מוטה תחבורה ציבורית (TOD) בשדרות הרצל החוצות את העיר לאורכה ובמרכזה, על בסיס מסלולי התחבורה הציבורית (מת"צ) שהותקנו במרכז השדרה ב-2019, במסגרת רפורמת "Reway", המשרתת את מערך ה-BRT "אשדוד מטרו בס".
תכנונה המקדים של אשדוד היא גורם משפיע בתרבות העירונית ובאינטראקציות החברתיות בעיר.
לפי הסוציולוגית העירונית מירב אהרון גוטמן, שערכה 3 שנות מחקר שדה בעיר, רובעי המגורים מהווים קטגוריה בהגדרת זהות התושבים, ומשמשים כלי פנים-עירוני להגדרה חברתית ולהזדהוּת (בחיי היום-יום: / / ), ועל כן הוא המקום בו מתחולל כור ההיתוך.
גוטמן טוענת כי גבולות הרבעים ניכרים בעיר כ"מכשיר של זהות".
באשר לעורקי התנועה, הכבישים העבים, המפרידים בין רובעי המגורים, גוטמן סוברת כי הם ממחישים את יומרת תוכנית המתאר שעוצבה לעיר, שהרי ההולכים בשדרות מתגמדים בהשוואה למרחב העירוני.
כמו כן, היא מצביעה על כך שבין רבעים שכנים עשויים להימצא מחירי דירות, תעריפי ארנונה וקודי לבוש שונים.
לפי גוטמן, בשנים הראשונות לעיר, מפעלי תעשייה לאומיים שהוקמו בעיר ביקשו למשוך אוכלוסיות מסוימות לבוא ולהקים ביתם בעיר – למשל, "אלתא מערכות", שמשכה מהנדסים עם הטבות דיור לרובע ד' (על כן שכונתם כונתה "דלתא") ושכונת חברת החשמל ברובע א' – והתערבו בשוק הדירות, כך שנוצר "דיור סגרגטיבי על בסיס מעמדי".
היא מסכמת את עמדתה, כי רק מחוויית השיטוט בעיר, ריבוי סגנונות הבישול והשפות בה, ניכר כי לא נוצר בה כור היתוך אלא פסיפס.
לפי בנימין פרנקל, ממתכנני נמל אשדוד, המרכזים המסחריים הרובעיים היו זרים עבור האוכלוסייה שהרכיבה את העיר בשנותיה הראשונות – עולים ממרוקו ומרומניה, ואלו העדיפו רחובות ליניאריים, כמו רחוב רוגוזין וחיים משה שפירא, על פני המרכזים וכבישי הטבעת – בעוד הרחוב משך גירויים רבים יותר ואנשים "לא מוכרים".
עוד ב-1958 התריעו מתכנני אשדוד על שתי בעיות בתכנון העיר: היעדר לכידות פוליטית וכלכלית, והחשש שמרכז עירוני עתידי יתנגש באינטרסים של השכונות הוותיקות שיתפתחו בינתיים באופן עצמאי.
בנימוקים לתיקון בתוכנית המתאר של העיר בשנות ה-90, נכתב כי .
בנובמבר 2018 נערכה ב"מוזיאון אשדוד לאמנות" התערוכה "פרויקט אשדוד: דיוקן העיר" שעסקה בזהות העיר ובמרחב העירוני שלה בעיני התושבים.
התערוכה נערכה ביוזמת האמנים דניאל שושן ועמית מטלון, אותה יצרו 3,000 מתושבי העיר.
ב-2020 פרסמה האדריכלית שרון יאבו איילון את מחקרה אודות הפרויקט, שם השוותה בינו לרעיונות שביסס הסוציולוג העירוני האמריקאי רוברט פארק בספרו "" מ-1925.
קריית פרס (במקור: "הרובע המיוחד") הוא רובע מעורב שימושים עתידי המתוכנן לקום בפאתיה הדרום-מזרחיים של העיר, שנכלל בתכנון המקורי לעיר.
במסמך אודות תוכנית האב העירונית מ-1965 שחיברה "חברת אשדוד", נכתב על הרובע כ.
הרובע, שנקרא על שם נשיא מדינת ישראל ה-9, שמעון פרס, מתאפיין בתכנון מעורב-שימושים המשלב מוסדות אקדמיים, תעשיית היי-טק, מגורים ושטחי מסחר.
הוא גובל בדרך הרכבת במזרח, שדרות מנחם בגין בצפון, שדרות אלטלנה במערב ובדיונה הגדולה וברובע י"ד בדרום.
כיום, הרובע מאכלס את תחנת מגן דוד אדום העירונית ואת בית החולים האוניברסיטאי אסותא.
ברובע מתוכננת לקום גם הקריה האקדמית של אשדוד ופארק מדע.
במסגרת "התוכנית האסטרטגית 2040 להסעת המונים ולתחבורה ציבורית בנפת אשקלון" של משרד התחבורה ו"חברת נתיבי איילון", שאושרה ב-2017, מתוכננים קווי מערכת תחבורה עתירת נוסעים (מתע"ן) ושבילי אופניים בינעירוניים בשם "אופנידרום" (בדומה ל"אופנידן") אזוריים, תחנות רכבת ומסופי תחבורה ציבורית בנפה.
טיוטת התוכנית הראשונה פורסמה ב-2020.
התוכנית כוללת אינטגרציה גבוהה לעיר, כאשר אשדוד צפויה להוות תחנת קישור למערכות התחבורה בנפה – שהרי שני קווי המערכת הראשיים (האדום והכחול) הראשיים עוברים בה, וכן "אופנידרום".
מחצית מקווי המתע"ן המתוכננים עוברים באשדוד, ובהם שנים ראשיים – האדום, המחבר אותה לאשקלון, והכחול, המחבר אותה ליבנה ולתחנות הרכבת שלה (מזרח ומערב) ואל תחנת הרכבת התחתית ברחובות (כחלק מהרכבת התחתית של גוש דן) הנמנית עם קו המטרו M1.
תִּכְנוּת מחשבים (לרוב מכונה בקצרה תִּכְנוּת, או לעיתים קִידּוּד) הוא תהליך הכתיבה, הבדיקה והתחזוקה של קוד המקור של תוכנית מחשב.
מלאכת התכנות נעשית בשפת תכנות מתאימה, הנבחרת בהתאם לאופי התוכנית הנכתבת ובהתאם למקובל במסגרת מקום העבודה או הפרויקט שבמסגרתו נכתבת התוכנית.
כתיבת קוד המקור מתבססת לרוב על הרחבתו של קוד מקור קיים, אם כי במקרים רבים קוד המקור הנכתב הוא חדש לחלוטין.
מטרתו של המתכנת בכתיבה היא יצירת תוכנית מחשב המתנהגת באופן המבוקש.
לתהליך התכנות נדרשים ידע ומומחיות בנושאים רבים, לרבות ידע בתחום היישום, אלגוריתמיקה ולוגיקה.
ישנה מחלוקת ארוכת שנים בשאלה האם כתיבת תוכניות מחשב היא אמנות, אומנות או הנדסה.
באופן כללי ניתן לומר שתוכנית מחשב טובה היא תוצאה של מומחיות בכל שלוש המיומנויות.
תוכנית מחשב איכותית היא אלגנטית, יעילה ותחזוקתית, אם כי הגדרת תכונות אלה שונה במידה רבה בין העוסקים בתחום.
בשונה מתחומים טכניים אחרים, העוסקים בתחום אינם נדרשים להסמכה רשמית כלשהי כדי לכנות עצמם "מתכנתים".
עם זאת, במהלך השנים נעשו מאמצים רבים להפוך את מלאכת התכנות לפעילות המתבצעת בהתאם לסט עקרונות וכללים מוגדרים, ואלה סייעו להתפתחות תחום הנדסת התוכנה.
תהליך פיתוחה של תוכנית חדשה כולל כמה שלבים:
זיהוי הצורך בתוכנית לשם ביצועה של משימה מסוימת.
עיצוב התוכנית ובחירת שפת התכנות לכתיבתה.
כתיבת התוכנית בשפת התכנות שנבחרה.
ניפוי שגיאות: איתור טעויות שנעשו במהלך כתיבת התוכנית, ותיקון טעויות אלה.
אינטגרציה: שילוב התוכנית עם יתר התוכניות המרכיבות את מוצר התוכנה שלו נועדה התוכנית.
הטמעה: העברת התוכנית למשתמשיה והדרכתם בשימוש בה.
לאחר השלמת תהליך הפיתוח עוברת התוכנית לשלב התחזוקה, המתבצע במהלך כל חייה של התוכנית.
בשלב זה עוברת התוכנית שיפורים בהתאם למשוב המגיע מהמשתמשים בה, מתוקנות תקלות ואף חורי אבטחה המתגלים מפעם לפעם, נעשים שינויים להתאמת התוכנית לשינויים סביבתיים (כגון החלפה של מערכת הפעלה וכדומה).
סוף חייה של התוכנית הוא בשלב הגריטה בה היא מוצאת משימוש.
במקרים רבים נעשה שימוש בחלקים מהתוכנה לשם יצירת תוכנה חדשה.
שימוש כזה מכונה לעיתים "קניבליזם".
שפות תכנות שונות מעניקות למתכנת פרדיגמות שונות לפיתוח התוכנה.
תוכנית "Hello World" היא תוכנית מחשב המדפיסה את המחרוזת "Hello World" בהתקן תצוגה.
תוכנית "Hello World" יכולה להיות שימושית כדי לבדוק שהמהדר, סביבת הפיתוח וסביבת הריצה של השפה הותקנו כראוי.
תכנות מונחה־עצמים או לעיתים תכנות מוכוון־עצמים הוא פרדיגמת תכנות המשתמשת ב"עצמים" (אובייקטים) לשם תכנות תוכניות מחשב.
בפרדיגמה זו שמאפייניה הן מודולריות, מדרגיות ואבסטרקציה (הפשטה), מרחב התוכנה הוא למעשה מרחב של אובייקטים תכנותיים בעלי יחסים היררכיים ביניהם.
כל ישות תכנותית היא מחלקה/אובייקט בעלת מאפיינים ופעולות משלה הקיימת כיחידה סגורה ועצמאית.
בשיטה זו קיימת הפרדה בין המימוש הפנימי לבין הממשק החיצוני של המחלקה, בדומה לצורת העיצוב של מכשירים רבים.
הפרדיגמה מספקת למתכנת מספר דרכים לארגן ולפשט את קידוד התוכנה באמצעות כימוס (יצירת עצמים של "קופסאות שחורות"), הורשה (עצם Y יורש מעצם X ונגזרות תכונות מעצם לעצם) ופולימורפיזם (רב צורתיות שבה ניתן לשנות חלק מהתכונות בעצם Y הנגזרות מהעצם הנורש X).
הפרדיגמה היוותה מהפכה בכתיבת תוכנה והחלה לשמש בפיתוח תוכנה החל מתחילת שנות ה־80 של המאה ה־20 ואילך, אך השימוש בפרדיגמה בשלמותה החל רק בשנות ה־90. רוב שפות התכנות המודרניות תומכות בתכנות מונחה־עצמים.
תכנות מונחה־עצמים הוא חלק מתפיסה (פרספציה) של פיתוח מונחה־עצמים, הכולל גם ניתוח מערכות מונחה־עצמים (OOA), עיצוב מונחה־עצמים (OOD) ובמידה חלקית גם מסדי נתונים מונחי־עצמים (Object-Oriented Databases).
הפרדיגמה של תכנות מונחה־עצמים צמחה מהתכנות הפרוצדורלי והמודולרי שבוסס על שגרות ופונקציות שפעלו על מבני נתונים חופשיים בכל מרחב התוכנה.
השיטה הפרוצדורלית יצרה קושי רב, מכיוון שכל שינוי בהגדרת משתנים בתוכנית חייב שינוי בפונקציות שפעלו בכל מרחב התוכנה.
היה קשה לאתר באג בתוכנה כיוון שהמשתנה יכול היה להשתנות בקטעי קוד רבים בתוכנה.
והיה קשה למחזר קוד, בשל תלויות שלו במשתנים ופונקציות במרחב היישום כולו.
ככל שהתוכנה הייתה גדולה ומורכבת הקושי הלך והתעצם, דבר שגרר איטיות ומורכבות בפיתוח ככל שהתקדם ותחזוקה רבה, וכך, בניגוד למחירי החומרה שכל הזמן ירדו, מחירי התכנות דווקא האמירו.
לפיכך היה צורך לחפש מתודולוגיה חדשה שתפשט ותקל על עבודת התכנות.
אחד מהכיוונים לטיפול בבעיה היה ביסוס של פיתוח התוכנה על מודולות, כעין "קופסאות שחורות" שניתן להשתמש בהן שימוש משותף ולהעתיקן ליישומים נוספים, בבחינת שימוש חוזר (Reuse) של קוד, ובכך לקצר את תהליך פיתוח התוכנה (דבר שיושם למשל בקובצי DLL).
בהסבר פשטני מאוד, תכנות מונחה־עצמים הוא תכנות שמבוסס על יצירת "קופסאות שחורות" בעלות חיים עצמאיים משל עצמן, שאינן תלויות בגורם חיצוני.
כל דבר בפרדיגמה זו הוא אובייקט (וישנן שפות שבהן אף משתנים פרימיטיביים הם אובייקטים).
מהתפיסה הזו התפתחה מתודולוגיה המחקה את העולם הממשי שקיימים בו עצמים ותתי־עצמים, שלהם יש תכונות ופעולות משל עצמם.
כך, כל תוכנה היא בעצם אוסף היררכי של אובייקטים רבים, שמקושרים אחד עם השני לכדי מערכת גדולה ומתואמת.
כאשר הקוד מאורגן לפי אובייקטים המייצגים ישויות, הדבר מאפשר שימוש חוזר בתוכנה, לצד אפשרות טובה להרחיב את הקוד הקיים.
כמו כן, ישנו מעבר טבעי יותר בין הניתוח, התכנון והמימוש.
לדוגמה, התפיסה האנושית מחלקת את העולם לקטגוריות של דומם, צומח וחי, אשר כל אחת מהן מתחלקת שוב לקטגוריות משנה, למשפחות ותתי משפחות.
התכונות והפעולות, אף שיש להן משמעות דומה, יכולות לפעול בצורות אחרות בקטגוריות השונות.
למשל פעולת הנשימה, שהיא קליטת החמצן מהסביבה, מתבצעת באופן שונה אצל דג ואצל אריה, אף על פי שהיא דומה מבחינה לוגית: אצל הדג הפעולה מתבצעת על ידי קליטת חמצן מהמים באמצעות זימים, ואצל האריה על ידי קליטת החמצן מהאוויר באמצעות הריאות.
הרעיון של עצמים ומופעים שלהם הופיע לראשונה בשנת 1963 בתוכנה בשם Sketchpad.
כמתודולוגיה לפיתוח תוכנה, מומש תכנות מונחה־עצמים לראשונה בשפת הסימולציה Simula 67, שנוצרה בשנות ה-60 של המאה ה-20 על ידי הנורווגים אולה־יוהאן דאל וקריסטן ניגארד.
בשנת 2001 הוענק לשניים פרס טיורינג, בזכות תרומתם לפיתוחו של תכנות מונחה־עצמים.
השפה מימשה למעשה סוג פרימיטיבי של סגור, שהוא תכונה של שפות תכנות המאפשרת התנהגות דומה לזאת של אובייקט.
פיתוח ושכלול של הרעיון נעשו בשפת Smalltalk, שפותחה בשנות ה-70 של המאה ה-20 בזירוקס פארק.
שפה זו זכתה להכרה נרחבת ולעניין רב באקדמיה ובתעשייה, והייתה השפה הראשונה שניתן לכנותה "מונחית־עצמים".
בפיתוח תוכנה עסקית זכתה מתודולוגיה זו לתפוצה רחבה החל מסוף שנות ה־80 של המאה ה-20, תחילה ב־Smalltalk ולאחר מכן בשפות התכנות C++ וטורבו פסקל.
שפת אייפל שהוכרזה ב־1985 הושפעה מהשפות פסקל, Simula, Ada, Z ושימשה השראה לשפות פופולריות כמו #C ,Java ,ו־Ruby.
שפות נוספות התומכות בתכנות מונחה־עצמים הן פייתון, Ruby ,Delphi ועוד רבות אחרות.
של חברת מיקרוסופט פיתחה החברה שפה חדשה לתכנות מונחה־עצמים, #C, והשלימה יכולת זו שהייתה חלקית בגרסה שישית של שפת Visual Basic, בגרסה הקרויה Visual Basic .NET.
מרכיב בסיסי בתכנות מונחה־עצמים הוא המחלקה (Class).
מחלקה היא מבנה מופשט בעל שדות (fields) המגדירים את המחלקה כלפי פנים, תכונות (Properties) המגדירות ומאפיינות את המחלקה כלפי חוץ, ושיטות (Methods) שהן פונקציות ייחודיות למחלקה, הפועלות על משתני המחלקה.
בחלק משפות התכנות (בעיקר המודרניות כמו Java ו־#C ו-PHP) קיימים גם אירועים (Events), שהם הודעות השייכות למחלקה ומוזנקות בהקשרים שונים, למשל בתחילתו או בסיומו של הליך או כתגובה לקלט מהמשתמש.
על מנת להשתמש במחלקה, המתכנת יוצר מופעים שלה.
כל מופע של מחלקה הוא עצם (Object או Instance).
היחס בין המחלקה לבין המופע, הוא היחס בין הגדרת טיפוס (Type) לבין הכרזת משתנה מסוג טיפוס בפועל בזיכרון המחשב.
כלומר, בעוד שהמחלקה מהווה תבנית ומגדירה את התכונות והפעולות השייכות לה, עצם הוא משתנה פעיל שטיפוסו הוא המחלקה ומכיל את המידע הזה בפועל - כל עצם מכיל את התכונות והפעולות שהוגדרו במחלקה ממנה נוצר.
לדוגמה, למחלקה הקרויה "מכונית" יש תכונות: צבע, דגם, שנת יצור, ופעולות: התנעה, נסיעה, עצירה.
כל מכונית מסוימת היא עצם במחלקה זו, ולכל תכונה ערך המתאים למכונית המסוימת, למשל מזדה לבנה מודל 2003.
בשפות המשתמשות במנגנון איסוף זבל (Garbage collection), כגון Java, ישנה פונקציה מקבילה אך היא נקראת רק בעת ההריסה הסופית של העצם על ידי המנגנון, ולכן תפקידיה שונים.
התכנות במתודולוגיה זו מצריך תכנון ומאמץ יתר מבשיטה הרגילה, מפני שצריך לנתח, להגדיר ולארגן מראש את המערכת כולה ולבנות את כל המודל שלה, שבו יוגדרו כל האובייקטים השונים, הפונקציונליות שלהם וההיררכיה שביניהם, כך שהמתכנת הופך להיות ארכיטקט וקבלן גם יחד.
הכתיבה אינה אינטואיטיבית כמו בשפה פרוצדורלית מכיוון שאפילו כתיבת פונקציה פשוטה, כופה יצירת אובייקט שלם עם פונקציות בונות והורסות.
אין הסכמה כללית לגבי סט מסוים של תכונות המגדירות מהו תכנות מונחה־עצמים, או מהי שפה מונחית־עצמים.
חוקרים שונים מגדירים מאפיינים שונים, ושפות שונות תומכות במאפיינים שונים.
כאשר כל מאפיין בנפרד מופיע גם בפרדיגמות תכנות אחרות:
הפשטת נתונים (Data Abstraction) הנעשית באמצעות כימוס (Encapsulation) והסתרת המידע (Information Hiding) - הסתרה של מימוש.
הפשטת הנתונים מתממשת בשפה באמצעות הגדרות מופשטות של מבנה הנתונים במחלקה, שלאחר מכן יכולים להיות להם מופעים קונקרטיים כאובייקט.
כימוס (Encapsulation) - הסתרת המבנה הפנימי של המחלקה ממי שמשתמש בה.
היררכיה הגדרת יחסים היררכיים בין עצמים באמצעות:
ירושה (Inheritance) - ירושה של מימוש של מתודות או משתנים.
מחלקה היורשת ממחלקה אחרת מעניקה לאובייקטים שלה גם את המימוש הפנימי של המחלקה האחרת.
כאשר מדובר בירושה ציבורית (כמו ברוב שפות התכנות), היא מגיעה בד בבד עם הגדרה של המחלקה החדשה כתת־טיפוס של הראשונה.
פולימורפיזם של תת־טיפוסים (Subtyping) - טיפוס א' הוא תת־טיפוס של טיפוס ב' אם כל הממשק של ב' ממומש באובייקט א'.
במקרה כזה, כל פעולה שניתן לבצע על אובייקט מטיפוס ב' ניתן לבצע גם על אובייקט מטיפוס א' - כולל העברה כפרמטר לפונקציות, או הפעלה של מתודות.
ריבוי ייצוגים או הפעלה דינמית (Multiple representations או Dynamic dispatch) - כאשר מבוצעת על אובייקט פעולה, האובייקט עצמו בוחר את המימוש שיבצע את הפעולה.
זהו המאפיין העיקרי המבדיל בין אובייקטים לבין ADT - טיפוסי נתונים מופשטים.
מודולריות (Modularity) - חלוקת העצמים (האובייקטים) לפי נושא, הפרדה לתחומים שונים, וקיבוץ תכונות ושיטות ליחידות בעלות נושא או עניין אחד, אשר כל אחת מהן מהווה יחידה עצמאית וסגורה כמו בעולם הממשי.
רקורסיה פתוחה (Open recursion) או חיפוש דינמי (Dynamic lookup) של מתודות.
קיים משתנה מיוחד (או מילה שמורה) בשם this, self או Me, המאפשר לגוף של מתודה לקרוא למתודה אחרת על אותו אובייקט.
המזהה של המשתנה נכרך בזמן ריצה (Late binding) - מה שמאפשר למתודות של מחלקה אחת להפעיל מתודות שהוגדרו אחריה, במחלקה שירשה ממנה.
ישנן שפות התומכות במנגנון מורחב יותר הנקרא Multi-methods.
מאפיינים נוספים הם: זהות (Identity) - דרך לבדוק האם שני אובייקטים הם בעצם אותו אובייקט, והימשכות (סריאליזציה) - שהיא היכולת לשמור על מצב העצם לאורך זמן, למשל לאחר כיבוי והדלקת המחשב.
בתכנות מונחה עצמים המתכנת יוצר מחלקות שמשמשות כעין "שחקנים" מופשטים, שיכולים לבצע עבודה, לדווח על מצבם ולתקשר עם אובייקטים אחרים.
בשיטה זו ניתן לבצע הכללה של מקרים פרטיים.
באמצעות שימוש בכימוס ניתן לבצע פולימורפיזם.
בדוגמה הבאה בשפת ג'אווה, נעשית הדגמה בהגדרה מופשטת מחלקת בעל חיים Animal, שיש לה את התכונות "מיקום", ו"מאגרי אנרגיה", ואת השיטות: "האם רעב", "לאכול", ו"לנוע".
באמצעות ההגדרה שלמעלה של חיה ניתן ליצור אובייקטים כמו חזיר ופרה ולקרוא להן באופן הבא:
בדוגמה לעיל, המחלקה Animal היא הפשטה במקום מין של חיה בפועל, LivingThing היא הפשטה נוספת (במקרה זה הכללה) של Animal.
ניתן לראות שבאמצעות הגדרה מופשטת של הטיפוס הכללי ניתן לבצע הכללה, ולהשתמש בה למספר רב של פרטי חיות, במקום לכתוב קוד נפרד לכל בעל חיים, דבר שמאפשר ליצור ריכוז של קוד.
בנוסף, הפשטה כזו יכולה להסיר את הצורך שמתכנת היישום יעסוק בסוג המזון של כל חיה, ולתת למשתמש לעסוק בנתונים אלו.
אם יש מאפיינים נפרדים לכל בעל חיים, למשל פרה שנותנת חלב בזמן שהיא חיה, לעומת חזיר שנותן בשר רק במותו, ניתן לאפיין כל סוג בנפרד באמצעות פולימורפיזם של תת־טיפוס.
המימוש הפנימי של אובייקט הוא באופן כללי מוסתר מחלקי קוד החיצוניים להגדרת האובייקט.
רק המתודות של האובייקט עצמו (או לעיתים, של אובייקטים אחרים השייכים לאותה מחלקה) רשאיות לבצע פעולות על השדות שלו.
יצירת האובייקט כמודול סגור וכ"קופסה שחורה", בה כל המכניזם הפנימי עלום וכמוס מפני המשתמש, מאפשרת בקרה טובה על כל הפעילות עם האובייקט.
כל הנתונים הפנימיים כמו גם פעולות פנימיות, המשמשים את העצם, אינם ידועים מחוץ לעצם (כלומר למתכנת המשתמש בו) ולכן מפתח האובייקט יכול לשנותם בחופשיות מבלי שיהיה צורך לשנות את התוכנות אשר משתמשות באובייקט.
הדבר גם מאפשר להחליף בקלות ופשטות מנועי תכנות אשר פועלים מבחינה פנימית באופן שונה לגמרי, כל זמן שהם נותנים כלפי חוץ את אותם שיטות ומאפיינים.
קשר מסוג זה בין עצמים קרוי צימוד רפוי (loose coupling), והוא מקל על יצירת תוכנית מודולרית, פשוטה להבנה וניווט, וקלה לתחזוקה.
ניתן לתאר כלי רכב שמשתמש במנוע מסוים ויש לו מעט חיבורים סטנדרטיים, ללא כל גישה לפעילות הפנימית של המנוע.
הסיכוי שהפעילות של כלי הרכב באמצעות המנוע לגרום לו לתקלה פנימית מתמעט, והאפשרות להחליף מנוע מטיפוס אחד במנוע עם ממשקים חיצוניים דומים אפשרי מאוד.
בדוגמה ניתן לראות כלי רכב, שמשתמש במנוע, תיבת הילוכים ומשאבת דלק, כאשר כל אחד מהם הוא אובייקט כמוס, שלא ניתן לשנות את החלקים הפנימיים שלו אלא להשתמש בשיטות שהוא חושף.
טיפוסי נתונים מופשטים מאפשרים כימוס בצורה דומה לזאת של אובייקטים.
ישנן שפות תכנות מונחות־עצמים שאינן מאפשרות כימוס, או מאפשרות להפר אותו:
בגרסאות ישנות בשפת פייתון, אין דרך למנוע גישה אל כל שדה של כל אובייקט, וניתן רק לסמן שדות שאינם מיועדים לגישה כזאת על ידי מתן שם מתאים.
עם זאת, בגרסאות חדשות ניתן להגדיר משתנה מחלקה בשם המתחיל בשני קווים תחתונים והוא ישמש כמשתנה פרטי.
בשפות ++C, ג'אווה, #C ודומותיהן ניתן להצהיר על שדות "ציבוריים", שניתנים לגישה מכל מקום.
בשפת ++C ניתן להצהיר על מחלקה "חברה" (Friend) או פונקציה חברה, הרשאית לגשת לכל שדה באובייקט, גם אם הוגדר כפרטי.
תכונת ההתבוננות־פנימה (Reflection) בשפת ג'אווה מאפשרת לגשת לכל שדה בכל אובייקט.
הטיפוס של אובייקט הוא הממשק שלו.
כלומר, אוסף ההודעות שהוא יודע לקבל, או אוסף המתודות הציבוריות שלו.
המבנה הפנימי של האובייקט אינו חלק מהטיפוס שלו, כיוון שאינו משפיע על אוסף הפעולות שניתן לבצע איתו.
אם אובייקט יכול לבצע קבוצה של פעולות, הוא שייך גם לכל טיפוס שדורש רק חלק מהפעולות האלה.
היכולת להתעלם מחלק מהממשק של אובייקט מאפשר לכתוב קטע קוד יחיד המאפשר לבצע מניפולציה על מגוון רחב של אובייקטים, תוך שהוא דורש רק את הממשק המשותף שלהם.
תכונה זו מנוצלת במיוחד בשפות בעלת טיפוסיות ברווז כגון פייתון, Ruby, ו־Smalltalk.
ממשקים (Interface) בשפת ג'אווה ומחלקות אבסטרקטיות בשפת ++C מאפשרים גם הם להגדיר במפורש תתי־טיפוסים, בלי צורך לבצע ירושה של המימוש.
ישנן שפות שאינן מונחות־עצמים התומכות בתתי טיפוסים - למשל שפת ML המאפשרת להעביר לפונקציה רשומה כלשהי, כל עוד היא מכילה לפחות את השדות שהפונקציה דורשת - גם אם היא מכילה שדות נוספים, וגם אם לא.
תמיכה לתת־טיפוסים בשפה מסייעת בשימוש בפולימורפיזם.
אובייקטים המשתפים חלקים מהממשק שלהם, משתפים לעיתים קרובות גם התנהגות.
ירושה מאפשרת לממש את ההתנהגות המשותפת הזאת פעם אחת.
רוב השפות מונחות־העצמים משיגות את היכולת הזאת דרך מחלקות, שכל האובייקטים הנוצרים דרכן משתפים התנהגות - ודרך מנגנון שנקרא ירושה, המאפשר למחלקה אחת להרחיב מחלקה אחרת - להוסיף לה מימוש והתנהגות דרך מימושים של מתודות חדשות, הוספה של משתנים, ובמקרה הצורך ביצוע של דריסה של מתודות שהוגדרו במחלקה ממנה יורשים.
(שפות אחרות משתמשות במנגנון שונה, הנקרא delegation).
ניתן להגדיר מחלקה חדשה על בסיס מחלקה קיימת.
למחלקה החדשה ישנן כל התכונות והפעולות שירשה מהמחלקה שלפיה הוגדרה, ובנוסף ניתן להגדיר פעולות נוספות במחלקה החדשה, או לשנות פעולות שירשה.
המחלקה המורישה קרויה מחלקת בסיס (base class), מחלקת־אב (parent) או מחלקת־על (superclass).
המחלקה היורשת קרויה מחלקה נגזרת (derived class), בן (child) או תת־מחלקה (subclass).
דוגמה: על בסיס המחלקה "רכב" שהוא כלי שינוע, אפשר להגדיר את המחלקות: "רכב יבשתי", "כלי טיס" ו"כלי שיט" שכל אחד מהם נע בתווך שונה.
מ"רכב יבשתי" אפשר להגדיר את המחלקה "רכב יבשתי לא ממונע" שממנו אפשר להגדיר את המחלקות: "אפריון", "אופניים" ו"כרכרה" שבכל אחד יש שינוי בצורת ההנעה והמטרה, ו"רכב יבשתי ממונע" שממנו אפשר להגדיר את המחלקות: "אופנוע", "משאית" ו"מכונית" אשר בכל אחת מהן יהיה שינוי בצורת הרכב, במנוע, בגלגלים ואף ביעוד הרכב.
על בסיס המחלקה "מכונית" ניתן להגדיר מחלקה חדשה "מונית", ובה תכונות ופעולות נוספות: כמו "כובע" המונית, הפעלת והפסקת המונה.
הדוגמה המובהקת ביותר לרעיון ההורשה מופיעה במיון עולם הטבע.
בשיטת המיון ההיררכי הנהוגה בתחום זה, מוגדרות מחלקות ברמות אחדות.
בכל אחת מהרמות נקבעות תכונות מסוימות, וכל רמה יורשת את התכונות של הרמות שמעליה.
כאשר אנו פוגשים עצם מסוים בעולם החי, למשל כלבה ששמה "לאסי", אנו לומדים על תכונותיו של העצם לפי המחלקה שאליה הוא משתייך.
ישנן שפות שבהן ניתן לרשת בו זמנית מכמה מחלקות בסיס, וליצור מחלקה שממזגת את התכונות של כמה מחלקות; ירושה כזאת עלולה ליצור בעיות במקרה של "ירושת יהלום", כלומר מקרה בו שתיים ממחלקות הבסיס יורשות מאותה מחלקה.
בשל כך חלק מהשפות מגבילות את המנגנון לירושה ממחלקת בסיס אחת, ומימוש מספר ממשקים.
התמיכה בפולימורפיזם נותנת למתכנת את היכולת לממש אלגוריתמים ומבני נתונים לשימוש כללי, ולגזור מהם צורות שימוש שונות בהתאם לעצמים ולנסיבות המשתנות.
הפולימורפיזם מאפשר להגדיר מושגים כלליים, ולגזור מהם מקרים ספציפיים יותר.
בנוסף, מאפשרת השפה להתייחס למושג בצורה מופשטת המאפשרת הכללה.
התייחסות למושג בצורה מופשטת, מאפשרת להשתמש בקוד כללי, הפועל על סוגים רבים ושונים של מושגים דומים לו.
למעשה, ניתן להשתמש בקוד המתאים לעצם בכל טיפוס המהווה מקרה פרטי של המושג הכללי.
גישה זו שיוצאת מהאבסטרקט ומגיעה אל הקונקרטי ביותר, מונעת את הצורך לכתוב מחדש מחלקות נפרדות עבור כל אחד ואחד מטיפוסי המנועים השונים, והיישומים המעשיים של כל אחד ואחד מהם, ומסירה מהתכנות את הסרבול של כתיבה חוזרת ונשנית, ובכך הופכת אותו לריכוזי, ארגוני, יעיל ואלגנטי.
אובייקטים מחליטים בעצמם איזה קוד יורץ כאשר מבוצעת עליהם פעולה.
שני אובייקטים המגיבים לאותה קבוצה של פעולות (כלומר בעלי ממשק משותף) עשויים להשתמש במימושים שונים לחלוטין, המתאימים לייצוג שלהם.
מימושים אלה נקראים מתודות (שיטות).
קריאה של פעולה לאובייקט - פעולה הנקראת "קריאה למתודה" או "שליחת הודעה" - עשויה לכלול חיפוש של שם הפעולה בזמן ריצה בטבלה המתאימה לאובייקט.
תהליך זה שונה מהמתרחש בטיפוסי נתונים מופשטים (ADT) הנתמכים גם על ידי שפות שאינן מונחות־עצמים, כגון שפת C.
בטיפוסים אלה ישנו מימוש יחיד לפעולות על ערכי הטיפוס.
להבדל זה ישנם הן יתרונות והן חסרונות.
מבנה דוגמת תוכנית מונחת עצמים
הגדרת שדות ושיטות למחלקה 1
מחלקה 1א: יורשת ממחלקה 1
הגדרת שדות ושיטות למחלקה 2
מחלקה 3: מפעילה את מחלקה 2
מחלקה 4א : מממשת ממשק 4
אובייקט _1א מממש את מחלקה 1א
אובייקט _3 מממש את מחלקה 3
אובייקט _4 מממש את מחלקה 4
תכנות פרוצדורלי הוא פרדיגמת תכנות המגבירה את מודולריות קוד המקור ומסייעת להקל על התחזוקה.
מימוש הפרדיגמה החל בתחילת שנות השישים, בשפות תכנות כדוגמת ALGOL ו-PL/I ונמשך לאחר מכן בשפות התכנות C ו־Pascal.
היא הייתה התפתחות של שיטות הקידוד שקדמו לה, שבהן תוכנית מחשב (למשל בשפת קובול) הייתה כתובה כמקשה אחת, כאשר כל המשתנים פתוחים לכל חלקי הקוד, ובקרת הזרימה נעשתה בעיקר באמצעות פקודת goto.
בתכנות פרוצדורלי מחולקת תוכנית מחשב אחת לתת תוכניות רבות, שכל אחת מהן קרויה פרוצדורה (משני סוגים: שגרה או פונקציה), וכל פרוצדורה יכולה לקרוא לפרוצדורה אחרת על-מנת לבצע פעולה שבה היא מתמחה.
כל פרוצדורה בתוכנית פרוצדורלית מבצעת משימה מוגדרת, כחלק ממכלול המשימות המרכיב את התוכנית השלמה.
המשתנים בתוכנה פרוצדורלית הם לעיתים משתנים מקומיים (לוקליים), כלומר מוגדרים בתוך פרוצדורה ומשמשים רק אותה ואת הפרוצדורות הפנימיות לה, ולעיתים משתנים גלובליים, המשמשים את כל הפרוצדורות שבתוכנית.
שימוש קפדני במשתנים לוקליים מאפשר כימוס.
המשמעות הבסיסית היא שמשתנים מקומיים של פרוצדורה אחת אינם גלויים לפרוצדורה אחרת, ולכן הם מוגנים מפני קריאה ושינוי.
פרוצדורות יכולות להכיל תת-פרוצדורות כדי להמשיך ולשפר את הקריאות (readability) של התוכנה ושבירתה לחלקים לוגיים ברורים.
מצב שבו פרוצדורה נמצאת בתוך פרוצדורה אחרת וכך הלאה נקרא קינון (nesting).
בשפה פרוצדורלית כדוגמת פסקל, מקובל לכתוב שגרות רבות שכוללות תת-שגרות, ולבסוף לכתוב תוכנית ראשית קצרה שבה ישנן קריאות למספר קטן של שגרות ראשיות, אשר מסתעפות לתת שגרות נוספות, במבנה של הסתעפות ענפית, לצורך מילוי תפקידן.
מבנה דוגמת תוכנית פרוצדורלית בפסקל
היתרון הראשון והברור הוא חלוקת התוכנה ליחידות ריצה מובדלות, בעלות שם, המסתירות מהלך שלם משאר התוכנית, ולהם ניתן לקרוא מתוך שאר חלקי התוכנית.
בתוך פרוצדורה ניתן להגדיר משתנים מקומיים, וכך להגן על פעולתה הפנימית ולפשט באופן יחסי את כתיבת התוכנה.
יתרון נוסף הוא היכולת להשתמש מחדש (reuse) בקטעי קוד קיימים.
אפשר לקרוא לפרוצדורה מספר רב של פעמים עם פרמטרים שונים, כך שכל פעם היא תבצע את פעולתה עם ערכים אחרים.
דוגמה פשוטה: פונקציית סינוס (sin), או כדוגמה מורכבת יותר, פרוצדורה המטפלת בהוראת משיכת מזומנים מחשבון בבנק, ומקבלת כפרמטרים את חשבון הלקוח וסכום המשיכה.
תכנות פרוצדורלי ממומש בתוך תוכנית אחת, שכל חלקיה עוברים הידור יחד.
ניתן לעשות צעד נוסף, ולפרק את התוכנית למודולים אחדים, שכל אחד מהם עובר הידור בנפרד, תוך שמירה על היכולת לקרוא ממודול אחד לפרוצדורה הנמצאת במודול אחר.
פירוקה של תוכנית למודולים יצר קושי מסוים בתחזוקת התוכנה, מכיוון שלעיתים שינוי בהגדרת משתנים בפרוצדורה הנמצאת במודול מסוים, חייב שינוי בקריאה אליה ממודולים אחרים, וככל שהתוכנה הייתה גדולה ומורכבת הקושי הלך והתעצם.
פרדיגמה מתקדמת יותר היא תכנות מונחה עצמים, אשר בין השאר התייחסה לבעיה זו.
בהנדסת תוכנה, תכנות מונחה אירועים הוא תפיסה בתכנות.
הרעיון הוא שבתוך תוכנית המחשב קיימים חלקים (ערוכים כרצפי פעולות), הממתינים לקבלת אות.
האות נקרא "אירוע" (event) והוא מתקבל כאשר מתרחש אירוע מסוים במערכת, אליו קשוב היישום.
האירועים בדרך כלל יהיו פנימיים, בין שני חלקים של אותה תוכנה, אך גם יכולים להיות חיצוניים בין תוכנה אחת לשנייה.
בתכנות מונחה אירועים בוחר המתכנת להעביר ולקבל הודעות בין חלקים שונים בתוכנה באמצעות אירועים שהם הגורם המתווך, מעין דוור וירטואלי.
המתכנת יכול להגדיר אירועים במחלקות, להזניקם וללכוד אותם, או ללכוד אירועים שמובנים במערכת, שהתוכנה כבר דאגה להזניקם, ולממש בהן הוראות תכנותיות שונות בהתאם לרצון המתכנת.
אירוע למעשה בנוי משני חלקים:
מקום בתוכנה שבו האירוע מוגדר ומוזנק כאשר מתרחשת סיטואציה כלשהי, עם פרמטרים או בלעדיהם.
מקום בתוכנה שבו נרשמים לאירוע ובו האירוע נלכד, והמתכנת יכול לקשור לאירוע פונקציונליות כלשהי.
תכנות מונחה אירועים מתאים לקונספט של הכימוס (Encapsulation) במתודולוגיה של תכנות מונחה-עצמים ומהווה נדבך נוסף במתודולוגיה.
כשם שלאובייקט יש משתנים, מאפיינים ופונקציות שייחודיות לו, כך יש לו אירועים משל עצמו שאופייניים לו, שמוזנקים על פי בדיקות פנימיות שלו, שמכירים את התוכן הכמוס של המחלקה.
למחלקה המארחת את האובייקט המתארח, אין צורך להכיר את הלוגיקה הפנימית של האובייקט המתארח, כשם שאין היא מכירה ומתעסקת בלוגיקה הפנימית של הפונקציות והמשתנים הפנימיים שלו, ולעיתים אף אין ביכולתה לבצע את מה שיכול לבצע האובייקט המתארח בשל חוסר נגישות לנתונים שקיימים באובייקט המתארח.
בתכנות מונחה עצמים השימוש באירועים מאפשר פעילות דו כיוונית, בנוסף להפעלת פונקציות של המחלקה המתארחת, גם קבלת משוב מהמחלקה המתארחת (נקרא לפעמים Callback).
השימוש באירועים מאפשר גם שימוש בפונקציות א-סינכרוניות, כאשר את התוצאה לפעולה מקבלים באמצעות אירוע.
המחלקה המממשת תחליט על דרכי מימוש האירוע: שליחת מסרון ברכה, הצגת ברכה על גבי מסך במסדרון, או משלוח אימייל יידוע בעניין יום ההולדת לכל חברי כיתתו של הסטודנט.
באופן זה קיימת חלוקה מובנת וברורה, וישנה הצמדה הגיונית בין שדה "יום הולדת" לבין אירוע "בעת יום הולדת".
הבדיקה עצמה של יום ההולדת תעשה במחלקת סטודנט, אך המימוש של יום ההולדת יתבצע במחלקה המארחת את מחלקת סטודנט, כך גם יכולות להיות כמה מחלקות מארחות למחלקת סטודנט, שכל אחת תממש בצורה אחרת את אותו האירוע.
האירועים בדרך כלל מסווגים כאירועי משתמש וכאירועי מערכת.
אירועים יכולים להיווצר על ידי המשתמש לרוב באמצעות מקלדת ועכבר (או מסך מגע).
אלו הם האירועים הנפוצים ביותר: הקשה במיקום מסוים על פני המסך באמצעות העכבר, לחיצה או שחרור של מקש מקלדת וכולי.
בנוסף יכולים להיווצר אירועים שהמערכת יוצרת מעצמה בתזמון קבוע מראש או בתגובה לפעילות.
למשל אירועי שעון באמצעות הפעלת טיימר, שמופעלים במועד קבוע מראש, כמו ניקוי הדיסק ואיחויו או ביצוע פעולת גיבוי.
וכן אירועים בתגובה לפעילות חיצונית כמו קבלת דואר אלקטרוני, כיבוי המחשב או קבלת מידע מחיישן מסוים, למשל התראה ממצלמה על גילוי תנועה.
בשפות מונחות עצמים נהוג שלכל עצם יש אירועים שייחודיים לו, בצד האירועים שיכולים להיות משותפים לכולם כמו הקלקת עכבר או מקלדת.
למשל לטופס יכול להיות אירוע בעת טעינת טופס, סגירת טופס ושינוי גודלו או מזעורו או בעת שהטופס "לוכלך" כאשר טקסט הוזן לאחד מהפקדים שבו.
ואילו לפקד טקסט שמשולב בטופס יוכל להיות אירוע של 'בעת שינוי הטקסט' שבפקד או 'בעת שהתוכן שמוזן איננו תואם למסכת הקלט שלו'.
ואילו לפקד fileWatcher בדוט נט יהיה אירוע בעת יצירת קובץ בספריה מסוימת.
תכנות מונחה אירועים אופייני ליישומים בעלי ממשק משתמש גרפי, אך אינו בלעדי להם.
ישנן סביבות כמו ToolBook שבהן יש ניהול היררכי של אירועי משתמש, שיכולים ל"טפס" מאובייקט פרטי כפקד לאובייקט כללי שמכיל אותו כמו חלון עד לרמת היישום כולו, ולהילכד בכל שלב ושלב ביישום כולו.
דבר שמאפשר ניהול מרכזי של כלל האירועים שביישום.
באקסס אירוע יכול לטפס מפקד לטופס המכיל אותו, ובו הוא נעצר.
ב-Winform בדוט נט אירוע משתמש נעצר כבר בפקד ולא עולה אף לרמת הטופס.
בבסיסי נתונים משתמשים בפרדיגמה זו באמצעות פעילות הטריגרים, כאשר אפשר ליצור שגרות שונות שיפעלו בעת פעילות על הטבלה: יצירת רשומה, עדכון רשומה או מחיקתה.
הטבלה כאילו ממתינה שיבצעו בה פעולות ומגיבה בהתאם לפעילות השונה עליה.
למשל בעת יצירת רשומה חדשה בטבלה רישום שם המשתמש והזמן בטבלה אחרת.
ריכוז הפעילות במקום זה יכול למנוע דרכי פעולות שונות על הטבלה, ולהבטיח שמכל מקום שתעשה פעילות על הטבלה תהיה תגובה ותוצאה דומה.
בדוגמה הבאה בשפת VB.NET ניתן לראות שתי מחלקות שמעבירות אירוע מאחת לשנייה.
מחלקה Form1 היא המחלקה המארחת, ומחלקה People היא המחלקה המתארחת.
ובמחלקת Form1 ממומש אובייקט של People שלוכד את האירוע BirthDate בעת שהוא יוזנק במחלקת People באמצעות Handles.
להלן מספר דוגמאות לסביבות תכנות המאפשרות יישום קל של תכנות מונחה אירועים.
uniPaaS של מג'יק תעשיות תוכנה הישראלית.
במחשבים, תכנות פונקציונלי היא פרדיגמת תכנות השמה דגש על חישוב ביטוי תוך שימוש בפונקציות ההפשטה העיקריות.
זאת בניגוד לפקודות (Statements) שהן הכלי העיקרי של שפות התכנות מהפרדיגמה הנפוצה יותר, הפרדיגמה האימפרטיבית.
על השפות הפונקציונליות נמנות שפות כגון LISP הוותיקה, Dax ,Haskell ,ML ו-Scheme.
הפרדיגמה הפונקציונלית לא נכנסה אל הזרם המרכזי בעולם התוכנה, אך שפות מודרניות רבות הנמצאות בשימוש מסיבי בתעשייה, אף שאינן שפות פונקציונליות, מאפשרות מאפיינים פונקציונליים רבים: פייתון, #C, ו-++C הן דוגמאות בולטות לשפות מרובות-פרדיגמות הכוללות תמיכה רבה בתכנות פונקציונלי.
שפת התבניות של ++C היא תת-שפה פונקציונלית טהורה, המורצת בזמן הידור.
המבנה התאורטי עליו מתבססת הפרדיגמה הוא תחשיב למבדא, בניגוד למודל מכונת טיורינג עליו מתבססת הפרדיגמה האימפרטיבית, הנפוצה יותר.
מודל מכונת טיורינג הוא מודל שבו יש "מכונה" מופשטת המבצעת אלגוריתם - רצף פקודות שינויי מצב; בהתאם לכך, שפות אימפרטיביות מבצעות אלגוריתם - פעולה לאחר פעולה.
לעומת זאת, תחשיב למבדא עוסק בחישוב של פונקציות - בעיקר חישוב רקורסיבי.
הפרדיגמה הפונקציונלית רואה את הפעולה של תוכנית כפונקציה מקלט אל פלט - המחשב מקבל קלט מסוים, מבצע עליו חישוב ומוציא פלט.
תוכנית פונקציונלית בנויה בהתאם, כרצף של הצהרות על פונקציות ומשתנים, שלאחריהם מתבצעת קריאה לפונקציה, הנעזרת בפונקציות אחרות, וכן הלאה, עד שבסופו של דבר מוחזר ערך כלשהו, והוא ערך הפלט - תוצאת החישוב (בהקשר זה פלט איננו הדפסה אל המסך, המדפסת, או כל רכיב חומרה אחר).
הוכח כי המודלים הללו שקולים, ולכן אין הבדל מבחינת כוח החישוב בין שפות התומכות בפרדיגמה הפונקציונלית לבין שפות אימפרטיביות טהורות (כגון שפת C).
עם זאת, עשויים להיות הבדלים ניכרים בהיבט של נוחות ההבעה של חישובים מסוימים מול חישובים אחרים, קריאות, עקביות מתמטית, יעילות המימוש וכן הלאה.
ישנו דמיון מסוים בין תכנות פונקציונלי לתכנות לוגי, אך האחרון עוסק במבנים כלליים יותר - יחסים מול פונקציות שהן מקרה פרטי של יחסים.
תכנות פונקציונלי נקרא "טהור" אם אין בו שינוי מצב, כלומר אין בו משתנים או אובייקטים שמשנים את מצבם הפנימי.
כל עיבוד מידע נעשה על ידי יצירת ערכים חדשים כנדרש.
כתיבה כזו מקלה על הוכחות נכונות התוכנה ביחס למפרטיה.
שינוי מצב של המערכת נקרא "תופעות לוואי".
מכיוון שכל תקשורת של תוכנית עם העולם החיצון (קלט/פלט) משנה מצב של אובייקט ומסיבות נוספות, של נוחות או יעילות, גם שפות פונקציונליות "טהורות" כוללות תופעות לוואי, אך חלקן מרכזות את המבנים בעלי "תופעות הלוואי" במקום מוגדר, לדוגמה, במבנה שנקרא מונאדה.
ביטוי למבדא הוא ביטוי שערכו הוא פונקציה (על פי רוב, כחלק מביטוי אחר).
היא פונקציה המחזירה ערך המשמש לבדיקה בינארית של חיוב או שלילה.
אופרטור היא פונקציה שניתן להשתמש בה בתחביר שונה מהרגיל.
על פי רוב ניתן להשתמש בתווים שאינם קבילים לצורך מתן שם לפונקציה רגילה, כגון הסימן '+' בשפות רבות.
רשימה היא מבנה נתונים סדרתי שניתן להתייחס אליו כמורכב משני איברים: ראש וזנב.
עובדה זו הופכת אותו לשימושי מאוד ברקורסיה, ועל כן הוא מבנה הנתונים העיקרי בשפות פונקציונליות רבות.
פונקציות בשפות פונקציונליות הן עצמים בעלי קיום בלתי תלוי משל עצמם, כלומר הן ערכים לכל דבר, כמו מספרים או מחרוזות.
ניתן לשלוח אותן לפונקציות אחרות כפרמטרים, והן יכולות לשמש כערכי החזרה.
פונקציה המקבלת פונקציה כפרמטר נקראת "פונקציה מסדר גבוה".
שלוש דוגמאות לפונקציות חשובות מסדר גבוה: map, filter, reduce.
map, המקבלת פונקציה ורשימה, ומפעילה את הפונקציה על כל איבר ברשימה.
הקוד הבא בשפת Haskell יוצר רשימה שכל איבריה חיוביים בעזרת פונקציית ערך מוחלט (abs) שמועברת לפונקציה map:
filter, המקבלת פרדיקט ורשימה, ומחזירה רשימה ללא האיברים עבורן הפרדיקט החזיר false.
reduce (נקראת גם accumulate או foldl, קיצור של fold left), המקבלת אופרטור בינארי op, איבר אדיש a0, ורשימה של איברים a1, a2,...
an, ומחזירה את תוצאת הפעולה a0 op a1 op a2...
החל מתקן C++11, שפת התבניות של ++C מאפשרת העברה של תבניות כפרמטר לתבניות אחרות, ובכך יש תמיכה ישירה בתבניות (שהן ה"פונקציות" בשפה) ממעלה גבוהה.
תכונה זאת נכנסה לזרם המרכזי משפות פונקציונליות.
שפות אימפרטיביות רבות תומכות גם הן בהעברת פונקציה כפרמטר; שפת C מאפשרת העברה של מצביעים לפונקציה (המתפקדים כפונקציות לכל דבר), ואף יש לה פונקציית ספריה הנעזרת בכך - qsort.
האלגוריתמים בספריית התבניות הסטנדרטית של ++C הם דוגמה בולטת נוספת לתמיכה רבה של שפה אימפרטיבית בהעברה של פונקציות כפרמטר לפונקציות אחרות (לצורך מיון, חיפוש, סינון וכדומה).
כל שפה התומכת בתכנות מונחה-עצמים מאפשרת העברה של אובייקטים שיש להם מתודות, וניתן להשתמש באובייקט כ"ידית" המחזיקה פונקציה (למשל בשפת ג'אווה, אף שהיא איננה תומכת בהעברה של מתודה כפרמטר בפני עצמו).
תבנית העיצוב Strategy מגדירה תרחישים וטכניקות לשילוב של המנגנון הזה בעיצוב של תוכניות מונחות-עצמים.
תכנות מונחה-אירועים הוא פרדיגמה תכנותית המבוססת על היכולת לרשום קוד לביצוע במועד שאיננו ידוע מראש; העברת פונקציה כפרמטר משתלבת היטב עם הטכניקה הזאת.
בתכנות פונקציונלי ניתן ליצור פונקציה "על הדרך", כביטוי בתוך ביטוי אחר.
כך למשל במקום הדוגמה של filter לעיל ניתן ליצור את הפרדיקט בתוך הקריאה ל-filter:
יצירת פונקציה בצורה כזאת מעלה את הצורך בתמיכה בסגור בשפת התכנות.
קיומם של ביטויי למבדא מאפשר חישוב עצל של ביטויים, דבר המאפשר גמישות בבקרת זרימה.
הקוד הבא בשפת ML מדפיס "hello world":
שימוש משולב בפונקציות map ו-filter יחד עם ביטויי למבדא הוא נפוץ כל כך שבשפות מסוימות קיים תחביר מיוחד עבורו.
אזי בשפת Haskell ניתן לכתוב בצורה המזכירה הגדרה מתמטית של קבוצה (האופרטור -> מסמן שייכות):
המבנה הופיע לראשונה בשפת NPL והוא קיים, בין היתר, בשפות Haskell, Erlang, #F, ואף בשפות לא פונקציונליות ביסודן כגון פייתון.
בשפת #C ניתן לדמות את המבנה בעזרת שימוש ב-LINQ.
בקרת זרימה בתכנות פונקציונלי היא בעיקרון אך ורק קריאות לפונקציות.
ישנן שפות פונקציונליות המשלבות גם בקרת זרימה אימפרטיבית, משיקולי נוחות או יעילות, וניתן לדמות בקרת זרימה רגילה בעזרת חישוב עצל.
המקבילה ללולאה בשפות תכנות נפוצות היא הקריאה הרקורסיבית.
לדוגמה, מימוש של חישוב 10 עצרת בשפת C עשוי להיראות כך:
זהו מימוש אימפרטיבי: יש בתוכנית שני משתנים המשנים את ערכם תוך כדי ריצת התוכנית.
מימוש פונקציונלי של אותו חישוב ייראה כך:
המימוש הזה תואם ישירות את ההגדרה המתמטית הרקורסיבית של פעולת העצרת: ותנאי ההתחלה .
במימוש זה, אין כל שינוי בערכי המשתנים!
למעשה, המשתנים בשפות פונקציונליות אינם ברי שינוי: בכל קריאה לפונקציה נוצרים משתנים חדשים, המקבלים ערכים חדשים, וכן הלאה.
מנגנון בקרת זרימה נוסף הוא "חישוב עצל".
הדוגמה הנפוצה למנגנון זה היא ביטויי תנאי, עבורם רק אחד מהענפים מחושב בכל פעם, בהתאם לערך האמת של התנאי.
מנגנון אחר הוא סלקטור, הדומה ל-switch בשפות אימפרטיביות, אך במקרים מסוימים כללי יותר ממנו (כך שניתן לבדוק התאמה לתבנית כללית).
ניתן להתייחס אל ביטויי תנאי כאל מקרה פרטי של סלקטור.
בשפות מסוימות (כגון Haskell) כל הביטויים שאין להם תופעת לוואי מחושבים באופן עצל, ובשפות אחרות ניתן להגדיר במפורש דרישה לחישוב עצל (כגון מנגנון ה־quote בשפת LISP).
לכאורה יש צורך ביכולת לתת שם לפונקציה על מנת לאפשר קריאה רקורסיבית.
למעשה אין זה כך שכן ניתן לבצע את המשימה בעזרת פונקציה מתאימה הנקראת "אופרטור נקודת שבת" (או Y-point combinator) אך טכניקה זאת איננה נוחה לשימוש יום יומי, והשלכותיה הם תאורטיות בעיקרן; הרוב המוחלט של שפות התכנות הפונקציונליות תומך בקריאה רקורסיבית לפונקציה בעזרת שם מתאים.
שפות רבות מאפשרות מתן של שמות לערכים בתור פתיח או סיומת לביטוי.
כך ניתן לכתוב קוד קריא יותר, וכן למנוע ביצוע פעולות חישוב מיותרות של פונקציה.
לדוגמה, אם אנו רוצים לבצע חישוב של הביטוי (3+2)*(3+2), נוכל לחסוך כתיבה כפולה של הביטוי:
המילה Let (בעברית "יהי") נלקחה מהביטוי המקביל במתמטיקה.
באופן דומה, ניתן (בשפות מסוימות) להתייחס לשמות בתוך ביטוי, ורק לאחר מכן להגדיר אותם.
המילה המקובלת עבור מבנה כזה היא where (יש לשים לב שהמשמעות שונה לחלוטין מהביטוי המקביל בשפת SQL ודומותיה):
ניתן להגדיר ביטויים אלה בעזרת פונקציות, ולכן התמיכה הישירה בהם בשפה פונקציונלית היא למעשה קיצור תחבירי.
תכנות חזותי הוא שיטה לפיתוח תוכנה שבה כדי לחולל קוד מקור משתמשים במטפורות של אייקונים המסמלים קטעי קוד ואף מודולים שלמים של תכנות, ובו "מניחים" על גבי טופס את קטעי הקוד ואת הפרמטרים שלהם, מתוך רשימות בחירה ותיבות סימון, על ידי גרירה ושחרור בלוקים המייצגים פקודה או מספר פקודות בתכנות.
תכנות זה מתבצע לרוב בסביבת פיתוח משולבת (IDE) כשבנוסף לתכנות החזותי יש בה גם מהדר, Debugger וכדומה.
התכנות בשיטה הזו ידידותי למתכנת, מקצר את זמן הפיתוח ומאפשר גישה קלה לתכנות.
בכל שפות הפיתוח גישה זו משולבת במידה מסוימת, גם בשפות עיליות טהורות כמו ++C, פסקל ו-Java משולבות באופן כלשהו גישה של תכנות חזותי.
תחום נוסף שבו משולב תכנות חזותי הוא תחום עיבוד המידע ובסיסי הנתונים, שם אפשר באמצעות מסך GQBE לחולל את הקוד של שפת ה-SQL באמצעות גרירת שדות וטבלאות, ואף לשלב בין כתיבה ידנית טקסטואלית לבין כתיבה חזותית.
בשיטה זו של כתיבה חזותית ישנו חיסכון בהקלדה מיותרת ומניעת שגיאות כתיב.
אין צורך לנחש את הפקודות או השיטות השונות, דבר זה יכול להקל על המתכנת המתחיל, אבל הוא גם טוב למתכנת עתיר ניסיון, שאיננו רוצה לכתוב מחדש את הפקודות ולהסתכן בתחביר לקוי.
חברות החלוצות בשיטה זו היו חברת בורלנד עם מחולל היישומים פרדוקס וחברת התוכנה הישראלית מג'יק, שהוציאו מוצרים חזותיים עוד בימי מערכת ההפעלה DOS.
כיום בסביבות פיתוח חדשניות משלבים גם בכתיבת טקסטואלית תכנות חזותי באופנים שונים, כמו הופעת רשימת פקודות או רשימת פרמטרים, כאשר כותבים פקודה מסוימת לשם הקלה על הכתיבה או הוספת כפתורים המחוללים קוד.
גם בתיבת העריכה של ויקיפדיה אפשר לראות בהוספת כפתורים המחוללים פקודות פנימיות בסוג של תכנות חזותי.
לצד הביקורת על התכנות החזותי שהוא מראש מגביל את המתכנת ומצמצם את דמיונו ואת יכולתו ויוצר מתכנתים שאינן מכירים את הקוד הבסיסי, ישנה הערכה רבה לסוג זה של תכנות, במיוחד כאשר הוא איננו מגביל את האפשרות של התכנות הטקסטואלי, אלא עומד לצידו ומשלים אותו.
שפות הידועות בשימוש בתכנות חזותי הן VB המייצרת קוד בשפת בייסיק, דלפי היוצרת קוד בשפת פסקל ומחולל היישומים אקסס המאפשר ליצור יישום בסיס נתונים שלם, בלי כתיבת שורת קוד.
לאחר מהפכת הדוט נט, נוספו שפות כמו VB.NET ו-C# לתכנות החזותי.
ובהן חוזק והועמק התכנות החזותי בהיבטים נוספים.
Visual Basic אינה נחשבת לשפת תכנות חזותית גרידא, כיוון שהתכנות עצמו נעשה על ידי טקסט.
ה-IDE שלה כולל עיצוב חזותי ונח על ידי גרירה ושחרור אלמנטים הניתנים לתכנות בצד הטקסטואלי "מאחורי הקלעים".
השפה app inventor לפיתוח יישומי מובייל, משלבת הן IDE ויזואלי, היינו גרירת אלמנטים (כמו VB), והן פקודות ויזואליות (כמו סקראצ').
תכנון תבוני או עיצוב תבוני הם טיעונים שנועדו להראות כי יצורים חיים נוצרו פחות או יותר בצורתם הנוכחית על ידי "מתכנן תבוני".
פילוסופית לפיה מוצא החיים ותהליך האבולוציה של החיים הם מתוכננים ואינם אקראיים.
על פי גישה זו מתוך התבוננות על הביולוגיה הקיימת ועל מורכבות היקום המסקנה היא דואליסטית.
תכנון תבוני גובש בשנות ה-90 של המאה ה-20, בעיקר בארצות הברית, כניסיון הפרכה מפורש של תאוריית האבולוציה של צ'ארלס דרווין.
בבסיס רעיון התכנון התבוני נתפסת האבולוציה כתהליך נדיר אשר סיכוייו להצליח ללא התערבות של כוח-עליון לא סבירים.
ההנחה היא כי האבולוציה אכן נכונה אך אינה עונה על השאלה האם קיים מחולל ראשוני (אלוהים) אלא אך ורק מסבירה כיצד התהליך מתהווה (יצור חי A ליצור חי B).
מתנגדי התכנון התבוני רואים בו לא יותר מניסיון להציג בריאתנות במסווה מדעי.
לטענתם, חלק נכבד מהטענות של תומכי התכנון התבוני שגויות, כלומר התופעות הללו ניתנות להסבר על פי התאוריות המדעיות הקיימות, והשאר אינן אלא פערים בידע המדעי, ואינן מעידות על דבר מעבר לכך שהמדע טרם הצליח להסביר את אותן תופעות.
"מסמך הטריז" שנחשף בשנת 1999 גילה תוכנית פעולה מדעית, פוליטית וחברתית שחיבר המכון.
מטרתו היא לשנות את התרבות האמריקאית על ידי עיצוב מדיניות ציבורית כך שתשקף ערכים פרוטסטנטיים, שמרניים (פוליטיים), פונדמנטליסטיים, אוונגליסטים.
תומכי התכנון התבוני, שפותח על ידי מכון דיסקברי, דורשים להכיר בה כתאוריה מדעית וללמדה בשיעורי מדעים בבתי הספר הציבוריים בארצות הברית, במקביל ללימודי האבולוציה.
דרישה זאת הציתה מחלוקת ציבורית מתמשכת בארצות הברית וברחבי העולם.
המתנגדים רואים בדרישה הזאת ניסיון ללמד בריאתנות, אשר בית המשפט העליון של ארצות הברית פסק שאסור ללמדה בבתי ספר של המדינה, בגלל דרישת החוקה להפרדת דת ומדינה.
כך, בעוד חלק מאנשי התכנון התבוני תומכים בדעה שהעולם צעיר יחסית, אחרים תומכים בדעה שהיקום והחיים על פני כדור הארץ התפתחו במשך מיליארדי שנים.
עם זאת, לדעת תומכי התכנון התבוני, אין די במוטציות האקראיות ובברירה הטבעית, אותם הם מכנים "דרוויניזם", בשביל להסביר את האבולוציה של כל צורות החיים.
טיעונים של תומכי התכנון התבוני
הסתברות נמוכה לקיום אבולוציה אקראית
לטענת תומכי התכנון התבוני, המעבר בין הכימיה לחיים מצריך מספר עצום של תנאים, עד שהוא משול לסיכוייו של אדם אחד לזכות בפיס אלפי פעמים ברציפות.
האסטרונומים פרד הויל וצ'נדרה ויקראמסינג העריכו את ההסתברות ליצירת חיים, ולפי מסקנתם (המכונה בפי מתנגדיה בשם "הטעות של הויל"), מדובר באחת לעשר בחזקת ארבעים אלף.
לדבריהם, מספר זה "די גדול כדי לקבור את דרווין יחד עם תיאורית האבולוציה".
במקום אחר טוען הויל, כי הסיכוי להתפתחות חיים מפותחים באופן אקראי דומה לסיכוי שסופת טורנדו שתפגע במחסן גרוטאות תהפוך אותו באופן אקראי למטוס בואינג 747.
הרעיון שמערכות ביולוגיות מסוימות התפתחו בתהליך אבולוציוני רגיל דורש קיום של דור קודם בעל יכולת תפקודית המותאמת פחות מהדור שבא אחריו.
על-פי תומכי גישת התכנון התבוני, מערכות מסוימות, מכילות רמת מורכבות גבוהה מאוד, בעלות אופטימיזציה (השגת הפתרון המיטבי לבעיה) גבוהה, כך שכל גריעת חלק קטנטן מהמערכת תחסל את התפקודיות שלה, דבר שלכאורה ימנע קיום של דור קודם הדומה לדור הקיים.
התנאי להימצאות פונקציונליות מינימלית של המכניזם הביולוגי הראשוני הוא, לטענתם, מורכב מכדי להיווצר אבולוציונית, ולכן נראה לכאורה שאין מסלול מתון מספיק במעלה של האי סבירות ההדרגתית.
מערכת החיסון- הביולוג מייקל בהה טען לדוגמה כי מערכת החיסון היא דוגמה ל"מורכבות שאינה ניתנת לצמצום".
הטיעון מושמע בידי בריתנים ותומכי תכנון תבוני לגבי מערכות שונות כמו עיניים, עצי סקוויה, שלד מורכב של ספוגים, מערכת החיסון ועוד.
הטיעון הוא כי לא ייתכן כי מערכות אלה הופיעו בצורה מקרית.
מדענים תומכי אבולוציה מסכימים כי הופעה מקרית היא דבר לא סביר, ומסבירים זאת באמצעות מנגנון הצטברות לא מקרי הנובע מברירה טבעית שבה שינויים שונים מצטברים ומעניקים יתרון גם למבנים שנראה לכאורה שאין בהם תועלת כגון "עין לא מתפקדת".
לאחר שדוגמאות רבות כאלה הוצאו, בריאתנים פנו לעוד ועוד תחומים ומערכות בחיפוש אחר פערים שקיימים עדיין בידע המדעי.
כאשר כל פער כזה משמש מחדש לטעון מחדש את הטיעון הבסיסי, לפיו אם המדע אינו יודע כרגע את התשובה איך התפתח מנגנון מורכב מסוים, התשובה היא בהכרח תכנון תבוני.
בפסק הדין של משפט הפנדה של דובר כתב השופט ג'ונסון כי "פרופסור בהה נשאל בקשר להצהרתו משנת 1996 כי המדע לעולם לא ימצא הסבר אבולצוני למערכת החיסון.
למרות זאת הוא פשוט המשיך לעמוד על דעתו כי אין בכל אלה ראיות מספקות וכי
הדברים פשוט "לא די טובים" בחקירה הנגדית על ידי אריק רוטשילד, נציג התיבה במשפט נאלץ בהה להודות כי לא קרא את רוב המאמרים הללו.
בטבע קיימת מורכבות וחכמה רבה שלדעת תומכי התכנון התבוני קשה להסבירה.
הטיעון של התכנון התבוני הוא שהאבולוציה עובדת רק באופן אקראי אצל יצורים לא מפותחים, ולכן קשה להסביר באמצעות דבר זה התפתחות מבנים או התנהגות מתוחכמת .
המבנה הגאומטרי של כוורת דבורים בצורת תאים משושים, שהוא המבנה האופטימלי ביותר שיכול להיות מבחינת ניצול וחוזק, מבלי שהדבורים היו בשיעור גאומטריה אחד.
הטיעון נשען על הנחה, נפוצה למדי בקרב מתנגדי אבולוציה, לפיה בגלל המקריות שקיימת בתהליך האבולוציה, היא כל כולה תהליך מקרי לגמרי.
טיעון זה נפוץ גם בהקשרים אחרים כמו תיאור בניית מטוס 747 באמצעות רוח שעוברת על פני גל גרוטאות.
טיעון זה שגוי שכן אבולוציה גם מערבת היבטים לא מקריים - של ברירה טבעית שבו פרטים שמותאמים יותר לסביבה הם בעלי סיכוי גבוה יותר לשרוד ולהתרבות.
בספר "השען העיוור" ממחיש ריצ'רד דוקינס את ההבדל בין שני הדברים באמצעות מספר דוגמאות.
לדוגמה אם קוף מקליד בצורה מקרית לגמרי הסיכוי שהוא יצליח להקליד אפילו משפט קצר כמו "נדמה לי שהוא כמו סמוּר" (מתוך מחזה של שייקספיר) נמוך מאד.
הזמן הסביר להופעת המשפט הזה - כלומר לקבל מבנה מסודר בצורה מקרית, הוא מאות מילארדי שנים.
דבר זה נשאר נכון גם אם משתמשים באלפי מחשבים שמקלידים בקצב מהיר מאד.
לעומת זאת אם משלבים בתהליך המקרי (הקלדת הקוף) גם תהליך לא מקרי כמו נעילה של אות שהיא נכונה, המשפט הנכון יופיע בממוצע תוך מספר דקות.
על פי ריצ'רד דוקינס וג'רי קווין מדובר ברעיון דתי שאינו מגובה בשום ממצא:
דוקינס טען כי תומכי התכנון התבוני הם ממשיכי דרכו של אוגוסטינוס שהתנגד לסקרנות ולמדע.
רובה של הקהילה המדעית דוחה את מסקנותיהם של הויל ושל ויקראמסינג באשר להסתברות ליצירת חיים.
טענת הנגד היא שתהליך הסקת המסקנות כולל טעויות לוגיות והשמטות רבות, ובעיקר התייחסותם לתאורית האבולוציה בדרך של ברירה טבעית, כאילו היא כוללת הנחה שהתהליך אקראי לגמרי.
על פי התאוריה, המקובלת על רוב גדול של המדענים, אמנם בשלב הראשון נוצרות מוטציות אקראיות, אך עליהן פועל תהליך הבירור, שהוא תהליך מכוון ולא אקראי.
טעות נוספת היא ההנחה שיצירת החיים הספונטנית חייבת להתרחש בבת אחת, כלומר ההנחה שהחיים שנוצרו בצורה ספונטנית חייבים להיות מורכבים כמו החיים כפי שאנו מכירים אותם היום (ולא פרימיטיביים ופשוטים יותר).
כן נטען, שההסתברות הנמוכה להופעת מקרה יחיד של חיים מורכבים בצורה ספונטנית, מוכרעת על ידי המספר הגדול של ניסיונות המתרחשים בו זמנית בכל שטחו העצום של היקום, ובמשך כל מיליארדי שנות קיומו.
הנחת היסוד בבסיס הטיעון היא שסיבוכיות מוחלטת מרמזת על תכנון.
מתנגדי התכנון התבוני טוענים שישנן דוגמאות המפריכות את הטענה, לדוגמה: גל אבנים המכיל כמה עשרות סלעים, כל סלע שונה במסתו ובצורתו מהאחרים, ובינות לאבנים ישנה אחת אשר היא תיבה ישרה מושלמת.
לכאורה האבן ה"מסותתת" מרמזת על תכנון (כלומר, אדם שסיתת אותה), אך למעשה היא צורה פשוטה בהרבה מהסיבוכיות של יתר האבנים על צורותיהן השונות.
קיימים בטבע מקרים רבים, של מנגנונים שהתפתחו מתוך מנגנונים אחרים, שהיו קיימים כאשר שירתו צורך, שהפסיק להתקיים או שחשיבותו ירדה.
צורת התפתחות זו נקראת "אבולוציה במסלול לא ישיר".
עצמות השמע שבלב אוזני היונקים, שהתפתחו מזימים (שליונקים אין צורך בהם כיום)
גלי הקול של דולפינים המשמשים לתקשורת, שהתפתחו לשמש כסונאר לאיכון מטרות ולתעתע בלהקות דגים
כנפי הפינגווינים, ששימשו לתעופה בשלב אבולוציוני מוקדם, וכיום משמשות להגנה מפני הקור ולשחייה (עקב נדידת יבשת אנטארקטיקה).
אם מניחים שלשוטון החיידק הייתה מטרה קדומה שאינה שחייה, הטיעון בדבר התפתחותה ההדרגתית למטרה זו נפסל.