Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
< <<Ø’ËÖ]<Í]‚â_
< <Jhç‰^£]<Ýç×ÃÖ<íé‰^‰ù]<Üéâ^˹]<h^Ãéj‰] Υ
< <Jí¥Ö]<l^Ç×Ö<íË×j~¹]<Å]çÞù]<ÄÚ<ÌÖbjÖ] Υ
< <<JC++<íÇ×e<^Ú<sÚ^ÞÖ<íéqƒç´<†èçŞi<íòée<ÜãÊ Υ
< <<JC++<íÇ×e<¼éŠe<sÚ^Þ†e<íe^jÒ<î×Â<ì…‚ÏÖ]<h^ŠjÒ] Υ
< <JíŞéŠfÖ]<t†}<KØ}‚Ö]<l^Ûé×Ãi<Ý]‚~j‰]<î×Â<ì…‚ÏÖ]<h^ŠjÒ] Υ
< <Jl^éŞÃÛ×Ö<íé‰^‰ù]<Å]çÞù]<ÄÚ<ÌÖbjÖ] Υ
< <<Jíée^Š£]<l^é×ÛÃÖ]<Ý]‚~j‰]<î×Â<ì…‚ÏÖ]<h^ŠjÒ] Υ
< <Jíée^Š£]<l^é×ÛÃÖ]<°e<íèçÖæù]<ÝçãËÚ<h^Ãéj‰] Υ
< <<JíŞéŠfÖ]<…]†ÏÖ]<ƒ^¡]<l^Ûé×Ãi<íe^jÒ<î×Â<ì…‚ÏÖ]<h^ŠjÒ] Υ
اﻟﻔﺼﻞ اﻷول ٢٠
ﻣﻘﺪﻣﺔ
1-1
ﻼ ﺑﻜﻢ ﰲ ﻋﺎﱂ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ...!! C++ﻟﻘﺪ ﻋﻤﻠﻨﺎ ﲜﺪ ﺣﱴ ﻧﻀﻊ ﺑﲔ ﻳﺪﻱ ﺍﻟﻘﺎﺭﺉ ﻛﺘﺎﺑﹰﺎ ﻧﺄﻣﻞ ﺃﻥ ﺃﻫ ﹰ
ﻳﻜﻮﻥ ﻣُﺜﻘﻔﹰﺎ ﻭﳑﺘﻌﹰﺎ ﻭﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﺘﺤﺪﻱ ﳋﻮﺽ ﲡﺮﺑﺔ ﺍﻟﺘﻌﻠﻴﻢ .ﺗﻌﺪ ﻟﻐﺔ C++ﻟﻐﺔ ﺻﻌﺒﺔ ﻭﻳﺘﻢ
ﺗﻌﻠﻴﻤﻬﺎ ﻋﺎﺩ ﹰﺓ ﻟﻠﻤﱪﳎﲔ ﺫﻭﻱ ﺍﳋﱪﺓ .ﻟﺬﻟﻚ ﳝﻜﻦ ﺍﻋﺘﺒﺎﺭ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻣﺘﻤﻴﺰﹰﺍ ﻣﻘﺎﺭﻧﺔ ﺑﺎﻟﻜﺘﺐ ﺍﻷﺧﺮﻯ
ﺍﳋﺎﺻﺔ ﺑﻠﻐﺔ C++ﻭﺫﻟﻚ ﻟﻸﺳﺒﺎﺏ ﺍﻟﺘﺎﻟﻴﺔ:
ﻼ ﺧﱪﺓ ﺿﻌﻴﻔﺔ ﺃﻭ ﻟﻴﺲ ﻟﺪﻳﻬﻢ ﺃﻳﺔ .1ﺃﻧﻪ ﻣﻼﺋﻢ ﻻﻛﺴﺎﺏ ﺗﻘﻨﻴﺎﺕ ﺑﺮﳎﻴﺔ ﻷﻭﻟﺌﻚ ﺍﻟﺬﻳﻦ ﳝﺘﻠﻜﻮﻥ ﺃﺻ ﹰ
ﲡﺮﺑﺔ ﰲ ﳎﺎﻝ ﺍﻟﱪﳎﺔ.
.2ﺃﻧﻪ ﻣﻼﺋﻢ ﻟﻠﻤﱪﳎﲔ ﺍﳌﺘﻤﺮﺳﲔ ﻭﺍﻟﺬﻳﻦ ﻳﺒﺤﺜﻮﻥ ﻋﻦ ﺗﻌﻤﻴﻖ ﺗﻌﺎﻣﻠﻬﻢ ﻣﻊ ﻟﻐﺔ .C++
ﻛﻴﻒ ﳝﻜﻦ ﳍﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺃﻥ ﻳﺮﻭﻕ ﻟﻜﻼ ﺍﺠﻤﻟﻤﻮﻋﺘﲔ؟ ﳝﻜﻦ ﺍﻹﺟﺎﺑﺔ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺴﺆﺍﻝ ﺑﺎﻟﻘﻮﻝ ﺃﻥ
ﺍﻟﻠﺐ ﺍﻷﺳﺎﺳﻲ ﻟﻠﻜﺘﺎﺏ ﻳُﻌﲎ ﺑﺈﳒﺎﺯ ﻭﺗﻄﻮﻳﺮ ﺑﺮﺍﻣﺞ ﻭﺍﺿﺤﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﺎﻟﻴﺐ ﻭﺍﻟﺘﻘﻨﻴﺎﺕ
ﺍﳌﱪﻫﻦ ﻋﻨﻬﺎ ﰲ ﺍﻟﱪﳎﺔ ﺍﳌﹸﻬﻴﻜﻠﺔ Structured Programmingﻭﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﻪ ﺍﻟﺘﻮﺟﻪ
Object Oriented Programmingﳑﺎ ﻳﺸﻜﻞ ﻓﺎﺋﺪﺓ ﻛﺒﲑﺓ ﻟﻜﻼ ﺍﻟﻄﺮﻓﲔ .ﻟﻜﻦ ﳚﺐ ﺍﻻﻧﺘﺒﺎﻩ ﺇﱃ ﺃﻥ
ﻏﲑ ﺍﳌﱪﳎﲔ ﺳﻮﻑ ﻳﻘﻮﻣﻮﻥ ﺑﺘﻌﻠﻢ ﺍﻟﱪﳎﺔ ﺑﺎﻷﺳﻠﻮﺏ ﺍﻟﺼﺤﻴﺢ ﺍﻧﻄﻼﻗﺎ ﻣﻦ ﻧﻘﻄﺔ ﺍﻟﺼﻔﺮ .ﻟﻘﺪ ﺣﺎﻭﻟﻨﺎ
ﺗﺄﻟﻴﻒ ﺍﻟﻜﺘﺎﺏ ﺑﺄﺳﻠﻮﺏ ﻭﺍﺿﺢ ﻭﻣﺒﺎﺷﺮ ﻭﻏﲏ ﺑﺎﻷﻣﺜﻠﺔ ﺍﻟﺘﻮﺿﻴﺤﻴﺔ .ﻓﻬﻮ ﳛﺘﻮﻱ ﻋﻠﻰ ﻛﻤﻴﺔ ﻭﻓﲑﺓ ﻣﻦ
ﻧﺼﻮﺹ ﺍﻟﱪﺍﻣﺞ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ C++ﻣﻊ ﺗﻮﺿﻴﺢ ﺧﺮﺟﻬﺎ ﻟﺪﻯ ﺗﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ ﺍﳊﺎﺳﺐ.
ﻧﺴﻤﻲ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ "ﻃﺮﻳﻘﺔ ﺍﻟﻌﺮﺽ ﺍﳌﺒﺎﺷﺮﺓ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﺼﻮﺹ ﺍﻟﱪﺍﻣﺞ" ) .(Line- Code approachﺗﺘﻮﻓﺮ
ﲨﻴﻊ ﻫﺬﻩ ﺍﻷﻣﺜﻠﺔ ﺍﻟﱪﳎﻴﺔ ﺿﻤﻦ ﺍﻟﻌﺮﺽ ﺍﳌﻀﻐﻮﻁ CD- ROMﺍﳌﺼﺎﺣﺐ ﳍﺬﺍ ﺍﻟﻜﺘﺎﺏ.
ﺗﻌﺮﺽ ﺍﻟﻔﺼﻮﻝ ﺍﳋﻤﺴﺔ ﺍﻷﻭﱃ ﻣﻦ ﺍﻟﻜﺘﺎﺏ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻷﺳﺎﺳﻴﺎﺕ ﺣﻮﻝ ﺍﳊﺎﺳﺐ ﻭﺑﺮﳎﺘﻬﺎ ﻭﺣﻮﻝ
ﻟﻐﺔ ﺍﻟﱪﳎﺔ .C++ﻟﻘﺪ ﻭﺟﺪ ﺍﳌﺒﺘﺪﺋﻮﻥ ﺍﻟﺬﻳﻦ ﺗﺎﺑﻌﻮﺍ ﺩﺭﻭﺳﻨﺎ ﺍﳌﺮﺳﻮﻣﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﻜﺘﺎﺏ ﺃﻥ ﺍﻷﻓﻜﺎﺭ
ﺍﳌﻌﺮﻭﺿﺔ ﰲ ﺍﻟﻔﺼﻮﻝ ﺍﳋﻤﺴﺔ ﺍﻷﻭﱃ ﺗﺸﻜﻞ ﻗﺎﻋﺪﺓ ﺻﻠﺒﺔ ﻣﻦ ﺃﺟﻞ ﺍﻟﺘﻌﺎﻣﻞ ﺍﻟﻌﻤﻴﻖ ﻣﻊ ﻟﻐﺔ C++ﺍﻟﺬﻱ
ﺗﻘﻮﻡ ﺑﻪ ﺍﻟﻔﺼﻮﻝ ﻣﻦ ﺍﻷﺧﺮﻯ .ﺃﺿﻒ ﺇﱃ ﺫﻟﻚ ﺃﻥ ﺍﳌﺘﻤﺮﺳﲔ ﰲ ﺍﻟﱪﳎﺔ ﺍﻟﺬﻳﻦ ﻗﺎﻣﻮﺍ ﺑﻘﺮﺍﺀﺓ ﺳﺮﻳﻌﺔ
ﻟﻠﻔﺼﻮﻝ ﺍﳋﻤﺴﺔ ﺍﻷﻭﱃ ﻭﺟﺪﻭﺍ ﺃﻥ ﺍﳌﻌﺎﳉﺔ ﻟﻠﻤﻮﺍﺿﻴﻊ ﺍﳌﺘﻌﻠﻘﺔ ﺑـ C++ﺍﳌﻌﺮﻭﺿﺔ ﰲ ﺍﻟﻔﺼﻮﻝ ﻣﻦ
ﺍﻷﺧﺮﻯ ﺗﺘﻤﻴﺰ ﺑﻜﻮﻬﻧﺎ ﺩﻗﻴﻘﺔ ﻭﺗﺘﺴﻢ ﺑﺎﻟﺘﺤﺪﻱ.
ﺍﻟﻜﺜﲑ ﻣﻦ ﺍﻟﻨﺎﺱ ﻫﻢ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﺎﻷﺷﻴﺎﺀ ﺍﳌﺜﲑﺓ ﺍﻟﱵ ﺗﻘﻮﻡ ﻬﺑﺎ ﺍﳊﻮﺍﺳﺐ ،ﻭﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺳﻮﻑ
ﺗﻘﻮﻡ ﺑﺘﻌﻠﻢ ﻛﻴﻒ ﺗﻄﻠﺐ ﻣﻦ ﺍﳊﺎﺳﺐ ﺍﻟﻘﻴﺎﻡ ﲟﺜﻞ ﻫﺬﻩ ﺍﻷﺷﻴﺎﺀ .ﻳﺘﻢ ﺍﻟﺘﺤﻜﻢ ﺑﺎﳊﻮﺍﺳﺐ )ﺍﻟﺒﻨﻴﺔ ﺍﻟﺼﻠﺒﺔ
(Hardwareﺑﻮﺍﺳﻄﺔ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟﱪﳎﻴﺎﺕ ﺍﻟﱵ ﺗﺸﻜﻞ ﺍﻟﺒﻨﻴﺔ ﺍﳌﺮﻧﺔ ) (softwareﻟﻪ )ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﳎﻤﻮﻋﺔ
ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﱵ ﻧﻜﺘﺒﻬﺎ ﻟﻠﻄﻠﺐ ﻣﻦ ﺍﳊﺎﺳﺐ ﺍﻟﻘﻴﺎﻡ ﺑﺄﻓﻌﺎﻝ ﻣﻌﻴﻨﺔ ﺃﻭ ﺑﺎﲣﺎﺫ ﻗﺮﺍﺭﺍﺕ ﻣﺎ( ،ﻭﺗﻌﺪ ﻟﻐﺔ C++
ﺣﺎﻟﻴﹰﺎ ﻣﻦ ﺃﻛﺜﺮ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﺷﻌﺒﻴﺔ ﻭﺍﻧﺘﺸﺎﺭﹰﺍ ﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻴﺎﺕ .ﻳﻌﺮﺽ ﻛﺘﺎﺑﻨﺎ ﻫﺬﺍ ﻣﻘﺪﻣﺔ ﻟﻠﱪﳎﺔ ﺑﻠﻐﺔ
C++ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﺴﺨﺔ versionﻋﻨﻬﺎ ﺧﺎﺿﻌﺔ ﻟﻠﻤﻌﺎﻳﲑ ﺍﳌﺘﺒﻌﺔ ﰲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﳌﺘﺤﺪﺓ ﻭﺍﻟﱵ ﺃﻗﺮﻫﺎ ﺍﳌﻌﻬﺪ
،(ANSI) American National Standards Instituteﻭﰲ ﺑﻘﻴﺔ ﺑﻠﺪﺍﻥ ﺍﻟﻌﺎﱂ ﻧﺘﻴﺠﺔ ﳉﻬﻮﺩ ﺍﳌﻨﻈﻤﺔ ﺍﻟﻌﺎﳌﻴﺔ
ﻟﻠﻤﻌﺎﻳﺮﺓ (ISO) International Standards Organisationﺍﳌﺘﻌﻠﻘﺔ ﻬﺑﺬﺍ ﺍﻟﺼﺪﺩ.
٢١ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﻳﺘﺰﺍﻳﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﳊﻮﺍﺳﺐ ﺗﻘﺮﻳﺒﹰﺎ ﰲ ﻣﻌﻈﻢ ﺍﺠﻤﻟﺎﻻﺕ ،ﻓﻔﻲ ﻋﺼﺮﻧﺎ "ﻋﺼﺮ ﺗﺰﺍﻳﺪ ﺍﻟﺘﻜﺎﻟﻴﻒ" ،ﺗﻨﺎﻗﺼﺖ
ﺍﻟﻜﻠﻔﺔ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﱪﳎﻴﺎﺕ ﻭﺗﻄﻮﻳﺮﻫﺎ ﺇﱃ ﺩﺭﺟﺔ ﻛﺒﲑﺓ ﻭﺫﻟﻚ ﺑﺴﺒﺐ ﺍﻟﺘﻄﻮﺭ ﺍﻟﺴﺮﻳﻊ ﺍﻟﺬﻱ
ﺃﺻﺎﺏ ﺗﻘﻨﻴﺎﺕ ﺍﻟﺒﲎ ﺍﻟﺼﻠﺒﺔ ﻭﺍﳌﺮﻧﺔ .ﻛﺎﻧﺖ ﺍﳊﻮﺍﺳﺐ ﻣﻨﺬ 25ﻋﺎﻣﹰﺎ ﻣﺎﺿﻴﺔ ﺗﺸﻐﻞ ﻋﺪﺓ ﻏﺮﻑ ﻭﺗﻜﻠﻒ
ﻋﺪﺓ ﻣﻼﻳﲔ ﻣﻦ ﺍﻟﺪﻭﻻﺭﺍﺕ ﺃﻣﺎ ﺍﻵﻥ ﻓﻴﻤﻜﻦ ﺍﺧﺘﺰﺍﳍﺎ ﻋﻠﻰ ﺳﻄﻮﺡ ﺩﺍﺭﺍﺕ ﻣﻦ ﺍﻟﺴﻴﻠﻴﻜﻮﻥ ﺃﺻﻐﺮ ﻣﻦ
ﺃﻇﺎﻓﺮ ﺍﻷﺻﺎﺑﻊ ﻭﺑﻜﻠﻔﺔ ﻻ ﺗﺘﺠﺎﻭﺯ ﻋﺪﺓ ﺩﻭﻻﺭﺍﺕ ﻟﻠﺪﺍﺭﺓ ﺍﻟﻮﺍﺣﺪﺓ .ﻭﳑﺎ ﻳﺪﻓﻊ ﻟﻠﺴﺨﺮﻳﺔ ،ﺃﻥ ﻣﺎﺩﺓ
ﺍﻟﺴﻴﻠﻴﻜﻮﻥ ﻫﻲ ﻣﻦ ﺃﻛﺜﺮ ﺍﳌﻮﺍﺩ ﺗﻮﻓﺮﹰﺍ ﻋﻠﻰ ﺳﻄﺢ ﺍﻷﺭﺽ ﻟﻜﻮﻧﻪ ﺃﺣﺪ ﺍﳌﻘﺎﺩﻳﺮ ﺍﻟﺪﺍﺧﻠﺔ ﰲ ﺗﺮﻛﻴﺐ
ﺍﻟﺮﻣﺎﻝ .ﻟﻘﺪ ﺃﺿﺤﺖ ﺍﳊﻮﺍﺳﺐ ﺑﻔﻀﻞ ﺍﻟﺪﺍﺭﺍﺕ ﺍﳌﺼﻨﻮﻋﺔ ﻣﻦ ﺍﻟﺴﻴﻠﻴﻜﻮﻥ ﺍﻗﺘﺼﺎﺩﻳﺔ ﺟﺪﹰﺍ ﻟﺪﺭﺟﺔ ﺃﻧﻪ
ﻳﻮﺟﺪ ﰲ ﺍﻟﻌﺎﱂ ﺣﻮﺍﱄ 200ﻣﻠﻴﻮﻥ ﺣﺎﺳﺐ ﻣﻦ ﳐﺘﻠﻒ ﺍﻷﻧﻮﺍﻉ .ﺗﺴﺎﻋﺪ ﻫﺬﻩ ﺍﳊﻮﺍﺳﺐ ﺍﻟﻨﺎﺱ ﰲ
ﳎﺎﻻﺕ ﺇﺩﺍﺭﺓ ﺍﻷﻋﻤﺎﻝ ،ﺍﻟﺼﻨﺎﻋﺔ ،ﺍﳊﻜﻢ ﻭﰲ ﺷﺆﻭﻥ ﺣﻴﺎﻬﺗﻢ ﺍﻟﺸﺨﺼﻴﺔ .ﳝﻜﻦ ﻟﻠﺮﻗﻢ ﺍﻟﺴﺎﺑﻖ ﺃﻥ
ﻳﺘﻀﺎﻋﻒ ﺑﺴﻬﻮﻟﺔ ﺧﻼﻝ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻟﻘﺎﺩﻣﺔ.
ﺭﲟﺎ ﻗﺎﻡ ﺃﻗﺮﺍﻧﻚ ﺧﻼﻝ ﺍﻷﻋﻮﺍﻡ ﺍﳌﺎﺿﻴﺔ ﺑﺘﻌﻠﻢ ﻣﻨﻬﺠﻴﺔ ﺍﻟﱪﳎﺔ ﺑﺄﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﺍﳌﻬﻴﻜﻠﺔ ،ﺃﻣﺎ ﺃﻧﺖ
ﻓﺴﻮﻑ ﺗﺘﻌﻠﻢ ﺃﺳﻠﻮﺏ "ﺍﻟﱪﳎﺔ ﺍﳌﹸﻬﻴﻜﻠﺔ" ﻭﺃﺳﻠﻮﺏ "ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ" .ﳌﺎﺫﺍ ﻧﻘﻮﻡ ﺑﺘﺪﺭﻳﺲ
ﺍﻷﺳﻠﻮﺑﲔ؟ ﺫﻟﻚ ﻷﻧﻨﺎ ﻧﺘﻮﻗﻊ ﺃﻥ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺃﺻﺒﺢ ﻣﻔﺘﺎﺣﹰﺎ ﻟﺘﻘﻨﻴﺔ ﺍﻟﱪﳎﺔ ﺍﻋﺘﺒﺎﺭﺍ ﻣﻦ
ﺍﻟﻨﺼﻒ ﺍﻟﺜﺎﱐ ﻟﻠﺘﺴﻌﻴﻨﺎﺕ .ﻟﺬﻟﻚ ﺳﻮﻑ ﺗﻘﻮﻡ ﺑﺒﻨﺎﺀ ﻭﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻷﻏﺮﺍﺽ ﻣﻦ ﺧﻼﻝ
ﺍﻟﻜﺘﺎﺏ ﻭﻟﻜﻨﻚ ﺳﻮﻑ ﺗﻜﺘﺸﻒ ﺃﻥ ﺍﻟﺒﻨﻴﺔ ﺍﻟﺪﺍﺧﻠﻴﺔ ﻟﻠﺒﻌﺾ ﻣﻨﻬﺎ ﳝﻜﻦ ﺇﳒﺎﺯﻩ ﺑﺸﻜﻞ ﺃﻓﻀﻞ ﺑﺎﺳﺘﺨﺪﺍﻡ
ﺃﺳﺎﻟﻴﺐ ﳍﺎ ﻋﻼﻗﺔ ﺑﺎﻟﱪﳎﺔ ﺍﳌﹸﻬﻴﻜﻠﺔ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺫﻟﻚ ﳝﻜﻦ ﺃﻥ ﻧﺬﻛﺮ ﺃﻧﻪ ﳝﻜﻦ ﰲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ
ﺍﻟﺘﻌﺒﲑ ﻋﻦ ﻣﻨﻄﻖ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻷﻏﺮﺍﺽ ﺑﺴﻬﻮﻟﺔ ﺃﻛﱪ ﻣﻦ ﺧﻼﻝ ﺍﻟﱪﳎﺔ ﺍ ﹸﳌﻬﻴﻜﻠﺔ.
ﻳﻮﺟﺪ ﺃﻳﻀﹰﺎ ﺳﺒﺐ ﺁﺧﺮ ﻳﺪﻓﻌﻨﺎ ﺇﱃ ﻋﺮﺽ ﻃﺮﻳﻘﱵ ﺍﻟﱪﳎﺔ ﺍﳌﺬﻛﻮﺭﺗﲔ .ﲡﺮﻱ ﺣﺎﻟﻴﹰﺎ ﻋﻤﻠﻴﺔ ﻧﻘﻞ ﺷﺎﻣﻞ
ﻟﻸﻧﻈﻤﺔ ﺍﻟﱵ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻟﻐﺔ Cﺇﱃ ﺗﻠﻚ ﺍﻟﱵ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻟﻐﺔ C++ﺣﻴﺚ ﻳﻮﺟﺪ ﻟﺪﻳﻨﺎ ﺣﺎﻟﻴﹰﺎ ﻣﲑﺍﺙ
ﺿﺨﻢ ﻣﻦ ﺍﻟﱪﺍﻣﺞ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ Cﻭﺍﻟﱵ ﻫﻲ ﻗﻴﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻣﻨﺬ ﺣﻮﺍﱄ ﺭﺑﻊ ﻗﺮﻥ ﻭﻳﺘﺰﺍﻳﺪ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﰲ
ﺍﻟﻮﻗﺖ ﺍﻟﺮﺍﻫﻦ ﺑﺸﻜﻞ ﻣﻠﻔﺖ ﻟﻠﻨﻈﺮ .ﻋﻨﺪﻣﺎ ﻳﺘﻌﻠﻢ ﺍﻟﻨﺎﺱ ﻟﻐﺔ C++ﻳﻼﺣﻈﻮﻥ ﻣﺒﺎﺷﺮﺓ ﻣﻦ ﺧﻼﻝ ﻣﻴﺰﺍﻬﺗﺎ
ﺃﻬﻧﺎ ﺃﻛﺜﺮ ﻗﻮﺓ ﻣﻦ ﻟﻐﺔ ،Cﻭﳜﺘﺎﺭﻭﻥ ﺑﺎﻟﺘﺎﱄ ﺍﻻﻧﺘﻘﺎﻝ ﺇﱃ ﻟﻐﺔ .C++ﻭﻳﺒﺪﺅﻭﻥ ﺑﻌﺪﻫﺎ ﰲ ﻋﻤﻠﻴﺔ ﲢﻮﻳﻞ
ﺃﻧﻈﻤﺘﻬﻢ ﺍﳌﻮﺭﻭﺛﺔ ﻭﻫﻲ ﻋﻤﻠﻴﺔ ﻏﺎﻟﺒﹰﺎ ﻣﺎ ﺗﻜﻮﻥ ﻣﺒﺎﺷﺮﺓ .ﰒ ﻳﻘﻮﻣﻮﻥ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﳌﻤﻴﺰﺍﺕ ﺍﳌﺨﺘﻠﻔﺔ ﻟﻠﻐﺔ
) C++ﺍﻟﱵ ﺗﺴﻤﻰ ﻏﺎﻟﺒﹰﺎ "ﺑﺎﻟﺘﺤﺴﻴﻨﺎﺕ" ﺍﻟﱵ ﺃﺿﺎﻓﺘﻬﺎ C++ﺇﱃ (Cﻣﻦ ﺃﺟﻞ ﲢﺴﲔ ﺃﺳﻠﻮﻬﺑﻢ ﰲ ﻛﺘﺎﺑﺔ
ﺑﺮﺍﻣﺞ ﺑﻠﻐﺔ ﺷﺒﻴﻬﺔ ﺑﻠﻐﺔ .Cﺑﻌﺪﻫﺎ ﳛﺎﻭﻟﻮﻥ ﺍﺳﺘﺨﺪﺍﻡ ﻗﺪﺭﺍﺕ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺍﳌﺘﻮﻓﺮﺓ ﰲ ﻟﻐﺔ C++
ﻣﻦ ﺃﺟﻞ ﺍﺳﺘﻐﻼﻝ ﺍﻟﻔﻮﺍﺋﺪ ﺍﻟﻌﻈﻴﻤﺔ ﺍﻟﱵ ﺗﺘﻤﻴﺰ ﻬﺑﺎ ﻫﺬﻩ ﺍﻟﻠﻐﺔ.
ﻣﻦ ﺧﻼﻝ ﺍﻟﻔﺼﻮﻝ ﺍﳋﻤﺴﺔ ﺍﻷﻭﱃ ﰲ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺳﻮﻑ ﺗﺘﻌﻠﻢ ﺍﻟﱪﳎﺔ ﺍﳌﻬﻴﻜﻠﺔ ﺑﻠﻐﺔ C++ﻭﺍﳉﺰﺀ
ﺍﳌﺘﻌﻠﻖ ﺑﻠﻐﺔ Cﺍﳌﺘﻀﻤﻦ ﺑﻠﻐﺔ C++ﺑﺎﻹﺿﺎﻓﺔ ﺑﺎﻟﺘﺤﺴﻴﻨﺎﺕ ﺍﳌﺪﺧﻠﺔ ﻣﻦ ﻗﺒﻠﻬﺎ ﻋﻠﻰ ﻟﻐﺔ .Cﰲ ﺣﲔ ﺃﻧﻚ
ﺳﻮﻑ ﺗﺘﻌﻠﻢ ﻣﻊ ﺍﻟﻜﺘﺎﺏ ﻛﻜﻞ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺑﻠﻐﺔ .C++ﻭﻟﻜﻨﻨﺎ ﻻ ﻧﺮﻳﺪﻙ ﺃﻥ ﺗﻨﺘﻈﺮ
ﺣﱴ ﺍﻟﻔﺼﻞ ﺍﻟﺴﺎﺩﺱ ﺣﱴ ﺗﺒﺪﺃ ﺑﺘﺬﻭﻕ ﺍﳌﻔﺎﻫﻴﻢ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺎﻷﻏﺮﺍﺽ .ﻟﺬﻟﻚ ﻓﻜﻞ ﻓﺼﻞ ﻣﻦ ﺍﻟﻔﺼﻮﻝ
ﺍﳋﻤﺴﺔ ﺍﻷﻭﱃ ﻳﻨﺘﻬﻲ ﲟﻘﻄﻊ ﻋﻨﻮﺍﻧﻪ "ﻣﺎﺫﺍ ﻋﻦ ﺍﻷﻏﺮﺍﺽ" .ﺗﻌﺮﺽ ﺍﳌﻘﺎﻃﻊ ﺍﻟﺴﺎﺑﻘﺔ ﺍﳌﻔﺎﻫﻴﻢ ﻭﺍﳌﺼﻄﻠﺤﺎﺕ
اﻟﻔﺼﻞ اﻷول ٢٢
ﻼ ﻟﻠﺒﺪﺀ
ﺍﻷﺳﺎﺳﻴﺔ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺎﻷﻏﺮﺍﺽ .ﻭﻋﻨﺪﻣﺎ ﻧﺼﻞ ﺇﱃ ﺍﻟﻔﺼﻞ ﺍﻟﺴﺎﺩﺱ ،ﻓﺈﻧﻚ ﺳﻮﻑ ﺗﻜﻮﻥ ﻣﺆﻫ ﹰ
ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ C++ﻟﺒﻨﺎﺀ ﺍﻷﻏﺮﺍﺽ ﻭﻟﻜﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ.
ﳛﺘﻮﻱ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ ﻋﻠﻰ ﺃﺭﺑﻌﺔ ﺃﺟﺰﺍﺀ .ﻳﻌﺮﺽ ﺍﻷﻭﻝ ﻣﻨﻬﺎ ﺍﳌﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﺍﳌﺘﻌﻠﻘﺎﺕ ﺑﺎﳊﺎﺳﺒﺎﺕ
ﻭﺑﺄﺳﺎﻟﻴﺐ ﺑﺮﳎﺘﻬﺎ .ﰲ ﺣﲔ ﻳﺄﺧﺬﻙ ﺍﳉﺰﺀ ﺍﻟﺜﺎﱐ ﻟﺘﺒﺪﺃ ﻣﺒﺎﺷﺮﺓ ﺑﻜﺘﺎﺑﺔ ﺑﻌﺾ ﺍﻟﱪﺍﻣﺞ ﺍﻟﺒﺴﻴﻄﺔ ﺑﻠﻐﺔ
.C++ﺃﻣﺎ ﺍﳉﺰﺀ ﺍﻟﺜﺎﻟﺚ ﻓﻴﺘﻨﺎﻭﻝ ﺍﳌﻘﻄﻊ "ﻣﺎﺫﺍ ﻋﻦ ﺍﻷﻏﺮﺍﺽ" .ﺃﻣﺎ ﺍﳉﺰﺀ ﺍﻷﺧﲑ ،ﻓﻴﺄﺧﺬﻙ ﰲ ﺟﻮﻟﺔ
ﺳﺮﻳﻌﺔ ﰲ ﺑﻘﻴﺔ ﻓﺼﻮﻝ ﺍﻟﻜﺘﺎﺏ.
ﺑﻨﻴﺔ اﻟﺤﺎﺳﺐ3-1
ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺍﻟﻔﺮﻭﻗﺎﺕ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺎﳌﻈﻬﺮ ﺍﳋﺎﺭﺟﻲ ،ﳝﻜﻦ ﺗﺼﻮﺭ ﺍﳊﺎﺳﺐ ﻋﻠﻰ ﺃﻧﻪ ﻳﺘﺄﻟﻒ ﺑﺸﻜﻞ
ﻋﺎﻡ ﻣﻦ ﺳﺘﺔ ﻭﺣﺪﺍﺕ ﻣﻨﻄﻘﻴﺔ ،ﻫﻲ:
ﻭﺣﺪﺓ ﺍﻟﺪﺧﻞ ) :(Input Unitﻭﻫﻲ ﺍﳉﺰﺀ "ﺍﳌﹸﺴﺘﻘﺒﻞ" ﻣﻦ ﺍﳊﺎﺳﺐ ﺍﻟﺬﻱ ﳛﺼﻞ ﻋﻠﻰ ﺍﳌﻌﻠﻮﻣﺎﺕ .1
)ﻣﻌﻄﻴﺎﺕ ﻭﺑﺮﺍﻣﺞ( ﻣﻦ ﻋﺪﺓ ﺃﺟﻬﺰﺓ ﺩﺧﻞ ﳐﺘﻠﻔﺔ ﻭﻳﻀﻊ ﻫﺬﻩ ﺍﳌﻌﻠﻮﻣﺎﺕ ﲢﺖ ﺗﺼﺮﻑ ﺍﻟﻮﺣﺪﺍﺕ
ﺍﻷﺧﺮﻯ ﺣﱴ ﺗﺘﻢ ﻣﻌﺎﳉﺘﻬﺎ .ﳝﻜﻦ ﰲ ﻳﻮﻣﻨﺎ ﻫﺬﺍ ﺇﺩﺧﺎﻝ )ﺍﳌﻌﻄﻴﺎﺕ ﺃﻭ( ﺍﳌﻌﻠﻮﻣﺎﺕ ﻋﻦ ﻃﺮﻳﻖ
ﺟﻬﺎﺯﻱ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ) (Keyboardﻭﺍﻟﻔﺄﺭﺓ ) .(Mouseﻭﺭﲟﺎ ﳝﻜﻦ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﰲ ﺍﳌﺴﺘﻘﺒﻞ
ﺑﻮﺍﺳﻄﺔ )ﺍﻟﻜﻼﻡ ﺃﻭ( ﺍﻟﺘﺤﺪﺙ ﻣﻊ ﺍﳊﺎﺳﺐ.
ﻭﺣﺪﺓ ﺍﳋﺮﺝ ) :(Output Unitﻭﻫﻲ ﺟﺰﺀ "ﺍﻟﺸﺤﻦ ﻭﺍﻟﺘﺰﻭﻳﺪ ﺑﺎﳌﻌﻠﻮﻣﺎﺕ" ﺍﻟﱵ ﲤﺖ ﻣﻌﺎﳉﺘﻬﺎ .2
ﺑﻮﺍﺳﻄﺔ ﺍﳊﺎﺳﺐ ﻟﺘﺼﺒﺢ ﻣﺘﺎﺣﺔ ﻟﻸﺳﺘﺨﺪﺍﻡ ﺧﺎﺭﺝ ﺍﳊﺎﺳﺐ .ﻳﺘﻢ ﺑﺸﻜﻞ ﻋﺎﻡ ﺇﺧﺮﺍﺝ ﺍﳌﻌﻠﻮﻣﺎﺕ
ﺧﺎﺭﺝ ﺍﳊﺎﺳﺐ ﻭﺇﻇﻬﺎﺭﻫﺎ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺎﺕ ) (Screensﺃﻭ ﺗﻄﺒﻊ ﻋﻠﻰ ﺍﻟﻮﺭﻕ ﺃﻭ ﺗﺴﺘﺨﺪﻡ ﻟﻠﺘﺤﻜﻢ
ﺑﺄﺟﻬﺰﺓ ﺃﺧﺮﻯ.
ﻭﺣﺪﺓ ﺍﻟﺬﺍﻛﺮﺓ ) :(Memory Unitﻭﻫﻲ ﻭﺣﺪﺓ "ﲣﺰﻳﻦ" ﰲ ﺍﳊﺎﺳﺐ ﺍﻟﱵ ﺗﺘﻤﺘﻊ ﺑﺴﻬﻮﻟﺔ ﺍﻟﻮﺻﻮﻝ .3
ﺇﻟﻴﻬﺎ ﻭﺑﺴﻌﺔ ﻣﻨﺨﻔﻀﺔ ﺃﻭ ﳏﺪﻭﺩﺓ ﻧﺴﺒﻴﹰﺎ .ﲢﺘﻮﻱ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺓ ﻋﻠﻰ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺍﻟﱵ ﰎ ﺇﺩﺧﺎﳍﺎ ﻣﻦ
ﺧﻼﻝ ﻭﺣﺪﺓ ﺍﻟﺪﺧﻞ ﳑﺎ ﳚﻌﻠﻬﺎ ﻣﺘﺎﺣﺔ ﻣﻦ ﺃﺟﻞ ﺍﳌﻌﺎﳉﺔ ﻋﻨﺪ ﺍﳊﺎﺟﺔ ﻟﺬﻟﻚ .ﻛﻤﺎ ﺃﻬﻧﺎ ﳝﻜﻦ ﺃﻥ
ﲣﺰﻥ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺍﻟﱵ ﲤﺖ ﻣﻌﺎﳉﺘﻬﺎ ﺣﱴ ﻧﻘﻮﻡ ﺑﺈﻇﻬﺎﺭﻫﺎ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﳋﺮﺝ ﺑﻮﺍﺳﻄﺔ ﻭﺣﺪﺓ
ﺍﳋﺮﺝ .ﻧﺴﻤﻲ ﻋﺎﺩ ﹰﺓ ﻭﺣﺪﺓ ﺍﳋﺮﺝ ﺑـ "ﺍﻟﺬﺍﻛﺮﺓ" ﺃﻭ ﺑـ"ﺍﻟﺬﺍﻛﺮﺓ ﺍﻷﺳﺎﺳﻴﺔ".
ﻭﺣﺪﺓ ﺍﳊﺴﺎﺏ ﻭﺍﳌﻨﻄﻖ ) :(ALU) (Arithmetic and logic unitﻭﻫﻲ "ﺍﳌﺼﻨﻊ" ﺍﳌﺴﺆﻭﻝ ﻋﻦ ﺍﻟﻘﻴﺎﻡ .4
ﺑﺎﻟﻌﻤﻠﻴﺎﺕ ﺍﳊﺴﺎﺑﻴﺔ ﻣﺜﻞ ﺍﳉﻤﻊ ،ﺍﻟﻄﺮﺡ ،ﺍﻟﻀﺮﺏ ،ﺍﻟﻘﺴﻤﺔ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺃﻬﻧﺎ ﺗﺘﻀﻤﻦ ﺁﻟﻴﺎﺕ
ﺍﲣﺎﺫ ﺍﻟﻘﺮﺍﺭ ﺍﻟﱵ ﺗﺴﻤﺢ ﻟﻠﺤﺎﺳﺐ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ﺑﺎﳌﻘﺎﺭﻧﺔ ﺑﲔ ﻋﻨﺼﺮﻳﻦ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻟﺘﺤﺪﻳﺪ
ﻓﻴﻤﺎ ﺇﺫﺍ ﻛﺎﻧﺎ ﻣﺘﺴﺎﻭﻳﲔ ﺃﻡ ﻻ.
ﻭﺣﺪﺓ ﺍﳌﻌﺎﳉﺔ ﺍﳌﺮﻛﺰﻳﺔ ) :(CPU) (Central Processing Unitﻭﻫﻲ ﺍﳉﺰﺀ "ﺍﳌﺪﻳﺮ" ﻟﻠﺤﺎﺳﺐ .ﻓﻬﻲ .5
ﺗﻠﻌﺐ ﺩﻭﺭ ﺍﳌﻨﺴﻖ ﻷﻋﻤﺎﻝ ﺍﳊﺎﺳﺐ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﻛﻮﻬﻧﺎ ﺍﳌﺸﺮﻑ ﺍﻟﻌﺎﻡ ﻋﻠﻰ ﻋﻤﻞ ﺍﻟﻮﺣﺪﺍﺕ
ﺍﻷﺧﺮﻯ ﺣﻴﺚ ﺃﻬﻧﺎ ﲢﺪﺩ ﻟﻮﺣﺪﺓ ﺍﻟﺪﺧﻞ ﻣﱴ ﳚﺐ ﻗﺮﺍﺀﺓ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻭﻭﺿﻌﻬﺎ ﰲ ﻭﺣﺪﺓ ﺍﻟﺬﺍﻛﺮﺓ.
ﻭﲣﱪ ﺃﻳﻀﹰﺎ ﻭﺣﺪﺓ ﺍﳊﺴﺎﺏ ﻭﺍﳌﻨﻄﻖ ﻣﱴ ﳚﺐ ﻣﻌﺎﳉﺔ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﻭﺣﺪﺓ ﺍﻟﺬﺍﻛﺮﺓ ﻭﻣﱴ
ﳚﺐ ﻋﻠﻰ ﻭﺣﺪﺓ ﺍﳋﺮﺝ ﺇﺭﺳﺎﳍﺎ ﻣﻦ ﻭﺣﺪﺓ ﺍﻟﺬﺍﻛﺮﺓ ﺇﱃ ﺃﺣﺪ ﺃﺟﻬﺰﺓ ﺍﳋﺮﺝ.
ﻭﺣﺪﺓ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺜﺎﻧﻮﻳﺔ ) :(Secondary Storage Unitﻭﻫﻲ ﻭﺣﺪﺓ "ﺍﻟﺘﺨﺰﻳﻦ" ﺍﻟﱵ ﺗﺘﺼﻒ .6
ﺑﻜﻮﻬﻧﺎ ﺷﺒﻪ ﺩﺍﺋﻤﺔ ﻭﺫﺍﺕ ﺳﻌﺔ ﲣﺰﻳﻦ ﻋﺎﻟﻴﺔ .ﻳﺘﻢ ﲣﺰﻳﻦ ﺍﳌﻌﻄﻴﺎﺕ ﻭﺍﻟﱪﺍﻣﺞ ﺍﻟﱵ ﻟﻴﺴﺖ ﻗﻴﺪ
ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﳊﺎﱄ ﻣﻦ ﻗﺒﻞ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻷﺧﺮﻯ ﰲ ﺍﳊﺎﺳﺐ ﺿﻤﻦ ﻭﺣﺪﺍﺕ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺜﺎﻧﻮﻳﺔ
)ﻣﺜﻞ ﺍﻷﻗﺮﺍﺹ (disksﺣﱴ ﺗﱪﺯ ﺍﳊﺎﺟﺔ ﺇﻟﻴﻬﺎ ﺑﻌﺪ ﺳﺎﻋﺎﺕ ﺃﻭ ﺃﻳﺎﻡ ﺃﻭ ﺃﺷﻬﺮ ﺃﻭ ﺣﱴ ﺑﻌﺪ
اﻟﻔﺼﻞ اﻷول ٢٤
ﺳﻨﻮﺍﺕ .ﻳﺘﻄﻠﺐ ﺍﻟﻮﺻﻮﻝ ﺇﱃ ﺍﳌﻌﻠﻮﻣﺎﺕ ﰲ ﻭﺣﺪﺍﺕ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺜﺎﻧﻮﻳﺔ ﺯﻣﻨﹰﺎ ﺃﻛﱪ ﺑﻜﺜﲑ ﻣﻦ ﺯﻣﻦ
ﺍﻟﻮﺻﻮﻝ ﺇﻟﻴﻬﺎ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﺜﺎﻧﻮﻳﺔ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺃﻧﻪ ﻛﻠﻔﺔ ﺻﻨﺎﻋﺔ ﻣﻮﺿﻊ ﻭﺍﺣﺪ ﻟﻠﺘﺨﺰﻳﻦ
)ﺣﺴﺐ ﻭﺣﺪﺓ ﺍﻟﻘﻴﺎﺱ( ﰲ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺜﺎﻧﻮﻳﺔ ﺃﻗﻞ ﺑﻜﺜﲑ ﻣﻦ ﻛﻠﻔﺘﻪ ﰲ ﺍﻟﺬﻭﺍﻛﺮ ﺍﻷﺳﺎﺳﻴﺔ.
ﺍﻟﻄﺮﻳﻘﺔ ﺃﻥ ﺍﳌﺴﺘﺨﺪﻡ ﻳﺴﺘﻘﺒﻞ ﺃﺟﻮﺑﺔ ﻣﺒﺎﺷﺮﺓ ﺭﺩﹰﺍ ﻋﻠىﻄﻠﺒﺎﺗﻪ ﺑﺪ ﹰﻻ ﻣﻦ ﺍﻻﻧﺘﻈﺎﺭ ﻟﻔﺘﺮﺍﺕ ﻃﻮﻳﻠﺔ
ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺍﻟﻨﺘﺎﺋﺞ ﻛﻤﺎ ﻛﺎﻥ ﺍﳊﺎﻝ ﻣﻊ ﺍﻷﳕﺎﻁ ﺍﻟﺴﺎﺑﻘﺔ ﻟﻌﻤﻞ ﺍﳊﻮﺍﺳﺐ.
area networksﻋﻠﻰ ﻣﺴﺘﻮﻯ ﻣﺆﺳﺴﺔ .ﳑﺎ ﻣﻬﺪ ﺍﻟﻄﺮﻳﻖ ﻟﻈﻬﻮﺭ ﺍﻟﻨﻈﻢ ﺍﳊﺴﺎﺑﻴﺔ ﺍﳌﻮﺯﻋﺔ Distributed
Computingﻭﻫﺬﺍ ﻳﻌﲏ ﺃﻧﻪ ﺑﺪ ﹰﻻ ﻣﻦ ﺇﳒﺎﺯ ﻋﻤﻠﻴﺎﺕ ﺣﺴﺎﺑﻴﺔ ﻣﺎ ﻋﻠﻰ ﺣﺎﺳﺐ ﻣﺮﻛﺰﻱ ﳝﻜﻦ ﺗﻮﺯﻳﻊ ﻫﺬﻩ
ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺸﺒﻜﺔ ﻋﻠﻰ ﻋﺪﺓ ﺣﻮﺍﺳﺐ ﺣﻴﺚ ﳚﺮﻱ ﺍﻟﻌﻤﻞ ﺍﳊﻘﻴﻘﻲ ﺍﳌﻄﻠﻮﺏ ﻹﳒﺎﺯ ﺍﳊﺴﺎﺑﺎﺕ
ﺍﳌﻄﻠﻮﺑﺔ.ﻛﺎﻧﺖ ﺍﳊﻮﺍﺳﺐ ﺍﻟﺸﺨﺼﻴﺔ ﰲ ﺗﻠﻚ ﺍﻟﻔﺘﺮﺓ ﻗﻮﻳﺔ ﻟﺪﺭﺟﺔ ﻛﺎﻓﻴﺔ ﻟﻠﻘﻴﺎﻡ ﺑﺎﳊﺴﺎﺑﺎﺕ ﺍﳌﻄﻠﻮﺑﺔ ﻣﻦ
ﻗﺒﻞ ﺍﳌﺴﺘﺨﺪﻡ ﺍﻟﻔﺮﺩ ﻭﻟﺘﺤﻘﻴﻖ ﺍﻻﺗﺼﺎﻝ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﻟﺘﻤﺮﻳﺮ ﺍﳌﻌﻄﻴﺎﺕ ﺑﺸﻜﻞ ﺇﻟﻜﺘﺮﻭﱐ.
ﰲ ﻳﻮﻣﻨﺎ ﺍﳊﺎﱄ ﺗﺘﺼﻒ ﺍﳊﺎﺳﺒﺎﺕ ﺍﻟﺸﺨﺼﻴﺔ ﰲ ﻛﻮﻬﻧﺎ ﻗﻮﻳﺔ ﻟﺪﺭﺟﺔ ﺗﻘﺎﺭﻥ ﺑﻘﻮﺓ ﺍﳊﻮﺍﺳﺐ ﺍﻟﱵ ﻛﺎﻧﺖ
ﺗﻜﻠﻒ ﻣﻠﻴﻮﻥ ﺩﻭﻻﺭ ﻗﺒﻞ ﻋﺸﺮﺓ ﺳﻨﻮﺍﺕ .ﺗﺴﻤﻰ ﺍﳊﻮﺍﺳﺐ ﺍﳌﻜﺘﺒﻴﺔ ﺍﻷﻛﺜﺮ ﻗﻮﺓ ﲟﺤﻄﺎﺕ ﺍﻟﻌﻤﻞ
workstationsﺍﻟﱵ ﺗﺘﻴﺢ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺍﻟﻔﺮﺩ ﻗﺪﺭﺍﺕ ﻫﺎﺋﻠﺔ .ﺗﺘﻢ ﺍﳌﺸﺎﺭﻛﺔ ﺑﺎﳌﻌﻠﻮﻣﺎﺕ ﺑﺴﻬﻮﻟﺔ ﻣﻦ ﺧﻼﻝ
ﺍﻟﺸﺒﻜﺎﺕ ﺣﻴﺚ ﺗﻘﺪﻡ ﺑﻌﺾ ﺍﳊﺎﺳﺒﺎﺕ ﺍﳌﺴﻤﺎﺓ ﲟﺨﺪﻣﺎﺕ ﺍﳌﻠﻔﺎﺕ file serversﳎﻤﻮﻋﺔ ﻣﺸﺘﺮﻛﺔ ﻣﻦ
ﺍﻟﱪﺍﻣﺞ ﻭﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﱵ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻦ ﻗﺒﻞ ﺍﳊﻮﺍﺳﺐ ﺍﻟﺰﺑﻮﻧﺔ clientsﺍﳌﻮﺯﻋﺔ ﺿﻤﻦ ﺍﻟﺸﺒﻜﺔ .ﳑﺎ
ﻣﻬﺪ ﺍﺠﻤﻟﺎﻝ ﻹﺩﺧﺎﻝ ﻣﻔﻬﻮﻡ ﺍﻟﻨﻈﻢ ﺍﳊﺴﺎﺑﻴﺔ ﺍﻟﺰﺑﻮﻥ /ﺍﳌﺨﺪﻡ.
ﺃﺿﺤﺖ ﻟﻐﺔ C++ﺍﳋﻴﺎﺭ ﺍﻷﻭﻝ ﻟﻜﺘﺎﺑﺔ ﺍﻟﱪﺍﻣﺞ ﺍﳋﺎﺻﺔ ﺑﺄﻧﻈﻤﺔ ﺍﻟﺘﺸﻐﻴﻞ ﺃﻭ ﺍﳋﺎﺻﺔ ﺑﺎﻟﻨﻈﻢ ﺍﳌﻮﺯﻋﺔ ﺃﻭ
ﺗﻠﻚ ﺍﻟﱵ ﺗﻌﺘﻤﺪ ﻣﻔﻬﻮﻡ ﺍﻟﺰﺑﻮﻥ /ﺍﳌﺨﺪﻡ .ﺗﻮﻓﺮ ﺃﻧﻈﻤﺔ ﺍﻻﺳﺘﺜﻤﺎﺭ ﺍﻟﺸﺎﺋﻌﺔ ﰲ ﻳﻮﻣﻨﺎ ﻫﺬﺍ ﻣﺜﻞ Unix
ﻭ Linuxﻭﻧﻈﻢ Windowsﻗﺪﺭﺍﺕ ﳑﺎﺛﻠﺔ ﻟﻠﻘﺪﺭﺍﺕ ﺍﳌﺬﻛﻮﺭﺓ ﺃﻋﻼﻩ.
ﻟﻐﺔ اﻵﻟﺔ ،ﻟﻐﺔ اﻟﻤﺠﻤﻊ ،واﻟﻠﻐﺎت ﻋﺎﻟﻴﺔ اﻟﻤﺴﺘﻮى 6-1
ﻳﻜﺘﺐ ﺍﳌﱪﳎﻮﻥ ﺗﻌﻠﻴﻤﺎﻬﺗﻢ ﺑﻠﻐﺎﺕ ﳐﺘﻠﻔﺔ ﻟﻠﱪﳎﺔ ﺑﻌﻀﻬﺎ ﻣﻔﻬﻮﻡ ﻣﺒﺎﺷﺮﺓ ﻣﻦ ﻗﺒﻞ ﺍﳊﺎﺳﺐ ﻭﺑﻌﻀﻬﺎ
اﻟﻔﺼﻞ اﻷول ٢٦
ﺍﻵﺧﺮ ﳛﺘﺎﺝ ﺇﱃ ﺧﻄﻮﺍﺕ ﺗﺮﲨﺔ ﻭﺳﻴﻄﺔ .ﻳﻮﺟﺪ ﺣﺎﻟﻴﹰﺎ ﺍﳌﺌﺎﺕ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﺍﳌﺴﺘﺨﺪﻣﺔ ﻭﺍﻟﱵ ﳝﻜﻦ
ﺗﻘﺴﻴﻤﻬﺎ ﺇﱃ ﺛﻼﺛﺔ ﺃﻧﻮﺍﻉ:
.1ﻟﻐﺎﺕ ﺍﻵﻟﺔ.
.2ﻟﻐﺎﺕ ﺍﺠﻤﻟﻤﻊ.
.3ﻟﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ.
ﻳﺴﺘﻄﻴﻊ ﺍﳊﺎﺳﺐ ﺃﻥ ﻳﻔﻬﻢ ﻣﺒﺎﺷﺮﺓ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﳋﺎﺻﺔ ﺑﻪ ﺍﻟﱵ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻄﺒﻴﻌﻴﺔ ﻟﻪ .ﳝﻜﻦ ﺗﻌﺮﻳﻒ ﻫﺬﻩ
ﺍﻟﻠﻐﺔ ﻋﻠﻰ ﺃﻬﻧﺎ ﺍﻟﻠﻐﺔ ﺍﳌﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﺒﻨﻴﺔ ﺍﻟﺼﻠﺒﺔ ﻟﻠﺤﺎﺳﺐ .ﺗﺘﺄﻟﻒ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﺑﺸﻜﻞ ﻋﺎﻡ ﻣﻦ ﺳﻼﺳﻞ
ﻣﻦ ﺍﻷﻋﺪﺍﺩ )ﳎﻤﻮﻋﺎﺕ ﻣﻦ ﺍﻷﺻﻔﺎﺭ ﻭﺍﻟﻮﺍﺣﺪﺍﺕ( ﺍﻟﱵ ﺗﻌﻄﻲ ﺍﻷﻭﺍﻣﺮ ﻟﻠﺤﺎﺳﺐ ﻣﻦ ﺃﺟﻞ ﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺎﺗﻪ
ﺍﻷﻭﻟﻴﺔ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﻋﻠﻰ ﺣﺪﺓ .ﺗﺮﺗﺒﻂ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﺑﺎﻵﻟﺔ ﺍﺭﺗﺒﺎﻃﹰﺎ ﻭﺛﻴﻘﹰﺎ machine-dependentﲟﻌﲎ ﺃﻥ ﻟﻐﺔ
ﺁﻟﺔ ﻣﺎ ﳝﻜﻦ ﺃﻥ ﺗﺴﺘﺨﺪﻡ ﻓﻘﻂ ﺍﻟﻨﻮﻉ ﳏﺪﺩ ﻓﻘﻂ ﻣﻦ ﺍﳊﻮﺍﺳﺐ .ﺗﻌﺘﱪ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻟﻐﺎﺕ ﺛﻘﻴﻠﺔ ﻭﻣﺮﻫﻘﺔ
ﻟﻠﻜﺎﺋﻦ ﺍﻟﺒﺸﺮﻱ ﻭﳝﻜﻦ ﺃﻥ ﻧﺮﻯ ﺫﻟﻚ ﻣﻦ ﺧﻼﻝ ﺍﳌﺜﺎﻝ ﺍﻟﺘﺎﱄ ﳉﺰﺀ ﻣﻦ ﺑﺮﻧﺎﻣﺞ ﻣﻜﺘﻮﺏ ﺑﻠﻐﺔ ﺍﻵﻟﺔ ﻭﺍﻟﺬﻱ
ﻳﻘﻮﻡ ﲜﻤﻊ ﺃﺟﻮﺭ ﺳﺎﻋﺎﺕ ﺍﻟﻌﻤﻞ ﺍﻹﺿﺎﻓﻴﺔ ﻣﻊ ﺍﻷﺟﻮﺭ ﺍﻷﺳﺎﺳﻴﺔ ﻭﳜﺰﻥ ﺍﻟﻨﺘﻴﺠﺔ ﰲ ﺇﲨﺎﱄ ﺍﻟﺪﻓﻊ:
+1300042774
+1400593419
+1200274027
ﻣﻊ ﺍﻧﺘﺸﺎﺭ ﺍﳊﻮﺍﺳﺐ ،ﺃﺻﺒﺢ ﻣﻦ ﺍﳌﻼﺣﻆ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ ﺍﻵﻟﺔ ﻫﻲ ﺑﺒﺴﺎﻃﺔ ﻋﻤﻠﻴﺔ ﺑﻄﻴﺌﺔ ﻭﳑﻠﱢﺔ
ﳌﻌﻈﻢ ﺍﳌﱪﳎﲔ .ﻭﺑﺪ ﹰﻻ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺳﻼﺳﻞ ﺍﻷﻋﺪﺍﺩ ﺍﻟﱵ ﻳﻔﻬﻤﻬﺎ ﺍﳊﺎﺳﺐ ﻣﺒﺎﺷﺮﺓ ﺑﺪﺃ ﺍﳌﱪﳎﻮﻥ
ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺼﻄﻠﺤﺎﺕ ﻗﺮﻳﺒﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻹﻧﻜﻠﻴﺰﻳﺔ English- like abbreviationsﻟﻠﺘﻌﺒﲑ ﻋﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ
ﺍﻷﻭﻟﻴﺔ ﻟﻠﺤﺎﺳﺐ .ﲤﺜﻞ ﻫﺬﻩ ﺍﻻﺧﺘﺼﺎﺭﺍﺕ ﺍﻷﺳﺎﺱ ﺍﻟﺬﻱ ﺍﻧﻄﻠﻘﺖ ﻣﻨﻪ ﻟﻐﺎﺕ ﺍﺠﻤﻟﻤﻊ ﺣﻴﺚ ﰎ ﺗﻄﻮﻳﺮ
ﻣﺘﺮﲨﺎﺕ ﻟﻠﱪﺍﻣﺞ ﺗﺴﻤﻰ ﺑﺎﺠﻤﻟﻤﻌﺎﺕ ) (assemblersﻟﺘﺤﻮﻳﻞ ﻫﺬﻩ ﺍﻟﱪﺍﻣﺞ ﻣﻦ ﻟﻐﺔ ﺍﺠﻤﻟﻤﻊ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ.
ﻳﺒﲔ ﺍﳌﺜﺎﻝ ﺍﻟﺘﺎﱄ ﺟﺰﺀﹰﺍ ﻣﻦ ﺑﺮﻧﺎﻣﺞ ﻣﻜﺘﻮﺏ ﺑﻠﻐﺔ ﺍﺠﻤﻟﻤﻊ ﻳﻘﻮﻡ ﺃﻳﻀﹰﺎ ﲜﻤﻊ ﺃﺟﻮﺭ ﺳﺎﻋﺎﺕ ﺍﻟﻌﻤﻞ ﺍﻹﺿﺎﰲ
ﻣﻊ ﺍﻷﺟﻮﺭ ﺍﻷﺳﺎﺳﻴﺔ ﻭﻳﻀﻊ ﺍﻟﻨﺘﻴﺠﺔ ﰲ ﺇﲨﺎﱄ ﺍﻟﺪﻓﻊ:
LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY
ﻧﻼﺣﻆ ﲜﻼﺀ ﺃﻥ ﻫﺬﺍ ﺍﳌﺜﺎﻝ ﺃﻭﺿﺢ ﺑﻜﺜﲑ ﻣﻦ ﺍﳌﺜﺎﻝ ﺍﻟﺴﺎﺑﻖ ﺍﳌﻜﺎﻓﺊ ﻟﻪ ﻭﺍﳌﻜﺘﻮﺏ ﺑﻠﻐﺔ ﺍﻵﻟﺔ .ﻛﻤﺎ ﺃﻧﻨﺎ
ﻧﻼﺣﻆ ﺃﻥ ﺍﻟﻨﺺ ﺍﻟﺜﺎﱐ ﻭﺍﺿﺢ ﻭﻣﻔﻬﻮﻡ ﻣﻦ ﻗﺒﻞ ﺍﻟﺒﺸﺮ ﻟﻜﻨﻪ ﻟﻴﺲ ﻣﻔﻬﻮﻣﹰﺎ ﻣﻦ ﻗﺒﻞ ﺍﳊﻮﺍﺳﺐ ﺣﱴ ﺗﺘﻢ
ﻋﻤﻠﻴﺔ ﺗﺮﲨﺘﻪ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ.
ﺗﺰﺍﻳﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﳊﻮﺍﺳﺐ ﻣﻊ ﻇﻬﻮﺭ ﻟﻐﺎﺕ ﺍﺠﻤﻟﻤﻊ .ﻟﻜﻦ ﺑﻘﻲ ﺇﳒﺎﺯ ﺃﺑﺴﻂ ﺍﳌﻬﺎﻡ ﻳﺘﻄﻠﺐ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺪﻳﺪ
ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ .ﻭﺑﺎﻟﺘﺎﱄ ﻣﻦ ﺃﺟﻞ ﺗﺴﺮﻳﻊ ﻋﻤﻠﻴﺔ ﺍﻟﱪﳎﺔ ﰎ ﺗﻄﻮﻳﺮ ﻟﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ high-level
languagesﺗﺴﺎﻋﺪ ﺗﻌﻠﻴﻤﺎﻬﺗﺎ ﻋﻠﻰ ﺍﻟﻘﻴﺎﻡ ﺑﺎﻟﻌﺪﻳﺪ ﻣﻦ ﺍﳌﻬﺎﻡ ﺍﳉﻮﻫﺮﻳﺔ .ﰎ ﺗﺴﻤﻴﺔ ﺍﻟﱪﺍﻣﺞ ﺍﻟﱵ ﺗﻘﻮﻡ ﺑﺘﺤﻮﻳﻞ
٢٧ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﻧﺼﻮﺹ ﺍﻟﱪﺍﻣﺞ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ"ﺑﺎﳌﺘﺮﲨﺎﺕ" ) .(compilersﺗﺴﺎﻋﺪ ﻟﻐﺎﺕ
ﺍﻟﱪﳎﺔ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﺍﳌﱪﳎﲔ ﻋﻠﻰ ﻛﺘﺎﺑﺔ ﺗﻌﻠﻴﻤﺎﺕ ﳝﻜﻦ ﺃﻥ ﺗﺒﺪﻭ ﻗﺮﻳﺒﺔ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺑﺎﻟﻠﻐﺔ ﺍﻹﻧﻜﻠﻴﺰﻳﺔ
ﻼ ﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﻭﺍﺗﺐ ﺍﳌﻜﺘﻮﺏ ﺑﻠﻐﺔ ﺍﶈﻠﻴﺔ ﻭﲢﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺍﻟﺸﺎﺋﻌﺔ ﺍﳌﺴﺘﺨﺪﻣﺔ .ﳝﻜﻦ ﻣﺜ ﹰ
ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﺃﻥ ﳛﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ:
grossPay = basyPay+overTimePay
ﻼ ﻣﻦ ﻗﺒﻞ ﺍﳌﱪﳎﲔ ﺃﻛﺜﺮ ﺑﻜﺜﲑ ﻣﻦ ﻟﻐﺎﺕ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﻫﻲ ﺃﻛﺜﺮ ﺗﻘﺒ ﹰ
ﺍﻵﻟﺔ ﺃﻭ ﻟﻐﺎﺕ ﺍﺠﻤﻟﻤﻊ .ﺗﻌﺪ ﺍﻟﻠﻐﺘﺎﻥ Cﻭ C++ﻣﻦ ﺃﻛﺜﺮ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﻗﻮ ﹰﺓ ﻭﺇﻧﺘﺸﺎﺭﹰﺍ.
ﳝﻜﻦ ﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺮﲨﺔ ﻟﱪﻧﺎﻣﺞ ﻣﻦ ﻟﻐﺔ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ ﺃﻥ ﺗﺄﺧﺬ ﺯﻣﻨﹰﺎ ﻛﺒﲑﹰﺍ .ﻳﻮﺟﺪ ﺃﻳﻀﹰﺎ
ﺑﻌﺾ ﺍﳌﻔﺴﺮﺍﺕ Interpreter Programsﺍﻟﱵ ﺗﺴﺘﻄﻴﻊ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﻣﺒﺎﺷﺮﺓ
ﺩﻭﻥ ﺍﳊﺎﺟﺔ ﺇﱃ ﺗﺮﲨﺔ ﻫﺬﻩ ﺍﻟﱪﺍﻣﺞ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ .ﻟﻜﻦ ﺗﻨﻔﻴﺬ ﺍﻟﱪﺍﻣﺞ ﺍﳌﹸﺘﺮﲨﺔ ﻫﻮ ﺃﺳﺮﻉ ﻣﻦ ﺗﻨﻔﻴﺬ
ﺍﻟﱪﺍﻣﺞ ﺍﳌﹸﻔﺴﺮﺓ .ﻋﻤﻮﻣﺎﹰ ،ﳓﺘﺎﺝ ﺇﱃ ﺍﳌﻔﺴﺮﺍﺕ ﰲ ﻣﺮﺣﻠﺔ ﺗﻄﻮﻳﺮ ﺍﻟﱪﺍﻣﺞ ﺣﻴﺚ ﺗﻘﻮﻡ ﺑﺈﻋﺎﺩﺓ ﺗﺮﲨﺔ
ﺍﻟﱪﻧﺎﻣﺞ ﻋﻨﺪ ﺃﻳﺔ ﺇﺿﺎﻓﺔ ﺟﺪﻳﺪﺓ ﺃﻭ ﻋﻨﺪ ﺗﺼﺤﻴﺢ ﺃﻱ ﺧﻄﺄ .ﻟﻜﻦ ﺑﻌﺪ ﺍﻻﻧﺘﻬﺎﺀ ﻣﻦ ﺍﻟﱪﻧﺎﻣﺞ ،ﳝﻜﻦ
ﺇﻧﺸﺎﺀ ﻧﺴﺨﺔ ﻣﺘﺮﲨﺔ ﻋﻨﻪ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ ﻣﻦ ﺃﺟﻞ ﺗﻨﻔﻴﺬﻩ ﺑﻔﻌﺎﻟﻴﺔ ﺃﻛﱪ.
Ritchie ﰲ ﺃﻭﺍﺧﺮ ﺍﻟﺴﺒﻌﻴﻨﺎﺕ ،ﺃﺿﺤﺖ ﻟﻐﺔ Cﺗُﻌﺮﻑ ﲢﺖ ﺍﺳﻢ ﻟﻐﺔ Cﺍﻟﺘﻘﻠﻴﺪﻳﺔ ﺃﻭ ﻟﻐﺔ Cﺍﳋﺎﺻﺔ ﺑـ
ﻭ .kernighanﻭﻟﻘﺪ ﺳﺎﻋﺪ ﻧﺸﺮ ﻛﺘﺎﺏ ﻟﻐﺔ ﺍﻟﱪﳎﺔ (The C Programming Languge) Cﻟﻠﻤﺆﻟﻔﲔ
Ritchieﻭ Kernighanﻟﺪﺍﺭ ﺍﻟﻨﺸﺮ Prantice-Hallﺳﻨﺔ 1978ﻋﻠﻰ ﺟﻠﺐ ﺇﻧﺘﺒﺎﻩ ﻭﺍﺳﻊ ﺣﻮﻝ ﺍﻟﻠﻐﺔ ﻟﻴﺼﺒﺢ
ﺑﻌﺪﻫﺎ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺃﺣﺪ ﺃﺷﻬﺮ ﺍﻟﻜﺘﺐ ﻭﺃﳒﺤﻬﺎ ﻋﻠﻰ ﺍﻹﻃﻼﻕ ﻣﻦ ﺑﲔ ﲨﻴﻊ ﺍﻟﻜﺘﺐ ﰲ ﳎﺎﻝ
ﺍﳌﻌﻠﻮﻣﺎﺗﻴﺔ.
ﻟﻘﺪ ﺃﺩﻯ ﻟﺴﻮﺀ ﺍﳊﻆ ﺍﻹﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﺍﺳﻊ ﻟﻠﻐﺔ Cﻋﻠﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻷﻧﻮﺍﻉ ﺍﳌﺨﺘﻠﻔﺔ ﻟﻠﺤﻮﺍﺳﺐ )ﺍﻟﱵ
ﻧﺴﻤﻴﻬﺎ ﺃﺣﻴﺎﻧﹰﺎ ﺍﻷﺭﺿﻴﺔ ﺫﺍﺕ ﺍﻟﺒﻨﻴﺔ ﺍﻟﺼﻠﺒﺔ (hardware platformsﺇﱃ ﺑﻌﺾ ﺍﻹﺧﺘﻼﻓﺎﺕ
ﺑﲔ ﻧﺴﺦ ﻟﻐﺔ Cﺍﻟﱵ ﳝﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﺘﺸﺎﻬﺑﺔ ﻭﻟﻜﻨﻬﺎ ﻏﺎﻟﺒﹰﺎ ﻏﲑ ﻣﺘﻮﺍﻓﻘﺔ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ .ﳑﺎ ﺷﻜﻞ ﻣﺸﻜﻠﺔ
ﻋﻮﻳﺼﺔ ﺑﺎﻟﻨﺴﺒﺔ ﳌﻄﻮﺭﻱ ﺍﻟﱪﺍﻣﺞ ﺍﻟﺬﻳﻦ ﳛﺘﺎﺟﻮﻥ ﺇﱃ ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﳝﻜﻦ ﺃﻥ ﺗﻌﻤﻞ ﻋﻠﻰ ﻋﺪﺓ ﺃﻧﻮﺍﻉ ﻣﻦ
ﺍﳊﻮﺍﺳﺐ .ﻭﻇﻬﺮﺕ ﺑﻨﺘﻴﺠﺔ ﺫﻟﻚ ﺍﳊﺎﺟﺔ ﺇﱃ ﺗﻌﺮﻳﻒ ﻧﺴﺨﺔ ﻣﻌﻴﺎﺭﻳﺔ ﻣﻦ ﻟﻐﺔ .Cﰎ ﰲ ﺳﻨﺔ 1983ﺇﻧﺸﺎﺀ
ﺍﻟﻠﺠﻨﺔ ﺍﻟﺘﻘﻨﻴﺔ X3J11ﲢﺖ ﺇﺷﺮﺍﻑ ﺍﻟﻠﺠﻨﺔ ﺍﻟﻮﻃﻨﻴﺔ ﺍﻷﻣﲑﻛﻴﺔ ﻟﻠﻤﻌﺎﻳﺮﺓ ﺍﳋﺎﺻﺔ ﺑﺎﳊﻮﺍﺳﺐ ﻭﻣﻌﺎﳉﺔ
ﺍﳌﻌﻠﻮﻣﺎﺕ ) (X3ﻣﻦ ﺃﺟﻞ "ﲢﺪﻳﺪ ﺗﻌﺮﻳﻒ ﻏﲑ ﻣﺒﻬﻢ ﻭﻣﺴﺘﻘﻞ ﻋﻦ ﺍﳊﻮﺍﺳﺐ ﺍﳌﺴﺘﺨﺪﻣﺔ ﻟﻠﻐﺔ ﺍﻟﱪﳎﺔ ."C
ﲤﺖ ﰲ ﺳﻨﺔ 1989ﺍﳌﺼﺎﺩﻗﺔ ﻋﻠﻰ ﺍﳌﻌﺎﻳﺮﺓ ﺍﻟﱵ ﺃﹸﺻﺪﺭﺕ .ﺑﻌﺪﻫﺎ ﻗﺎﻣﺖ ﻣﻨﻈﻤﺔ ﺍﻟـ ANSIﺑﺎﻟﺘﻌﺎﻭﻥ ﻣﻊ
ﺍﳌﻨﻈﻤﺔ ﺍﻟﻌﺎﳌﻴﺔ ﻟﻠﻤﻌﺎﻳﺮﺓ ) (ISOﺑﺘﻌﻤﻴﻢ ﺍﳌﻌﺎﻳﺮﺓ ﺍﳋﺎﺻﺔ ﺑﻠﻐﺔ Cﰲ ﳐﺘﻠﻒ ﺃﳓﺎﺀ ﺍﻟﻌﺎﱂ .ﰎ ﺇﺻﺪﺍﺭ ﻧﺺ
ﺍﳌﻌﺎﻳﺮﺓ ﺳﻨﺔ 1990ﲢﺖ ﺍﻟﺮﻗﻢ ANSI/ ISO 9899: 1990ﻭﺍﻟﱵ ﳝﻜﻦ ﻃﻠﺐ ﻧﺴﺦ ﻋﻨﻬﺎ ﻣﻦ ﺍﳌﻌﻬﺪ .ANSI
ﺗﻌﻜﺲ ﺍﻟﻄﺒﻌﺔ ﺍﻟﺜﺎﻧﻴﺔ ﻣﻦ ﻛﺘﺎﺏ Ritchieﻭ Kernighanﺍﳌﻨﺸﻮﺭ ﻋﺎﻡ 1988ﺍﻷﻓﻜﺎﺭ ﺍﳌﺘﻌﻠﻘﺔ ﻬﺑﺬﻩ
ﺍﻟﻨﺴﺨﺔ ﺍﳌﺴﻤﺎﺓ ﺑـ ANSI Cﻭﺍﻟﱵ ﻫﻲ ﺣﺎﻟﻴﹰﺎ ﻗﻴﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻌﺎﱂ ﺃﲨﻊ.
ﺗﻠﻤﻴﺢ ﻟﺘﺤﺴﻴﻦ اﻟﻤﺤﻤﻮﻟﻴﺔ 1-1
ﰎ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﺍﻟﱪﳎﺔ C++ﺍﻟﱵ ﺗﻌﺘﱪ ﺍﻣﺘﺪﺍﺩﹰﺍ ﻟﻠﻐﺔ Cﻣﻦ ﻗﺒﻞ Bjarne Stroustufﰲ ﺑﺪﺍﻳﺔ ﺍﻟﺜﻤﺎﻧﻴﺎﺕ .ﰲ
ﳐﺘﱪﺍﺕ ﺷﺮﻛﺔ .Bellﺗﻘﺪﻡ ﻟﻐﺔ C++ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻹﻣﻜﺎﻧﻴﺎﺕ ﺍﻟﱵ "ﺗﺴﻤﻮ" ﺑﻠﻐﺔ Cﻭﺗﻌﻠﻮ ﻬﺑﺎ .ﻟﻜﻦ
ﺍﻷﻫﻢ ﻣﻦ ﺫﻟﻚ ﻛﻠﻪ ﻓﻬﻲ ﺑﻘﺪﺭﺍﺕ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ.
ﳝﺮ ﻋﺎﱂ ﺗﻄﻮﻳﺮ ﺍﻟﱪﳎﻴﺎﺕ ﺣﺎﻟﻴﹰﺎ ﺑﺜﻮﺭﺓ ﻫﺪﻓﻬﺎ ﺑﻨﺎﺀ ﺑﺮﳎﻴﺎﺕ ﺳﺮﻳﻌﺔ ﻭﺻﺤﻴﺤﺔ ﻭﺍﻗﺘﺼﺎﺩﻳﺔ .ﻟﻜﻦ ﺑﻘﻲ
ﻫﺬﺍ ﺍﳍﺪﻑ ﺣﱴ ﺍﻵﻥ ﻫﺪﻓﹰﺎ ﺑﻌﻴﺪ ﺍﳌﻨﺎﻝ ﰲ ﺍﻟﻮﻗﺖ ﺍﻟﺬﻱ ﻳﺘﺰﺍﻳﺪ ﺍﻟﻄﻠﺐ ﻓﻴﻪ ﻋﻠﻰ ﺑﺮﳎﻴﺎﺕ ﺟﺪﻳﺪﺓ ﻭﺃﻛﺜﺮ
ﻓﻌﺎﻟﻴﺔ ﻭﻗﻮﺓ .ﺗﻌﺘﱪ ﺍﻷﻏﺮﺍﺽ ) (objectsﻣﻦ ﺍﳌﻜﻮﻧﺎﺕ ﺍﻟﱪﳎﻴﺔ ﺍﻟﻘﺎﺑﻠﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﻣﻦ ﻣﺮﺓ ﻭﻫﻲ
ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﲤﺜﻴﻞ ﻋﻨﺎﺻﺮ ﻣﻦ ﺍﻟﻌﺎﱂ ﺍﳊﻘﻴﻘﻲ ﺍﶈﻴﻂ ﺑﻨﺎ .ﻛﻤﺎ ﺃﻥ ﺍﳌﱪﳎﲔ ﻳﻜﺘﺸﻔﻮﻥ ﺣﺎﻟﻴﹰﺎ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ
ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﺍﻟﺬﻱ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﲡﺰﺋﺔ ﺍﳌﺴﺄﻟﺔ ﺍﳌﺪﺭﻭﺳﺔ ﻭﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺃﺳﺎﻟﻴﺐ ﺍﻟﺘﺼﻤﻴﻢ ﻭﺍﻟﱪﳎﺔ
ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ،ﳚﻌﻞ ﻣﻦ ﳎﻤﻮﻋﺎﺕ ﺗﻄﻮﻳﺮ ﺍﻟﱪﳎﻴﺎﺕ ﺃﻛﺜﺮ ﺇﻧﺘﺎﺟﻴﺔ ﳑﺎ ﻛﺎﻧﺖ ﻋﻠﻴﻪ ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻡ
٢٩ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﱪﳎﻴﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻣﺜﻞ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﺍﳌﻬﻴﻜﻠﺔ .ﻓﺎﻟﱪﺍﻣﺞ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻫﻲ ﺑﺮﺍﻣﺞ ﺳﻬﻠﺔ
ﺍﻟﻔﻬﻢ ﻭﻗﺎﺑﻠﺔ ﻟﻠﺘﻌﺪﻳﻞ ﻭﺍﻟﺘﺼﺤﻴﺢ ﺑﺴﻬﻮﻟﺔ.
ﰎ ﺗﻄﻮﻳﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺍﻷﺧﺮﻯ ،ﻧﺬﻛﺮ ﻣﻨﻬﺎ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﻟﻐﺔ SmallTalk
ﺍﳌﻄﻮﺭﺓ ﻣﻦ ﻗﺒﻞ ) Xerox’s Palo Alto Research Center (PARCﻭﺍﻟﱵ ﺗﻌﺘﱪ ﻟﻐﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺻﺎﻓﻴﺔ )ﻷﻥ
ﻛﻞ ﺷﻲﺀ ﻓﻴﻬﺎ ﻫﻮ ﻋﺒﺎﺭﺓ ﻋﻦ ﻏﺮﺽ( ﰲ ﺣﲔ ﺗﻌﺘﱪ ﻟﻐﺔ C++ﻟﻐﺔ ﻫﺠﻴﻨﺔ hybrid languageﻓﻤﻌﻬﺎ ﳝﻜﻦ
ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﺳﻠﻮﺏ ﻣﺸﺎﺑﻪ ﻟﻠﱪﳎﺔ ﺑﻠﻐﺔ Cﺃﻭ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﺳﻠﻮﺏ ﻏﺮﺿﻲ ﺍﻟﺘﻮﺟﻪ ﺃﻭ ﻛﻼﳘﺎ.
اﺳﺘﺨﺪام أﺳﻠﻮب اﻟﺒﻨﺎء اﻟﻜﺘﻠﻲ ﻟﺒﻨﺎء ﺑﺮاﻣﺠﻚ .وﺕﺠﻨﺐ ﻣﺤﺎوﻟﺔ إﻋﺎدة اﺥﺘﺮاع
اﻟﺪوﻻب .أي ﻗﻢ ﺑﺎﺳﺘﺨﺪام اﻷﺝﺰاء اﻟﺠﺎهﺰة اﻟﻤﻮﺝﻮدة ﻣﺴﺒﻘًﺎ .ﻧﺴﻤﻲ هﺬﻩ
اﻟﻄﺮیﻘﺔ ﻓﻲ اﻟﻌﻤﻞ ﺑﻄﺮیﻘﺔ إﻋﺎدة اﺳﺘﺨﺪام اﻟﺒﻨﻰ اﻟﻤﺮﻧﺔ وهﻲ ﻧﺎﺣﻴﺔ أﺳﺎﺳﻴﺔ
ﻓﻲ أﺳﻠﻮب اﻟﺒﺮﻣﺠﺔ ﻏﺮﺿﻴﺔ اﻟﺘﻮﺝﻪ.
ﻣﻼﺣﻈﺔ 1-1
ﺗﻜﻤﻦ ﺍﳌﻴﺰﺓ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻘﻴﺎﻣﻚ ﺑﺒﻨﺎﺀ ﺗﻮﺍﺑﻌﻚ ﻭﺻﻔﻮﻓﻚ ﺍﳋﺎﺻﺔ ﰲ ﺃﻧﻚ ﺗﻌﺮﻑ ﲤﺎﻡ ﺍﳌﻌﺮﻓﺔ ﻛﻴﻒ
ﺗﻌﻤﻞ .ﻭﳝﻜﻦ ﻟﻚ ﻓﺤﺺ ﻧﺼﻮﺹ ﺑﺮﺍﳎﻚ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ .C++ﰲ ﺣﲔ ﺗﺘﺠﻠﻰ ﺳﻴﺌﺔ ﺗﻠﻚ ﺍﻟﻄﺮﻳﻘﺔ ﰲ
ﺃﻬﻧﺎ ﺗﺘﻄﻠﺐ ﻭﻗﺘﹰﺎ ﻭﺟﻬﺪﹰﺍ ﻛﺒﲑﻳﻦ ﻣﻦ ﺃﺟﻞ ﺗﺼﻤﻴﻢ ﻭﺗﻄﻮﻳﺮ ﺗﻮﺍﺑﻊ ﻭﺻﻔﻮﻑ ﺟﺪﻳﺪﺓ ﻭﺫﺍﺕ ﺃﺩﺍﺀ ﻓﻌﺎﻝ.
ﺗﻠﻤﻴﺢ ﻟﺘﺤﺴﻴﻦ اﻷداء 1-1
ﻻ ﻣﻦ
إن اﺳﺘﺨﺪام اﻟﺘﻮاﺑﻊ واﻟﺼﻔﻮف اﻟﻤﻮﺝﻮدة ﻓﻲ اﻟﻤﻜﺘﺒﺔ اﻟﻤﻌﻴﺎریﺔ ﺑﺪ ً
آﺘﺎﺑﺔ ﻧﺴﺦ ﻣﻜﺎﻓﺌﺔ ﻟﻬﺎ یﻤﻜﻦ أن یﺴﺎﻋﺪ ﻋﻠﻰ ﺕﺤﺴﻴﻦ أداء اﻟﺒﺮﻧﺎﻣﺞ ﻷﻧﻪ
ﺝﺮى ﺕﻄﻮیﺮ هﺬﻩ اﻟﺘﻮاﺑﻊ ﺑﻌﺪ اﻷﺥﺬ ﺑﻌﻴﻦ اﻻﻋﺘﺒﺎر اﻟﺮﻏﺒﺔ اﻟﻘﻮیﺔ ﻓﻲ
ﺕﺤﺴﻴﻦ أداء اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺕﺪﺥﻞ ﻓﻴﻬﺎ.
9-1ﻟﻐﺔ Java
ﻳﻌﺘﻘﺪ ﻋﺪﺩ ﻻ ﺑﺄﺱ ﺑﻪ ﻣﻦ ﺍﻟﻌﺎﻣﻠﲔ ﰲ ﳎﺎﻝ ﺍﳌﻌﺎﳉﺎﺕ ﺍﻟﺼﻐﺮﻳﺔ Microprocessorsﺃﻧﻪ ﺳﻴﻜﻮﻥ ﳍﺬﻩ
ﺍﳌﻌﺎﳉﺎﺕ ﺗﺄﺛﲑ ﻛﺒﲑ ﰲ ﻋﻤﻠﻴﺎﺕ ﺑﻨﺎﺀ ﻭﺗﻄﻮﻳﺮ ﲡﻬﻴﺰﺍﺕ ﺇﻟﻜﺘﺮﻭﻧﻴﺔ ﺫﻛﻴﺔ .ﺍﻧﻄﻼﻗﹰﺎ ﻣﻦ ﻫﺬﻩ ﺍﻟﻔﻜﺮﺓ،
ﻗﺎﻣﺖ ﺷﺮﻛﺔ Sun Microsystemsﺑﺘﻤﻮﻳﻞ ﻣﺸﺮﻭﻉ ﲝﺚ ﻋﻠﻤﻲ ﺩﺍﺧﻠﻲ ﻟﺪﻳﻬﺎ ﺍﲰﺘﻪ Greenﰲ ﻋﺎﻡ
.1991ﺃﺩﻯ ﻫﺬﺍ ﺍﳌﺸﺮﻭﻉ ﺇﱃ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﺑﺮﳎﺔ ﻣﻌﺘﻤﺪﺓ ﻋﻠﻰ ﻟﻐﱵ Cﻭ .C++ﻭﻟﻘﺪ ﲰﻴﺖ ﻫﺬﻩ ﺍﻟﻠﻐﺔ
ﰲ ﺍﻟﺒﺪﺍﻳﺔ ﻟﻐﺔ Oakﻧﺴﺒﺔ ﺇﱃ ﺷﺠﺮﺓ ﺍﻟﺒﻠﻮﻁ ﺍﻟﱵ ﻳﻄﻞ ﻋﻠﻴﻬﺎ ﻣﻜﺘﺐ ﺍﻟﺴﻴﺪ James Goslingﳐﺘﺮﻉ ﻫﺬﻩ
ﺍﻟﻠﻐﺔ .ﻟﻜﻨﻪ ﺳﺮﻋﺎﻥ ﻣﺎ ﺗﺒﲔ ﻟﻠﺴﻴﺪ Goslingﺃﻥ ﻫﻨﺎﻙ ﻟﻐﺔ ﺑﺮﳎﺔ ﺃﺧﺮﻯ ﲢﻤﻞ ﻧﻔﺲ ﺍﻟﺘﺴﻤﻴﺔ .ﻭﺃﺛﻨﺎﺀ
ﺯﻳﺎﺭﺓ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻌﺎﻣﻠﲔ ﰲ ﺷﺮﻛﺔ Sunﺇﱃ ﺃﺣﺪ ﳏﻼﺕ ﺍﻟﻘﻬﻮﺓ ﺍﶈﻠﻴﺔ ،ﺟﺮﻯ ﺍﻗﺘﺮﺍﺡ ﺍﻻﺳﻢ Java
ﻟﻠﺘﻌﺒﲑ ﻋﻦ ﻟﻐﺔ ﺍﻟﱪﳎﺔ ﺍﳉﺪﻳﺪﺓ ﺍﳌﻄﻮﺭﺓ ﺣﺪﻳﺜﹰﺎ.
ﻟﻜﻦ ﻣﺮ ﺍﳌﺸﺮﻭﻉ Greenﺑﻌﺪﺩ ﻣﻦ ﺍﻟﺼﻌﻮﺑﺎﺕ ﻭﺫﻟﻚ ﺑﺴﺒﺐ ﻋﺪﻡ ﺗﻄﻮﺭ ﺳﻮﻕ ﺍﻟﺘﺠﻬﻴﺰﺍﺕ ﺍﻟﺬﻛﻴﺔ
ﺑﺎﻟﺴﺮﻋﺔ ﺍﻟﱵ ﺗﻮﻗﻌﺘﻬﺎ ﺷﺮﻛﺔ .Sunﻭﺍﻷﺳﻮﺀ ﻣﻦ ﺫﻟﻚ ﺃﻧﻪ ﺟﺮﻯ ﲢﻮﻳﻞ ﺃﺣﺪ ﺍﻟﻌﻘﻮﺩ ﺍﳍﺎﻣﺔ ﺍﻟﱵ ﻛﺎﻧﺖ
ﺷﺮﻛﺔ Sunﺗﻨﺎﺿﻞ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻴﻪ ﺇﱃ ﺷﺮﻛﺔ ﺃﺧﺮﻯ .ﻛﻞ ﺫﻟﻚ ﻛﺎﻥ ﻳﻬﺪﺩ ﺍﳌﺸﺮﻭﻉ Greenﻭﳝﻬﺪ
ﻼ .ﻭﻟﻜﻦ ﳊﺴﻦ ﺍﳊﻆ ،ﺑﺪﺃﺕ ﰲ ﻋﺎﻡ 1993ﺷﻌﺒﺔ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ World ﺑﺎﻟﺘﺎﱄ ﺇﱃ ﺇﻬﻧﺎﺋﻪ ﻭﺗﻮﻗﻴﻔﻪ ﻛﺎﻣ ﹰ
Wide Webﻭﺗﻄﺒﻴﻘﺎﻬﺗﺎ ﺑﺎﻻﻧﺘﺸﺎﺭ ﺍﻟﻜﺒﲑ ﻭﲢﺴﺴﺖ ﺷﺮﻛﺔ Sunﻷﳘﻴﺔ ﺍﺳﺘﺨﺪﺍﻡ Javaﰲ ﺗﻄﻮﻳﺮ ﻣﺎ
ﻳﺴﻤﻰ ﺑﺎﶈﺘﻮﻯ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ Dymanic Contentﻟﺼﻔﺤﺎﺕ ﺍﻟﻮﻳﺐ.
ﻗﺎﻣﺖ ﺷﺮﻛﺔ Sunﺑﺎﻹﻋﻼﻥ ﺭﲰﻴﹰﺎ ﻋﻦ ﻟﻐﺔ Javaﰲ ﻋﺮﺽ ﲡﺎﺭﻱ ﰲ ﺷﻬﺮ ﺃﻳﺎﺭ ﻋﺎﻡ .1995ﻭﻟﻘﺪ ﻇﻬﺮ
ﻣﺒﺎﺷﺮﺓ ﺍﻫﺘﻤﺎﻡ ﺍﻟﻌﺎﻣﻠﲔ ﰲ ﳎﺎﻝ ﺍﻷﻋﻤﺎﻝ ﻬﺑﺎ ﺑﺴﺒﺐ ﻇﺎﻫﺮ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻟﻌﺎﻡ ﺑﺸﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﳌﻴﺔ.
ﺗﺴﺘﺨﺪﻡ ﻟﻐﺔ Javaﺣﺎﻟﻴﹰﺎ ﻟﺒﻨﺎﺀ ﺻﻔﺤﺎﺕ ﻭﻳﺐ ﺫﺍﺕ ﳏﺘﻮﻯ ﺩﻳﻨﺎﻣﻴﻜﻲ ﻭﲣﺎﻃﱯ .ﻛﻤﺎ ﺗﺴﺘﺨﺪﻡ ﺃﻳﻀﹰﺎ
ﻟﺒﻨﺎﺀ ﺗﻄﺒﻴﻘﺎﺕ ﻭﺍﺳﻌﺔ ﻭﻟﺘﺤﺴﲔ ﻋﻤﻞ ﳐﺪﻣﺎﺕ ﺍﻟﻮﻳﺐ )ﻭﻫﻲ ﺍﳊﻮﺍﺳﻴﺐ ﺍﻟﱵ ﺗﺰﻭﺩﻧﺎ ﺑﺎﶈﺘﻮﻯ ﺍﻟﺬﻱ
ﻧﺴﺘﻌﺮﺿﻪ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﳌﺘﺼﻔﺤﺎﺕ( .ﺳﺎﻋﺪﺕ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺃﻳﻀﹰﺎ ﻋﻠﻰ ﺗﻮﻓﺮ ﺗﻄﺒﻴﻘﺎﺕ ﻟﺒﻌﺾ ﺍﻟﺘﺠﻬﻴﺰﺍﺕ،
ﻣﺜﻞ ﺍﳍﻮﺍﺗﻒ ﺍﶈﻤﻮﻟﺔ Cell Phonesﻭﺍﻟـ Pagersﻭﻏﲑﻫﺎ...
ﰲ ﻋﺎﻡ ،1995ﻛﻨﺎ ﻧﺘﺎﺑﻊ ﺗﻄﻮﻳﺮ ﻟﻐﺔ Javaﻣﻦ ﺧﻼﻝ ﺷﺮﻛﺔ .Sun Microsystemsﻭﰲ ﺷﻬﺮ ﺗﺸﺮﻳﻦ
ﺍﻟﺜﺎﱐ Novemberﻋﺎﻡ ،1995ﺗﺎﺑﻌﻨﺎ ﻣﺆﲤﺮﹰﺍ ﺣﻮﻝ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ ﰲ ﺑﻮﺳﻄﻦ .Bostonﺃﺛﻨﺎﺀ ﻫﺬﺍ
ﺍﳌﺆﲤﺮ ،ﻗﺎﻡ ﺃﺣﺪ ﳑﺜﻠﻲ ﺷﺮﻛﺔ Sunﺑﺘﻘﺪﱘ ﻋﺮﺽ ﻣﺜﲑ ﺣﻮﻝ ﻟﻐﺔ .Javaﺑﺮﺯ ﻣﻦ ﺧﻼﻝ ﺍﻟﻌﺮﺽ ﺃﻥ ﻟﻐﺔ
Javaﺳﺘﻠﻌﺐ ﺩﻭﺭﹰﺍ ﰲ ﺗﻄﻮﻳﺮ ﺻﻔﺤﺎﺕ ﺍﻟﻮﻳﺐ ﺍﻟﺘﺨﺎﻃﺒﻴﺔ ﻭﻣﺘﻌﺪﺩﺓ ﺍﻟﻮﺳﺎﺋﻂ .ﻭﻟﻜﻨﻨﺎ ﻻﺣﻈﻨﺎ ﻣﻦ
ﺟﻬﺘﻨﺎ ﺇﻣﻜﺎﻧﻴﺎﺕ ﺃﺧﺮﻯ ﳍﺬﻩ ﺍﻟﻠﻐﺔ.
ﻻﺣﻈﻨﺎ ﺃﻧﻪ ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ Javaﰲ ﺍﻟﺴﻨﺔ ﺍﻷﻭﱃ ﻟﺘﻌﻠﻴﻢ ﺍﻟﱪﳎﺔ ﻟﺘﻮﺿﻴﺢ ﺗﻘﻨﻴﺎﺕ ﻣﺮﺗﺒﻄﺔ
ﺑﺄﺳﺎﺳﻴﺎﺕ ﺍﻟﺮﺳﻮﻣﻴﺎﺕ ،Graphicsﻭﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﺼﻮﺭ Imagesﻭﺍﻹﺣﻴﺎﺀ Animationﻭﺍﻟﺼﻮﺕ
Audioﻭﺍﻟﻔﻴﺪﻳﻮ ﻭﻗﻮﺍﻋﺪ ﺍﳌﻌﻄﻴﺎﺕ Databasesﻭﺍﻟﺸﺒﻜﺎﺕ Networkingﻭﺗﻌﺪﺩ ﺍﳌﺴﺎﺭﺍﺕ
Multithreadingﻭﺍﳊﻮﺳﺒﺔ ﺍﻟﺘﻌﺎﻭﻧﻴﺔ .Collaborative Computing
اﻟﻔﺼﻞ اﻷول ٣٢
Internet ﺇﺿﺎﻓﺔ ﺇﱃ ﺷﻬﺮﺓ ﻟﻐﺔ Javaﰲ ﳎﺎﻝ ﺗﻄﻮﻳﺮ ﺗﻄﺒﻴﻘﺎﺕ ﻣﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ
ﺃﻭ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﺍﻧﺖ ،Interanetﻓﺈﻧﻪ ﻣﻦ ﺍﳌﺆﻛﺪ ﺃﻬﻧﺎ ﺳﺘﺼﺒﺢ ﺍﳋﻴﺎﺭ ﺍﻷﻭﻝ ﻟﺒﻨﺎﺀ ﻭﺗﻄﻮﻳﺮ ﺑﺮﳎﻴﺎﺕ
ﻟﺘﺠﻬﻴﺰﺍﺕ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺍﻻﺗﺼﺎﻝ ﻣﻦ ﺧﻼﻝ ﺍﻟﺸﺒﻜﺔ )ﻣﺜﻞ ﺍﳍﻮﺍﺗﻒ ﺍﶈﻤﻮﻟﺔ ﺍﳋﻠﻮﻳﺔ Cellular Phones
ﻭﺍﻟـ ... Pagersﻭﻏﲑﻫﺎ( .ﻻ ﳚﺐ ﻋﻠﻴﻚ ﺃﻥ ﺗﺴﺘﻐﺮﺏ ﺇﺫﺍ ﻋﺮﻓﺖ ﺃﻧﻪ ﳝﻜﻦ ﺭﺑﻂ ﲡﻬﻴﺰﺍﺕ ﺍﻟﺼﻮﺕ
ﺍﳊﺪﻳﺜﺔ ﺍﻟﱵ ﲤﺘﻠﻜﻬﺎ ﰲ ﺑﻴﺖ ﻣﻦ ﺧﻼﻝ ﺍﻟﺸﺒﻜﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﻘﻨﻴﺎﺕ .Java
10-1ﻟﻐﺎت Visual Basicو Visual C++وC#
ﺗﺒﲔ ﺃﻥ ﺗﻄﻮﻳﺮ ﻭﺑﻨﺎﺀ ﺗﻄﺒﻴﻘﺎﺕ ﺫﺍﺕ ﻭﺍﺟﻬﺎﺕ ﺑﻴﺎﻧﻴﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ Cﻭ C++ﻫﻲ ﻋﻤﻠﻴﺔ ﺻﻌﺒﺔ ﻭﻟﻴﺴﺖ
ﺑﺎﻟﺴﻬﻠﺔ .ﻋﻨﺪﻣﺎ ﺃﺳﺲ ﺑﻴﻞ ﻏﻴﺖ ﺷﺮﻛﺔ ،Microsoftﻗﺎﻡ ﺑﺘﻄﻮﻳﺮ ﻟﻐﺔ BASICﻋﻠﻰ ﻋﺪﺓ ﺃﻧﻮﺍﻉ ﻣﻦ ﺍﳊﻮﺍﺳﻴﺐ
ﺍﻟﺸﺨﺼﻴﺔ .ﺟﺮﻯ ﺗﻄﻮﻳﺮ ﻟﻐﺔ (Beginner's All- Puurpose Symbolic Instruction Code) Basicﰲ ﻣﻨﺘﺼﻒ
ﺍﻟﺴﺘﻴﻨﺎﺕ ﻣﻦ ﻗﺒﻞ ﺍﻷﺳﺎﺗﺬﺓ John Kemenyﻭ Thom as Kurtzﰲ ﻛﻠﻴﺔ Dartmouthﻭﺍﺳﺘﺨﺪﻣﺖ ﻫﺬﻩ ﺍﻟﻠﻐﺔ
ﻟﻜﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﺑﺴﻴﻄﺔ .ﻛﺎﻥ ﺍﳍﺪﻑ ﻣﻦ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﰲ ﺍﻟﺒﺪﺍﻳﺔ ﺗﻌﺮﻳﻒ ﻣﺒﺘﺪﺋﻲ ﺍﻟﱪﳎﺔ ﺑﺘﻘﻨﻴﺎﺕ ﺍﻟﱪﳎﺔ .ﺟﺮﻯ
ﺗﻄﻮﻳﺮ ﻟﻐﺔ Basicﺇﱃ Visual Basicﰲ ﻋﺎﻡ 1991ﻛﻨﺘﻴﺠﺔ ﻟﺘﻄﻮﻳﺮ ﺷﺮﻛﺔ Microsoftﻟﻮﺍﺟﻬﺎﺕ ﺍﳌﺴﺘﺨﺪﻡ
ﺍﻟﺒﻴﺎﻧﻴﺔ ) Graphical Vser Interface (GUIﰲ ﺃﻭﺍﺧﺮ ﺍﻟﺜﻤﺎﻧﻴﻨﺎﺕ ﻭﺑﺪﺍﻳﺔ ﺍﻟﺘﺴﻌﻴﻨﺎﺕ.
ﺟﺮﻯ ﺍﺷﺘﻘﺎﻕ ﻟﻐﺔ Visual Basicﻣﻦ ﻟﻐﺔ Basicﺃﻳﻀﹰﺎ ﻭﺍﻟﱵ ﺗﻌﺘﱪ ﻟﻐﺔ ﳐﺘﻠﻔﺔ ﻋﻨﻬﺎ ،ﻣﻦ ﺧﻼﻝ ﺇﺗﺎﺣﺘﻬﺎ
ﻹﻣﻜﺎﻧﻴﺎﺕ ﻗﻮﻳﺔ ﻟﺒﻨﺎﺀ ﻭﺍﺟﻬﺔ ﺑﻴﺎﻧﻴﺔ ،ﻭﺗﻌﺎﻣﻠﻬﺎ ﻣﻊ ﺍﻷﺣﺪﺍﺙ ،ﻭﺍﻟﻮﺻﻮﻝ ﺇﱃ ﺍﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﱪﳎﻴﺔ
ﻟﺘﻄﺒﻴﻘﺎﺕ ) ،(32-bitﻭﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ،ﺇﺿﺎﻓﺔ ﺇﱃ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻷﺧﻄﺎﺀ .ﺗﻌﺪ ﻟﻐﺔ Visual Basic
ﻭﺍﺣﺪﺓ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﺍﻟﺸﻬﲑﺓ ﻭﺍﳌﻘﺎﺩﺓ ﺑﺎﻷﺣﺪﺍﺙ ﻭﻭﺍﺟﻬﺎﺕ ﺍﻟﱪﳎﺔ ﺍﻟﺒﻴﺎﻧﻴﺔ.
ﺗﺴﻤﻰ ﺍﻟﻨﺴﺨﺔ ﺍﻷﺧﲑ ﻟﻠﻐﺔ Visual Basicﺑﻠﻐﺔ Visual Basic.Netﻭﺍﻟﱵ ﺟﺮﻯ ﺗﺼﻤﻴﻤﻬﺎ ﻣﻦ ﺃﺟﻞ ﻣﻨﺼﺔ
ﺍﻟﻌﻤﻞ ﺍﳉﺪﻳﺪﺓ .Netﺍﳋﺎﺻﺔ ﺑـ .Microsoftﺃﺗﺎﺣﺖ ﺍﻟﻨﺴﺦ ﺍﻟﺴﺎﺑﻘﺔ ﻟﻠﻐﺔ Visual Basicﺇﻣﻜﺎﻧﻴﺎﺕ
ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ،ﻟﻜﻦ ﺗﻘﺪﻡ ﻟﻐﺔ Visual Basic.Netﺇﻣﻜﺎﻧﻴﺎﺕ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻣﺘﻘﺪﻣﺔ Visual Basic.Net
ﻋﺪﻡ ﺍﻟﺘﻮﺍﻓﻖ ﺑﲔ ﺍﻟﻨﺴﺦ ﺍﳉﺪﻳﺪﺓ ﻟﻠﻤﻜﻮﻧﺎﺕ ﺍﳌﺸﺘﺮﻛﺔ ﻭﺍﻟﱪﳎﻴﺎﺕ ﺍﻟﻘﺪﳝﺔ .ﺇﺿﺎﻓﺔ ﺇﱃ ﺫﻟﻚ ،ﻓﻠﻘﺪ
ﻻﺣﻆ ﺍﳌﻄﻮﺭﻭﻥ ﺃﻬﻧﻢ ﲝﺎﺟﺔ ﺇﱃ ﺗﻄﺒﻴﻘﺎﺕ ﻣﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺍﻟﻮﻳﺐ ﻭﳝﻜﻦ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻴﻬﺎ ﻭﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ
ﻣﻦ ﺧﻼﻝ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ .ﻭﻧﺘﻴﺠﺔ ﻟﺸﻌﺒﻴﺔ ﺍﻟﺘﺠﻬﻴﺰﺍﺕ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ ،ﻻﺣﻆ ﺍﳌﻄﻮﺭﻭﻥ ﺃﻥ ﺯﺑﺎﺋﻨﻬﻢ ﱂ
ﻳﻌﻮﺩﻭﺍ ﳏﺼﻮﺭﻳﻦ ﺑﺄﻭﻟﺌﻚ ﺍﻟﺬﻳﻦ ﻳﻌﻤﻠﻮﻥ ﻋﻠﻰ ﺍﳊﻮﺍﺳﻴﺐ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ﻭﻫﻢ ﺑﺎﻟﺘﺎﱄ ﻣﻄﺎﻟﺒﻮﻥ ﺑﺒﻨﺎﺀ ﺑﺮﳎﻴﺎﺕ
ﳝﻜﻦ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻴﻬﺎ ﻣﻦ ﺧﻼﻝ ﺃﻱ ﺟﻬﺎﺯ ﺗﻘﺮﻳﺒﹰﺎ.
ﻭﻟﻐﺔ ﺍﻟﱪﳎﺔ .Net ﳌﻮﺍﺟﻬﺔ ﻫﺬﻩ ﺍﳊﺎﺟﺎﺕ ﺍﳉﺪﻳﺪﺓ ،ﻗﺎﻣﺖ ﺷﺮﻛﺔ ﻣﺎﻳﻜﺮﻭﺳﻮﻓﺖ ﺑﺘﻄﻮﻳﺮ ﺑﻴﺌﺔ ﺍﻟﻌﻤﻞ
ﺍﳉﺪﻳﺪﺓ .C#
ﳝﻜﻦ ﺑﻮﺍﺳﻄﺔ ﺑﻴﺌﺔ ﺍﻟﻌﻤﻞ .Netﺗﻮﺯﻳﻊ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﳌﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺍﻟﻮﻳﺐ ﻋﻠﻰ ﺷﺮﳛﺔ ﻭﺍﺳﻌﺔ ﻣﻦ
ﺍﻟﺘﺠﻬﻴﺰﺍﺕ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ ﻭﻋﻠﻰ ﺍﳊﻮﺍﺳﻴﺐ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ .ﻳﺘﻮﻓﺮ ﰲ ﺑﻴﺌﺔ ﺍﻟﻌﻤﻞ ﻫﺬﻩ ﳕﻮﺫﺟﹰﺎ ﺟﺪﻳﺪﹰﺍ ﻟﻠﺘﻌﺎﻣﻞ
ﻣﻊ ﺍﻟﱪﳎﻴﺎﺕ ﳑﺎ ﻳﺴﺎﻋﺪ ﻋﻠﻰ ﺗﻄﻮﻳﺮ ﻭﺑﻨﺎﺀ ﺗﻄﺒﻴﻘﺎﺕ ﺑﻌﺪﺓ ﻟﻐﺎﺕ ﻭﻳﺴﻤﺢ ﳍﺎ ﺑﺎﻻﺗﺼﺎﻝ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ.
ﺟﺮﻯ ﺗﻄﻮﻳﺮ ﻟﻐﺔ C#ﺧﺼﻴﺼﹰﺎ ﻣﻦ ﺃﺟﻞ ﲤﻜﲔ ﺍﳌﱪﳎﲔ ﺍﻻﻧﺘﻘﺎﻝ ﺑﺴﻬﻮﻟﺔ ﺇﱃ ﺑﻴﺌﺔ ﺍﻟﻌﻤﻞ ،.Netﻭﻳﻌﺰﺯ
ﻫﺬﺍ ﺍﻻﻋﺘﻘﺎﺩ ﻛﻮﻥ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﳍﺎ ﺟﺬﻭﺭ ﰲ ﻟﻐﺎﺕ Cﻭ C++ﻭ Javaﻭﺫﻟﻚ ﺑﻌﺪ ﻣﻼﺋﻤﺔ ﻣﺎ ﺗﺘﺼﻒ ﺑﻪ
ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﻣﻦ ﻣﺰﺍﻳﺎ ﺣﺴﻨﺔ ﻭﺇﺿﺎﻓﺔ ﻣﻴﺰﺍﺕ ﺟﻴﺪﺓ ﺃﺧﺮﻯ ﳑﻴﺰﺓ ﻟﻠﻐﺔ .C#ﻭﻋﻠﻰ ﺍﻋﺘﺒﺎﺭ ﺃﻧﻪ ﺟﺮﻯ ﺑﻨﺎﺀ
ﻭﺗﻄﻮﻳﺮ ﻟﻐﺔ C#ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﻟﻐﺎﺕ ﺑﺮﳎﺔ ﺟﻴﺪﺓ ﻭﻭﺍﺳﻌﺔ ﺍﻻﻧﺘﺸﺎﺭ ﻓﺈﻥ ﺫﻟﻚ ﺳﻴﺠﻌﻞ ﻣﻨﻬﺎ ﻟﻐﺔ ﺳﻬﻠﺔ
ﻭﳑﺘﻌﺔ.
ﺗﻌﺘﱪ ﻟﻐﺔ C#ﻟﻐﺔ ﻣﻘﺎﺩﺓ ﺑﺎﻷﺣﺪﺍﺙ ﻭﻟﻐﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻛﺎﻣﻠﺔ ﻭﻟﻐﺔ ﺑﺮﳎﺔ ﻣﺮﺋﻴﺔ ﰲ ﻧﻔﺲ ﺍﻟﻮﻗﺖ.
ﻭﳚﺮﻱ ﺑﻨﺎﺀ ﺍﻟﱪﺍﻣﺞ ﻣﻦ ﺧﻼﳍﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺑﻴﺌﺔ ﺍﻟﻌﻤﻞ ﺍﳌﺘﻜﺎﻣﻠﺔ ﻣﻌﻬﺎ (IDE) Integrated Development
Environmentﻭﺍﻟﱵ ﺗﺴﻤﻰ .Visual Studio.Netﳝﻜﻦ ﻣﻦ ﺧﻼﻝ ﺍﻟﺒﻴﺌﺔ ) (IDEﺑﻨﺎﺀ ﻭﺗﺸﻐﻴﻞ ﻭﻓﺤﺺ
ﻭﺗﺪﻗﻴﻖ ﺑﺮﺍﻣﺞ C#ﺑﻜﻞ ﺳﻬﻮﻟﺔ ﻭﺩﻭﻥ ﺇﺿﺎﻓﺔ ﺍﻟﻮﻗﺖ ﻹﳒﺎﺯ ﺫﻟﻚ ﰲ ﺣﺎﻝ ﻋﺪﻡ ﺗﻮﻓﺮ ﻣﺜﻞ ﺗﻠﻚ ﺍﻟﺒﻴﺌﺔ.
ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺴﺮﻳﻌﺔ ﰲ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ﺑﺎﺳﺘﺨﺪﺍﻡ IDEﺑﺎﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ﺍﻟﺴﺮﻳﻊ (RAD) Rapid
.Application Development
ﺗﺴﺎﻫﻢ ﻟﻐﺔ C#ﰲ ﻇﻬﻮﺭ ﺷﻜﻞ ﺟﺪﻳﺪ ﻟﻠﺘﺒﺎﺩﻝ ﺑﲔ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﺍﳌﺨﺘﻠﻔﺔ .ﳝﻜﻦ ﻟﻠﻤﻜﻮﻧﺎﺕ ﺍﻟﱪﳎﻴﺔ
ﻣﻦ ﻋﺪﺓ ﻟﻐﺎﺕ ﺃﻥ ﺗﺘﻔﺎﻋﻞ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﺑﻄﺮﻳﻘﺔ ﱂ ﺗﻜﻦ ﻣﻌﺮﻭﻓﺔ ﻣﻦ ﻗﺒﻞ .ﳝﻜﻦ ﺃﻳﻀﹰﺎ ﻟﻠﻤﻄﻮﺭﻳﻦ ﺃﻥ
ﻳﺘﻌﺎﻣﻠﻮﺍ ﰲ ﺑﺮﺍﳎﻬﻢ ﺍﳉﺪﻳﺪﺓ ﺑﻠﻐﺔ C#ﻣﻊ ﺍﻟﱪﺍﻣﺞ ﺍﻟﻘﺪﳝﺔ .ﻛﻤﺎ ﳝﻜﻦ ﻟﱪﺍﻣﺞ C#ﺃﻥ ﳚﺮﻱ ﺍﻟﺘﻌﺎﻣﻞ
ﻣﻌﻬﺎ ﻣﻦ ﺧﻼﻝ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ.
ﺭﻳﺎﺿﻴﺔ ﻣﻌﻘﺪﺓ .ﺑﻘﻴﺖ ﻟﻐﺔ FORTRANﻟﻐﺔ ﺑﺮﳎﺔ ﻣﻨﺘﺸﺮﺓ ﺑﻜﺜﺮﺓ ﻭﺧﺼﻮﺻﹰﺎ ﻣﻊ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﳍﻨﺪﺳﻴﺔ.
ﺃﻣﺎ ﻟﻐﺔ (COmmon Business Oriented Langague) COBOLﻓﻘﺪ ﰎ ﺗﻄﻮﻳﺮﻫﺎ ﺳﻨﺔ 1959
ﻣﻦ ﻗﺒﻞ ﳎﻤﻮﻋﺔ ﻣﻦ ﻣﺼﻨﻌﻲ ﺍﳊﻮﺍﺳﺐ ﻭﻣﺴﺘﺨﺪﻣﻴﻬﺎ ﻣﻦ ﺍﻟﻌﺎﻣﻠﲔ ﰲ ﺍﻟﺼﻨﺎﻋﺔ ﺃﻭ ﻋﻨﺪ ﺍﳊﻜﻮﻣﺔ .ﰎ
ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ COBOLﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻣﻦ ﺃﺟﻞ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﺠﺎﺭﻳﺔ ﺍﻟﱵ ﺗﺘﻄﻠﺐ ﺩﻗﺔ ﻭﻓﻌﺎﻟﻴﺔ ﰲ
ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﻜﻤﻴﺎﺕ ﺍﻟﻜﺒﲑﺓ ﻣﻦ ﺍﳌﻌﻄﻴﺎﺕ .ﻳﻮﺟﺪ ﺣﱴ ﻳﻮﻣﻨﺎ ﻫﺬﺍ ﺃﻛﺜﺮ ﻣﻦ ﻧﺼﻒ ﺑﺮﳎﻴﺎﺕ
ﳎﺎﻝ ﺇﺩﺍﺭﺓ ﺍﻷﻋﻤﺎﻝ ﻣﻜﺘﻮﺏ ﺑﻠﻐﺔ ﺍﻟـ .COBOLﻭﻫﻨﺎﻙ ﺣﻮﺍﱄ ﻣﻠﻴﻮﻥ ﺷﺨﺺ ﺗﻘﺮﻳﺒﹰﺎ ﻳﻌﻤﻠﻮﻥ ﺑﻨﺸﺎﻁ
ﻟﻜﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﺑﻠﻐﺔ .COBOL
ﰎ ﺗﺼﻤﻴﻢ ﻟﻐﺔ Pascalﺗﻘﺮﻳﺒﹰﺎ ﰲ ﻧﻔﺲ ﺍﻟﻔﺘﺮﺓ ﺍﻟﱵ ﺑﺪﺃ ﻓﻴﻬﺎ ﺗﺼﻤﻴﻢ ﻟﻐﺔ .Cﻗﺎﻡ ﺑﺒﻨﺎﺀ ﻟﻐﺔ Pascalﺍﻷﺳﺘﺎﺫ
Nicklaus Wirthﻭﻛﺎﻧﺖ ﳐﺼﺼﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺍﻷﻛﺎﺩﳝﻲ .ﻭﺳﻮﻑ ﻧﺘﺤﺪﺙ ﻋﻦ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺑﺸﻜﻞ ﺃﻛﱪ
ﰲ ﺍﳌﻘﻄﻊ ﺍﻟﺘﺎﱄ.
.(Charles Babbageﺗﻌﺘﱪ ﺧﺎﺻﻴﺔ ﺗﻌﺪﺩ ﺍﳌﻬﺎﻡ multitaskingﺇﺣﺪﻯ ﺃﺑﺮﺯ ﻣﻘﺪﺭﺍﺕ ﻟﻐﺔ Adaﻭﺍﻟﱵ
ﺗﺴﻤﺢ ﻟﻠﻤﱪﳎﲔ ﺑﺘﻮﺻﻴﻒ ﻋﺪﺓ ﻣﻬﺎﻡ ﳝﻜﻦ ﺃﻥ ﺗﻨﻔﺬ ﻋﻠﻰ ﺍﻟﺘﻮﺍﺯﻱ .ﰲ ﺣﲔ ﺗﺴﻤﺢ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ
ﺍﻷﺧﺮﻯ ﺍﻟﱵ ﻗﻤﻨﺎ ﺑﺎﳊﺪﻳﺚ ﻋﻨﻬﺎ ﲟﺎ ﰲ ﺫﻟﻚ ﻟﻐﺔ Cﻭﻟﻐﺔ C++ﻟﻠﻤﱪﳎﲔ ﺑﻜﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﺗﻨﻔﺬ ﻣﻬﻤﺔ
ﻭﺍﺣﺪﺓ ﻋﻠﻰ ﺍﻷﻛﺜﺮ ﰲ ﻧﻔﺲ ﺍﻟﻮﻗﺖ.
اﻟﺘﻮﺝﻪ اﻷﺳﺎﺳﻲ ﻟﻠﺒﺮﻣﺠﻴﺎت :ﺗﻘﻨﻴﺔ اﻟﻌﺮض 13-1
ﻳﺘﺬﻛﺮ ﺃﺣﺪ ﻣﺆﻟﻔﻲ ﺍﻟﻜﺘﺎﺏ )ﻭﻫﻮ (H.M.Deitelﺍﻹﺣﺒﺎﻁ ﺍﻟﻜﺒﲑ ﺍﻟﺬﻱ ﻛﺎﻧﺖ ﺗﻌﺎﱐ ﻣﻨﻪ ﻫﻴﺌﺎﺕ ﺗﻄﻮﻳﺮ
ﺍﻟﱪﳎﻴﺎﺕ ﰲ ﺳﻨﻮﺍﺕ ﺍﻟﺴﺘﻴﻨﺎﺕ ﻭﺧﺎﺻﺔ ﺗﻠﻚ ﺍﻟﱵ ﻛﺎﻧﺖ ﺗﻘﻮﻡ ﺑﺘﻄﻮﻳﺮ ﺑﺮﳎﻴﺎﺕ ﻛﺒﲑﺓ .ﺍﺳﺘﻔﺎﺩ ﺍﻟﺴﻴﺪ
H.M.Deitelﺧﻼﻝ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻟﱵ ﺳﺒﻘﺖ ﲣﺮﺟﻪ ﻣﻦ ﻣﻴﺰﺓ ﻋﻤﻠﻪ ﰲ ﺍﻟﺼﻴﻒ ﻣﻊ ﻓﺮﻳﻖ ﻳﻘﻮﻡ ﺑﺘﻄﻮﻳﺮ
ﺃﻧﻈﻤﺔ ﺗﺸﻐﻴﻞ ﻣﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺗﻘﺴﻴﻢ ﺍﻟﺰﻣﻦ ﻭﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﻈﺎﻫﺮﻳﺔ ﻟﺪﻯ ﺇﺣﺪﻯ ﻛﱪﻳﺎﺕ
ﺍﻟﺸﺮﻛﺎﺕ ﺍﻟﺮﺍﺋﺪﺓ ﰲ ﳎﺎﻝ ﻋﻠﻮﻡ ﺍﳊﺎﺳﻮﺏ .ﻛﺎﻧﺖ ﻫﺬﻩ ﲡﺮﺑﺔ ﻋﻈﻴﻤﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻄﺎﻟﺐ .ﻭﻟﻜﻦ ﻇﻬﺮﺕ
ﺍﳊﻘﻴﻘﺔ ﺟﻠﻴﺔ ﰲ ﺻﻴﻒ ﻋﺎﻡ 1967ﻋﻨﺪﻫﺎ ﻗﺮﺭﺕ ﺍﻟﺸﺮﻛﺔ ﺍﻟﺘﻨﺼﻞ ﻣﻦ ﺇﻧﺘﺎﺝ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﺬﻱ ﺃﺷﺮﻧﺎ
ﺇﻟﻴﻪ ﻓﻴﻤﺎ ﺳﺒﻖ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻣﺸﺎﺭﻛﺔ ﻣﺌﺎﺕ ﺍﻷﺷﺨﺎﺹ ﰲ ﺍﻟﻌﻤﻞ ﺑﻪ ﻟﻌﺪﺓ ﺳﻨﻮﺍﺕ ﲝﺠﺔ ﺃﻧﻪ ﻣﻦ
ﺍﻟﺼﻌﺐ ﺇﳒﺎﺯ ﺍﻟﻨﻈﺎﻡ ﺍﳌﻄﻠﻮﺏ ﺑﺸﻜﻞ ﺻﺤﻴﺢ.
ﺑﺪﺃﺕ ﺍﻟﺘﺤﺴﻴﻨﺎﺕ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺗﻘﻨﻴﺎﺕ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ﺑﺎﻟﻈﻬﻮﺭ ﺑﻌﺪ ﺍﻟﺘﺄﻛﺪ ﻣﻦ ﻓﻮﺍﺋﺪ ﺍﻟﱪﳎﺔ
ﺍﳌﻬﻴﻜﻠﺔ ) Structured Programmingﻭﻣﺎ ﺍﺭﺗﺒﻂ ﻬﺑﺎ ﻣﻦ ﻣﻨﻬﺠﻴﺎﺕ ﺍﻟﺘﺼﻤﻴﻢ ﻭﺍﻟﺘﺤﻠﻴﻞ ﻟﻸﻧﻈﻤﺔ
ﺍﳌﻬﻴﻜﻠﺔ( ﰲ ﺑﺪﺍﻳﺔ ﺍﻟﺴﺒﻌﻴﻨﺎﺕ .ﻭﻟﻜﻦ ﱂ ﻳﻈﻬﺮ ﺫﻟﻚ ﺟﻠﻴﹰﺎ ﺇﻻ ﺑﻌﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺗﻘﻨﻴﺎﺕ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ
ﺍﻟﺘﻮﺟﻪ ﺑﺸﻜﻞ ﻭﺍﺳﻊ ﺧﻼﻝ ﻓﺘﺮﺓ ﺍﻟﺘﺴﻌﻴﻨﺎﺕ ﻭﺫﻟﻚ ﻋﻨﺪﻣﺎ ﺷﻌﺮ ﺍﳌﱪﳎﻮﻥ ﺃﻬﻧﻢ ﳝﺘﻠﻜﻮﻥ ﻓﻌﻠﻴﹰﺎ ﺍﻷﺩﻭﺍﺕ
ﺍﻟﻼﺯﻣﺔ ﻟﺒﻨﺎﺀ ﺑﺮﳎﻴﺎﺕ ﻣﺘﻴﻨﺔ.
ﺗﻌﻮﺩ ﺗﻘﻨﻴﺔ ﺍﻟﻐﺮﺽ ﰲ ﻭﺍﻗﻊ ﺍﻷﻣﺮ ﺇﱃ ﻓﺘﺮﺓ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺘﻴﻨﺎﺕ .ﻭﻟﻘﺪ ﺟﺮﻯ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﺍﻟﱪﳎﺔ C++ﰲ
ﺷﺮﻛﺔ AT & Tﻣﻦ ﻗﺒﻞ Bjorne Stroustupﰲ ﺑﺪﺍﻳﺔ ﺍﻟﺜﻤﺎﻧﻴﻨﺎﺕ ﻭﺫﻟﻚ ﺍﻋﺘﻤﺎﺩﹰﺍ ﻋﻠﻰ ﻟﻐﺘﲔ ﳘﺎ :ﻟﻐﺔ C
ﺍﻟﱵ ﺟﺮﻯ ﺗﻄﻮﻳﺮﻫﺎ ﰲ ﺷﺮﻛﺔ AT & Tﻟﺘﻄﻮﻳﺮ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ Unixﰲ ﺑﺪﺍﻳﺔ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ،ﻭﻟﻐﺔ Sinula
67ﺍﻟﱵ ﻃﻮﺭﺕ ﰲ ﺃﻭﺭﺑﺎ ﻭﻇﻬﺮﺕ ﺇﱃ ﺍﻟﻮﺟﻮﺩ ﻋﺎﻡ .1967ﺍﺳﺘﻮﻋﺒﺖ ﻟﻐﺔ C++ﻣﺰﺍﻳﺎ ﻟﻐﺔ Cﻭﺃﺿﺎﻓﺖ
ﺇﻟﻴﻬﺎ ﻗﺪﺭﺍﺕ Sinulaﻣﻦ ﺃﺟﻞ ﺇﻧﺸﺎﺀ ﺍﻷﻏﺮﺍﺽ ﻭﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ .ﻭﱂ ﻳﻜﻦ ﻭﻗﺘﻬﺎ ﻣﻘﺪﺭﹰﺍ ﻟﻠﻐﺔ Cﺃﻭ ﻟﻠﻐﺔ
C++ﺑﺄﻥ ﺗﺴﺘﺨﺪﻣﺎ ﺧﺎﺭﺝ ﳐﺎﺑﺮ ﺍﻟﺒﺤﺚ ﺍﻟﻌﻠﻤﻲ ﺍﳋﺎﺹ ﺑﺸﺮﻛﺔ AT & Tﻭﻟﻜﻦ ﺳﺮﻋﺎﻥ ﻣﺎ ﺑﺪﺃﺕ
ﺟﺬﻭﺭ ﻫﺎﺗﲔ ﺍﻟﻠﻐﺘﲔ ﺑﺎﻟﻈﻬﻮﺭ ﻭﺍﻟﺘﻄﻮﺭ.
ﻣﺎ ﻫﻲ ﺍﻷﻏﺮﺍﺽ ﻭﳌﺎﺫﺍ ﻟﺪﻳﻬﺎ ﻫﺬﻩ ﺍﳋﺼﻮﺻﻴﺔ؟ ﺗﻌﺘﱪ ﺗﻘﻨﻴﺔ ﺍﻟﻐﺮﺽ ﺗﻘﻨﻴﺔ ﻣﺴﺎﻋﺪﺓ ﰲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻀﻤﲔ
ﻭﻫﻲ ﺗﺴﺎﻋﺪ ﻋﻠﻰ ﺇﻧﺸﺎﺀ ﻭﺣﺪﺍﺕ ﺑﺮﳎﻴﺔ ﻣﻌﱪﺓ ﺫﺍﺕ ﻋﻼﻗﺔ ﲜﺰﺀ ﳏﺪﺩ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻖ ﺍﳌﺮﺍﺩ ﺗﻄﻮﻳﺮﻩ .ﻳﻮﺟﺪ
ﻼ ﺃﻏﺮﺍﺽ ﳍﺎ ﻋﻼﻗﺔ ﺑﺎﻟﺘﺎﺭﻳﺦ ﻭﺍﻟﻮﻗﺖ ﻭﺩﻓﻊ ﺍﻟﺸﺒﻜﺎﺕ ﻭﺍﻟﻔﻮﺍﺗﲑ ﻭﺍﻟﺼﻮﺕ ﻭﺍﻟﺼﻮﺭﺓ ﻭﺍﳌﻠﻔﺎﺕﻟﺪﻳﻨﺎ ﻣﺜ ﹰ
ﻭﺍﻟﺴﺠﻼﺕ ﻭﻏﲑ ﺫﻟﻚ .ﳝﻜﻦ ﻣﻦ ﻭﺍﻗﻊ ﺍﻷﻣﺮ ﲤﺜﻴﻞ ﺃﻱ ﺍﺳﻢ ﺗﻘﺮﻳﺒﹰﺎ ﻋﻠﻰ ﺷﻜﻞ ﻏﺮﺽ.
ﳓﻦ ﻧﻌﻴﺶ ﰲ ﻋﺎﱂ ﻣﻜﻮﻥ ﻣﻦ ﺍﻷﻏﺮﺍﺽ .ﺍﻧﻈﺮ ﺣﻮﻟﻚ ﻟﺘﺮﻯ ﺍﻟﺴﻴﺎﺭﺍﺕ ﻭﺍﻟﻄﺎﺋﺮﺍﺕ ﻭﺍﻷﺷﺨﺎﺹ
ﻭﺍﳊﻴﻮﺍﻧﺎﺕ ﻭﺍﻷﺑﻨﻴﺔ ﻭﺇﺷﺎﺭﺍﺕ ﺍﳌﺮﻭﺭ ﻭﺍﳌﺼﺎﻋﺪ ﻭﻏﲑ ﺫﻟﻚ .ﻗﺒﻞ ﻇﻬﻮﺭ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ،
اﻟﻔﺼﻞ اﻷول ٣٦
ﻛﺎﻧﺖ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﺍﻷﺧﺮﻯ )ﻣﺜﻞ ﻟﻐﺎﺕ Fostranﻭ Pascalﻭ Basicﻭ (Cﺗﺮﻛﺰ ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻋﻠﻰ
ﺍﻷﻓﻌﺎﻝ ﺃﻭ ﺍﻹﺟﺮﺍﺀﺍﺕ ﻋﻮﺿﹰﺎ ﻋﻦ ﺍﻷﲰﺎﺀ ﺃﻭ ﺍﻷﻏﺮﺍﺽ .ﻛﺎﻥ ﺍﳌﱪﳎﻮﻥ ﻳﺮﻛﺰﻭﻥ ﰲ ﻋﻤﻠﻬﻢ ﻋﻠﻰ
ﺍﻷﻓﻌﺎﻝ ﺿﻤﻦ ﻋﺎﱂ ﻣﻠﻲﺀ ﺑﺎﻷﻏﺮﺍﺽ .ﺍﻧﻌﻜﺲ ﺫﻟﻚ ﻋﻠﻰ ﻃﺮﻳﻘﺔ ﻛﺘﺎﺑﺘﻬﻢ ﻟﻠﱪﺍﻣﺞ .ﻭﻟﻜﻦ ﺑﻌﺪ ﻇﻬﻮﺭ
ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻣﺜﻞ ﻟﻐﱵ C++ﻭ ،Javaﺗﺎﺑﻊ ﺍﳌﱪﳎﻮﻥ ﺃﺳﻠﻮﺏ ﺣﻴﺎﻬﺗﻢ ﺍﻟﻌﺎﺩﻱ ﺿﻤﻦ
ﻋﺎﱂ ﻣﻠﻲﺀ ﺑﺎﻷﻏﺮﺍﺽ ﻭﺃﺻﺒﺢ ﲟﻘﺪﻭﺭﻫﻢ ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺑﺸﻜﻞ ﺃﻛﺜﺮ ﺳﻬﻮﻟﺔ ﻭﻋﻔﻮﻳﺔ.
ﻳﻌﺘﱪ ﺫﻟﻚ ﻃﺮﻳﻘﺔ ﻃﺒﻴﻌﻴﺔ ﺇﺫﺍ ﻣﺎ ﻗﻮﺭﻧﺖ ﻣﻊ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﺍﻹﺟﺮﺍﺋﻴﺔ ،ﻭﻟﻘﺪ ﻛﺎﻥ ﰲ ﺫﻟﻚ ﺯﻳﺎﺩﺓ
ﺍﻹﻧﺘﺎﺟﻴﺔ ﺍﻟﱪﳎﻴﺔ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ.
ﺗﻜﻤﻦ ﺍﳌﺸﻜﻠﺔ ﺍﻟﺮﺋﻴﺴﻴﺔ ﻟﻠﱪﳎﺔ ﺍﻹﺟﺮﺍﺋﻴﺔ ﰲ ﻗﺼﻮﺭ ﻫﺬﺍ ﺍﻷﺳﻠﻮﺏ ﰲ ﻋﻜﺲ ﺍﻟﻌﺎﱂ ﺍﳋﺎﺭﺟﻲ ﺿﻤﻦ
ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﱪﳎﻴﺔ ﺍﳌﺨﺘﻠﻔﺔ ﺍﳌﺆﻟﻔﺔ ﻟﻠﻨﻈﺎﻡ ﺍﳌﺮﺍﺩ ﺗﻄﻮﻳﺮﻩ .ﻭﻳﺆﺩﻱ ﺫﻟﻚ ﺇﱃ ﺧﻔﺾ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺇﻋﺎﺩﺓ
ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﱪﳎﻴﺔ ﻣﻊ ﺑﺮﺍﻣﺞ ﺃﺧﺮﻯ .ﻭﳚﺐ ﻋﻠﻰ ﺍﳌﱪﻣﺞ ﰲ ﺍﻟﻜﺜﲑ ﻣﻦ ﺍﳊﺎﻻﺕ ﺇﻋﺎﺩﺓ
ﻛﺘﺎﺑﺔ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺍﺕ ﻋﻨﺪ ﺍﻟﺒﺪﺀ ﺑﺘﻄﻮﻳﺮ ﺑﺮﻧﺎﻣﺞ ﺟﺪﻳﺪ.
ﻳﺸﻜﻞ ﺫﻟﻚ ﺇﺿﺎﻋﺔ ﻟﻠﻮﻗﺖ ﻭﺍﳌﺎﻝ ﺃﺛﻨﺎﺀ ﳏﺎﻭﻟﺔ ﺍﳌﱪﳎﲔ ﰲ ﻛﻞ ﻣﺮﺓ "ﺇﻋﺎﺩﺓ ﺍﺧﺘﺮﺍﻉ ﺍﻟﺪﻭﻻﺏ" .ﻋﻨﺪ
ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺗﻘﻨﻴﺔ ﺍﻟﻐﺮﺽ ،ﺗﺴﻤﻰ ﺍﻟﻮﺣﺪﺓ ﺍﻟﱪﳎﻴﺔ ﺑﺎﻟﺼﻒ " ."Classﻭﺇﺫﺍ ﻛﺎﻧﺖ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺓ ﻣﺼﻤﻤﺔ
ﻼ.
ﺟﻴﺪﹰﺍ ﻓﺈﻥ ﺫﻟﻚ ﻳﺴﺎﻋﺪ ﻋﻠﻰ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﺴﺘﻘﺒ ﹰ
ﻳﺴﺎﻋﺪ ﺍﺳﺘﺨﺪﺍﻡ ﻣﻜﺘﺒﺎﺕ ﺍﳌﻜﻮﻧﺎﺕ ﺍﻟﻘﺎﺑﻠﺔ ﻹﻋﺎﺩﺓ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻣﺜﻞ ﺻﻔﻮﻑ ﻣﺎﻳﻜﺮﻭﺳﻮﻓﺖ ﺍﻟﺘﺄﺳﻴﺴﻴﺔ
(MFC) Microsoft Foundation Classesﻭﺗﻠﻚ ﺍﳌﻨﺘﺠﺔ ﻣﻦ ﻗﺒﻞ ﺷﺮﻛﺔ Rogue Waveﻭﻏﲑﻫﺎ ﻣﻦ ﺍﳌﻜﺘﺒﺎﺕ ﺍﻟﱵ
ﻗﺪﻣﺘﻬﺎ ﺷﺮﻛﺎﺕ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ،ﻋﻠﻰ ﺍﻟﺘﻘﻠﻴﻞ ﺇﱃ ﺣﺪ ﻛﺒﲑ ﻣﻦ ﺟﻬﻮﺩ ﺍﻟﺘﻄﻮﻳﺮ ﺍﳌﻄﻠﻮﺑﺔ ﻟﺒﻨﺎﺀ ﺑﻌﺾ ﺃﻧﻮﺍﻉ
ﺍﻷﻧﻈﻤﺔ )ﻣﻘﺎﺭﻧﺔ ﻣﻊ ﺍﳉﻬﻮﺩ ﺍﳌﻄﻠﻮﺑﺔ ﻹﻋﺎﺩﺓ ﺍﺧﺘﺮﺍﻉ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ ﰲ ﺍﳌﺸﺎﺭﻳﻊ ﺍﳉﺪﻳﺪﺓ(.
ﺗﺸﲑ ﺑﻌﺾ ﺍﳌﺆﺳﺴﺎﺕ ﻭﺍﳌﻨﻈﻤﺎﺕ ﺇﱃ ﺃﻥ ﺍﻻﺳﺘﻔﺎﺩﺓ ﻣﻦ ﻗﺎﺑﻠﻴﺔ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﱪﳎﻴﺎﺕ ﻟﻴﺴﺖ ﰲ
ﻭﺍﻗﻊ ﺍﻷﻣﺮ ﺍﻟﻔﺎﺋﺪﺓ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻷﻭﱃ ﺍﻟﱵ ﳓﺼﻞ ﻋﻠﻴﻬﺎ ﺑﻔﻀﻞ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ .ﻭﺇﳕﺎ
ﳝﻜﻦ ﺃﻥ ﻧﺮﻯ ﻫﺬﻩ ﺍﻟﻔﺎﺋﺪﺓ ﰲ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﻓﻬﻢ ﻭﺍﺳﺘﻴﻌﺎﺏ ﺍﻷﻧﻈﻤﺔ ﺍﳌﻄﻮﺭﺓ .ﻭﻳﻨﻌﻜﺲ ﺫﻟﻚ ﺑﺎﻟﺘﺎﱄ ﰲ
ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺻﻴﺎﻧﺔ ﻭﺗﻌﺪﻳﻞ ﻭﺗﺪﻗﻴﻖ ﺍﻟﱪﳎﻴﺎﺕ ﻋﻨﺪ ﺍﳊﺎﺟﺔ ﻟﺬﻟﻚ ﺑﻜﻞ ﺳﻬﻮﻟﺔ ﻭﺗﻨﻈﻴﻢ .ﺇﻥ ﻟﺬﻟﻚ ﺩﻻﻟﺔ
ﻋﻈﻴﻤﺔ ﺧﺎﺻﺔ ﺇﺫﺍ ﻋﻠﻤﻨﺎ ﺃﻥ ﺍﻟﺪﺭﺍﺳﺎﺕ ﺗﺪﻝ ﻋﻠﻰ ﺃﻥ ﺣﻮﺍﱄ 80%ﻣﻦ ﻛﻠﻔﺔ ﺑﻨﺎﺀ ﺍﻟﱪﳎﻴﺎﺕ ﻟﻴﺴﺖ
ﻣﺮﺗﺒﻄﺔ ﲜﻬﻮﺩ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻷﻭﱃ ﻭﺇﳕﺎ ﺑﻌﻤﻠﻴﺎﺕ ﻣﺘﺎﺑﻌﺔ ﺍﻟﺘﻘﻴﻴﻢ ﻭﺍﻟﺼﻴﺎﻧﺔ ﺍﻟﱵ ﲤﺮ ﻬﺑﺎ ﺍﻟﱪﳎﻴﺎﺕ ﻃﻴﻠﺔ ﻓﺘﺮﺓ
ﺍﺳﺘﺨﺪﺍﻣﻬﺎ.
ﻣﻬﻤﺎ ﺗﻜﻦ ﺍﻟﻔﻮﺍﺋﺪ ﺍﻟﱵ ﳝﻜﻦ ﺃﻥ ﳒﻨﻴﻬﺎ ﻣﻦ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ،ﻓﺈﻧﻪ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻬﻧﺎ ﺳﺘﻜﻮﻥ
ﺍﻟﻄﺮﻳﻘﺔ ﺍﳌﺜﻠﻰ ﻟﻠﻌﻤﻞ ﺍﻟﱪﳎﻲ ﺧﻼﻝ ﺍﻟﻌﻘﻮﺩ ﺍﻟﺘﺎﻟﻴﺔ.
ﺗﻜﻤﻦ ﺍﳌﻴﺰﺓ ﺍﻟﺮﺋﻴﺴﻴﺔ ﰲ ﺇﻧﺸﺎﺋﻚ ﻟﻨﺼﻮﺻﻚ ﺍﻟﱪﳎﻴﺔ ﰲ ﻣﻌﺮﻓﺘﻚ ﺍﳉﻴﺪﺓ ﳍﺎ ﻭﻗﺪﺭﺗﻚ ﺑﺎﻟﺘﺎﱄ ﻋﻠﻰ
ﻼ ﻭﺑﺬﻟﺖ ﺟﻬﺪﹰﺍ ﻛﺒﲑﹰﺍ ﻟﺘﻄﻮﻳﺮ ﻫﺬﻩ ﺍﻟﱪﺍﻣﺞﺗﻔﺤﺼﻬﺎ .ﻭﻟﻜﻦ ﻻﺑﺪ ﻭﺃﻧﻚ ﺳﺘﻜﻮﻥ ﻗﺪ ﺿﻴﻌﺖ ﻭﻗﺘﹰﺎ ﻃﻮﻳ ﹰ
ﺍﳉﺪﻳﺪﺓ.
٣٧ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
<<
]< <íéÖ^nÚ<C++<ØÛÂ<íòée<<V1-1<ØÓÖ
ﻬﺗﺪﻑ ﺍﳌﺮﺣﻠﺔ ﺍﻷﻭﱃ ﺇﱃ ﻛﺘﺎﺑﺔ ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ ﻭﳝﻜﻦ ﺃﻥ ﻳﺘﻢ ﺫﻟﻚ ﺑﻮﺍﺳﻄﺔ ﳏﺮﺭ ﻟﻠﻨﺼﻮﺹ ﺍﻟﺬﻱ
ﻳﺴﺘﺨﺪﻣﻪ ﺍﳌﱪﻣﺞ ﻟﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﳎﻪ ﺑﻠﻐﺔ C++ﻭﺍﻟﻘﻴﺎﻡ ﺑﺎﻟﺘﺼﺤﻴﺤﺎﺕ ﰲ ﺣﺎﻝ ﺍﻟﻀﺮﻭﺭﺓ .ﺑﻌﺪﻫﺎ ﻳﺘﻢ
ﲣﺰﻳﻦ ﺍﻟﱪﻧﺎﻣﺞ ﻋﻠﻰ ﻭﺣﺪﺓ ﲣﺰﻳﻦ ﺛﺎﻧﻮﻳﺔ ﻣﺜﻞ ﺍﻷﻗﺮﺍﺹ .ﻧﻌﻄﻲ ﻋﺎﺩ ﹰﺓ "ﺑﺮﺍﻣﺞ C++ﺃﲰﺎﺀ" ﺗﻨﺘﻬﻲ
ﺑﺎﻹﻣﺘﺪﺍﺩ ) .Cﻻﺣﻆ ﺃﻥ Cﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﺣﺮﻑ ﻛﺒﲑ .ﰲ ﺑﻌﺾ ﺑﻴﺌﺎﺕ ﺍﻟﻌﻤﻞ ﺍﻷﺧﺮﻯ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ
ﺍﻣﺘﺪﺍﺩﺍﺕ ﺃﺧﺮﻯ ﻣﺜﻞ .cppﺃﻭ ..cxxﺍﻧﻈﺮ ﺍﳌﺮﺍﺟﻊ ﺍﳌﺮﺍﻓﻘﺔ ﻟﺒﻴﺌﺔ ﻋﻤﻠﻚ ﺍﳋﺎﺻﺔ ﺑـ C++ﻣﻦ ﺃﺟﻞ
ﺍﳌﺰﻳﺪ ﻣﻦ ﺍﳌﻌﻠﻮﻣﺎﺕ( .ﲢﺖ ،Unixﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﳏﺮﺭﻱ ﺍﻟﻨﺼﻮﺹ viﻭ emacsﺑﺸﻜﻞ ﻛﺒﲑ ﰲ ﺣﲔ
ﲢﺘﻮﻱ ﺑﺮﳎﻴﺎﺕ C++ﻣﺜﻞ Borland C++ﻭ Microsoft C/C++ﺍﳋﺎﺻﺔ ﺑﺎﳊﻮﺍﺳﺐ ﺍﻟﺸﺨﺼﻴﺔ ﻋﻠﻰ
ﳏﺮﺭﺍﺕ ﻟﻠﻨﺼﻮﺹ ﺗﻨﻀﻮﻱ ﺿﻤﻦ ﺑﻴﺌﺔ ﺍﻟﻌﻤﻞ ﻭﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ .ﳓﻦ ﻧﻔﺘﺮﺽ ﺃﻥ ﺍﻟﻘﺎﺭﺉ ﻳﻌﺮﻑ ﻛﻴﻒ
ﻳﻘﻮﻡ ﺑﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﳎﻪ ﺑﺎﺳﺘﺨﺪﺍﻡ ﳏﺮﺭ ﻟﻠﻨﺼﻮﺹ.
C++ ﻟﻠﱪﻧﺎﻣﺞ .ﻓﻴﻘﻮﻡ ﺍﳌﺘﺮﺟﻢ ﺑﺘﺮﲨﺔ ﺑﺮﻧﺎﻣﺞ ﺍﻟـ Compile ﻳﻘﻮﻡ ﺍﳌﱪﻣﺞ ﺑﻌﺪﻫﺎ ﺑﻄﻠﺐ ﺃﻣﺮ ﺍﻟﺘﺮﲨﺔ
٣٩ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ )ﺍﻟﱵ ﺗﺴﻤﻰ ﺃﺣﻴﺎﻧﹰﺎ .(object codeﻗﺒﻞ ﺍﻟﺒﺪﺀ ﲟﺮﺣﻠﺔ ﺍﻟﺘﺮﲨﺔ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻣﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ
ﺍﻟﺘﺮﲨﺔ ﺍﻟﱵ ﻬﺗﺪﻑ ﺇﱃ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺃﻭﺍﻣﺮ ﺧﺎﺻﺔ ﺗﺴﻤﻰ ﺑﺘﻮﺟﻴﻬﺎﺕ ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ Preprocessor
.directivesﲢﺪﺩ ﻫﺬﻩ ﺍﻟﺘﻮﺟﻴﻬﺎﺕ ﲨﻠﺔ ﻣﻦ ﺍﳌﻌﺎﳉﺎﺕ ﻭﺍﻹﺟﺮﺍﺀﺍﺕ ﺍﻟﻮﺍﺟﺐ ﺗﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ ﻧﺺ
ﺍﻟﱪﻧﺎﻣﺞ ﻗﺒﻞ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺮﲨﺔ ﺍﳊﻘﻴﻘﻴﺔ .ﻣﻦ ﺑﲔ ﻫﺬﻩ ﺍﻹﺟﺮﺍﺀﺍﺕ ،ﳒﺪ ﻋﺎﺩ ﹰﺓ ﻋﻤﻠﻴﺎﺕ ﺍﻻﺣﺘﻮﺍﺀ ﻟﻨﺼﻮﺹ
ﻣﻠﻔﺎﺕ ﺃﺧﺮﻯ ﺿﻤﻦ ﺍﳌﻠﻒ ﺍﳌﻄﻠﻮﺏ ﺗﺮﲨﺘﻪ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺍﻟﻘﻴﺎﻡ ﲜﻤﻠﺔ ﻣﻦ ﺍﻟﺘﻌﻮﻳﻀﺎﺕ ﻟﻌﺒﺎﺭﺍﺕ ﺿﻤﻦ
ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ .ﺳﻮﻑ ﻧﻨﺎﻗﺶ ﰲ ﺍﻟﻔﺼﻮﻝ ﺍﻷﻭﱃ ﺍﻟﺘﺎﻟﻴﺔ ﻣﻌﻈﻢ ﺗﻮﺟﻴﻬﺎﺕ ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ ﰲ ﺣﲔ ﳝﻜﻦ
ﺃﻥ ﳒﺪ ﺣﻮﳍﺎ ﰲ ﺍﳌﻠﺤﻘﺎﺕ ﺗﻔﺼﻴﻼﺕ ﺃﺧﺮﻯ ﲜﻤﻴﻊ ﺍﻟﺘﻮﺟﻴﻬﺎﺕ ﺍﳌﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ .ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺀ
ﻣﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ ﻣﻦ ﻗﺒﻞ ﺍﳌﺘﺮﺟﻢ ﻧﻔﺴﻪ ﻗﺒﻞ ﻋﻤﻠﻴﺔ ﲢﻮﻳﻞ ﺍﻟﱪﻧﺎﻣﺞ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ.
ﺗﺴﻤﻰ ﺍﳌﺮﺣﻠﺔ ﺍﻟﻼﺣﻘﺔ ﻟﺬﻟﻚ "ﲟﺮﺣﻠﺔ ﺍﻟﻮﺻﻞ" .linkingﻓﱪﺍﻣﺞ C++ﺗﺘﻀﻤﻦ ﺍﺳﺘﺪﻋﺎﺀﺍﺕ ﻟﺘﻮﺍﺑﻊ ﰎ
ﺗﻌﺮﻳﻔﻬﺎ ﰲ ﻣﻜﺎﻥ ﺁﺧﺮ ﻣﺜﻞ ﺍﳌﻜﺘﺒﺎﺕ ﺍﳌﻌﻴﺎﺭﻳﺔ ﺃﻭ ﺍﳌﻜﺘﺒﺎﺕ ﺍﳋﺎﺻﺔ ﲟﺠﻤﻮﻋﺔ ﻣﻦ ﺍﳌﱪﳎﲔ ﺍﻟﻌﺎﻣﻠﲔ
ﺿﻤﻦ ﻣﺸﺮﻭﻉ ﻣﻌﲔ .ﳛﺘﻮﻱ ﺍﻟﻨﺺ ﺍﻟﻨﺎﺗﺞ ﲟﻮﺟﺐ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺮﲨﺔ ﻋﻠﻰ "ﻓﺠﻮﺍﺕ" ﺑﺴﺒﺐ ﻫﺬﻩ ﺍﻷﺟﺰﺍﺀ
ﺍﻟﻨﺎﻗﺼﺔ .ﻳﻘﻮﻡ ﺍﻟﻮﺍﺻﻞ linkerﺑﻮﺻﻞ ﺍﳌﻠﻒ ﺍﻟﺴﺎﺑﻖ ﻣﻊ ﻧﺼﻮﺹ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﻨﺎﻗﺼﺔ ﻣﻦ ﺃﺟﻞ ﺍﻟﻮﺻﻮﻝ ﺇﱃ
ﺻﻮﺭﺓ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻨﻔﻴﺬ )ﺩﻭﻥ ﺃﻳﺔ ﺃﺟﺰﺍﺀ ﻧﺎﻗﺼﺔ(.
ﺇﺫﺍ ﲤﺖ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺮﲨﺔ ﻭﺍﻟﻮﺻﻞ ﻟﻠﱪﻧﺎﻣﺞ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ﻳﻨﺘﺞ ﻟﺪﻳﻨﺎ ﻣﻠﻔﹰﺎ ﺗﻨﻔﻴﺬﻳﹰﺎ .ﻳﺸﻜﻞ ﻫﺬﺍ ﺍﳌﻠﻒ
ﺍﻟﺼﻮﺭﺓ ﺍﻟﺘﻨﻔﻴﺬﻳﺔ ﻟﱪﻧﺎﳎﻨﺎ .Welcome.c
ﺗﺘﻤﺜﻞ ﺍﳋﻄﻮﺓ ﺍﻟﺘﺎﻟﻴﺔ ﰲ ﻣﺮﺣﻠﺔ ﺍﻟﺸﺤﻦ ،loadingﻓﻘﺒﻞ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﳚﺐ ﺃﻭ ﹰﻻ ﻭﺿﻌﻪ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭﺫﻟﻚ
ﻳﺘﻢ ﺑﻮﺍﺳﻄﺔ ﺍﻟﺸﺎﺣﻦ loaderﺍﻟﺬﻱ ﻳﻘﻮﻡ ﺑﺄﺧﺬ ﺍﳌﻠﻒ ﺍﻟﺘﻨﻔﻴﺬﻱ ﻭﻳﻨﻘﻠﻪ ﺇﱃ ﺍﻟﺬﺍﻛﺮﺓ .ﺃﺧﲑﺍﹰ ،ﻳﺒﺪﺃ ﺍﳊﺎﺳﺐ
ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﺗﻌﻠﻴﻤﺔ ﻓﺘﻌﻠﻴﻤﺔ ﲢﺖ ﺇﺷﺮﺍﻑ ﻭﺳﻴﻄﺮﺓ ﻭﺣﺪﺓ ﺍﻟﺘﺤﻜﻢ ﻭﺍﳌﻌﺎﳉﺔ .CPU
ﻣﻦ ﺍﻟﻨﺎﺩﺭ ﺃﻥ ﺗﻌﻤﻞ ﺍﻟﱪﺍﻣﺞ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ﻣﻦ ﺍﶈﺎﻭﻟﺔ ﺍﻷﻭﱃ ﺣﻴﺚ ﳝﻜﻦ ﺃﻥ ﺗﻔﺸﻞ ﺇﺣﺪﻯ ﺍﳌﺮﺍﺣﻞ
ﺍﻟﺴﺎﺑﻘﺔ ﺑﺴﺒﺐ ﻋﺪﺓ ﺃﻧﻮﺍﻉ ﻣﻦ ﺍﻷﺧﻄﺎﺀ ﺍﻟﱵ ﺳﻮﻑ ﻧﻨﺎﻗﺸﻬﺎ ﻣﻦ ﺧﻼﻝ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ .ﻋﻠﻰ ﺳﺒﻴﻞ
ﺍﳌﺜﺎﻝ ،ﳝﻜﻦ ﺃﻥ ﳛﺎﻭﻝ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﻘﻴﺎﻡ ﺑﻌﻤﻠﻴﺔ ﺗﻘﺴﻴﻢ ﻋﻠﻰ ﺻﻔﺮ )ﻭﻫﻲ ﻋﻤﻠﻴﺔ ﻏﲑ ﺻﺤﻴﺤﺔ ﺑﺎﻟﻨﺴﺒﺔ
ﻟﻠﺤﻮﺍﺳﺐ ﻛﻤﺎ ﻫﻮ ﺍﳊﺎﻝ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﻨﻄﻖ ﺍﳊﺴﺎﰊ( ﳑﺎ ﻳﺪﻓﻊ ﺍﳊﺎﺳﺐ ﺇﱃ ﻃﺒﺎﻋﺔ ﺭﺳﺎﻟﺔ ﺧﻄﺄ .ﺑﻌﺪﻫﺎ
ﳚﺐ ﻋﻠﻰ ﺍﳌﱪﻣﺞ ﺍﻟﻌﻮﺩﺓ ﺇﱃ ﻣﺮﺣﻠﺔ ﻛﺘﺎﺑﺔ ﺍﻟﱪﻧﺎﻣﺞ ﻭﲢﺮﻳﺮﻩ ﻟﻠﻘﻴﺎﻡ ﺑﺎﻟﺘﻌﺪﻳﻼﺕ ﺍﻟﻼﺯﻣﺔ ﻭﻟﻴﻤﺮ ﺑﻌﺪ
ﺫﻟﻚ ﺑﺎﳌﺮﺍﺣﻞ ﺍﳌﺘﺒﻘﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻣﺮﺓ ﺃﺧﺮﻯ ﺣﱴ ﻳﺘﺤﻘﻖ ﻣﻦ ﻫﺬﻩ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺗﻌﻤﻞ ﺑﺸﻜﻞ ﺳﻠﻴﻢ.
أﺥﻄﺎء ﺑﺮﻣﺠﻴﺔ ﺵﺎﺉﻌﺔ 1-1
ﺕﺤﺪث اﻷﺥﻄﺎء ﻣﺜﻞ ﺕﻠﻚ اﻟﻨﺎﺕﺠﺔ ﻋﻠﻰ ﻋﻤﻠﻴﺔ اﻟﺘﻘﺴﻴﻢ ﻋﻠﻰ ﺹﻔﺮ ﻋﻨﺪ ﺕﻨﻔﻴﺬ
اﻟﺒﺮﻧﺎﻣﺞ ﻟﺬﻟﻚ ﺕﺴﻤﻰ هﺬﻩ اﻷﺥﻄﺎء " ﺑﺄﺥﻄﺎء زﻣﻦ اﻟﺘﻨﻔﻴﺬ" run-time error
أو .execution-time errorsیُﻌﺪ ﺥﻄﺄ اﻟﺘﻘﺴﻴﻢ ﻋﻠﻰ ﺹﻔﺮ ﻣﻦ اﻷﺥﻄﺎء اﻟﻘﺎﺕﻠﺔ
7
Fatal errorsأي أن هﺬا اﻟﺨﻄﺄ یﺴﺒﺐ إﻧﺘﻬﺎء اﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺵﺮة ﺑﺪون إﺕﻤﺎم
ﻣﻬﺎﻣﻪ ﺑﻨﺠﺎح .ﻓﻲ ﺣﻴﻦ یﺘﺎﺑﻊ اﻟﺒﺮﻧﺎﻣﺞ ﺕﻨﻔﻴﺬﻩ ﺣﺘﻰ اﻟﻨﻬﺎیﺔ ﻣﻊ اﻷﺥﻄﺎء ﻏﻴﺮ
اﻟﻘﺎﺕﻠﺔ وﻟﻜﻦ یﻌﻄﻲ ﻧﺘﺎﺋﺞ ﻏﻴﺮ ﺹﺤﻴﺤﺔ.
اﻟﻔﺼﻞ اﻷول ٤٠
ﺗﻘﻮﻡ ﻣﻌﻈﻢ ﺑﺮﺍﻣﺞ C++ﺑﺄﺧﺬ ﻭ/ﺃﻭ ﺇﻋﻄﺎﺀ ﻣﻌﻄﻴﺎﺕ .ﻓﺒﻌﺾ ﺗﻮﺍﺑﻊ C++ﺗﺄﺧﺬ ﺩﺧﻠﻬﺎ ﻣﻦ ) Cinﻣﻦ
ﳎﺮﻯ ﺍﻟﺪﺧﻞ ﺍﳌﻌﻴﺎﺭﻱ standard input streamﻭﺗﻠﻔﻆ’’ ("see-inﺍﻟﺬﻱ ﻫﻮ ﻋﺎﻣ ﹰﺔ ﻋﺒﺎﺭﺓ ﻋﻦ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ
ﻟﻜﻦ ﳝﻜﻦ ﺭﺑﻄﻪ ﺑﺄﻱ ﺟﻬﺎﺯ ﺁﺧﺮ .ﻳﺘﻢ ﺇﺧﺮﺍﺝ ﺍﳌﻌﻄﻴﺎﺕ ﺇﱃ ) coutﺇﱃ ﳎﺮﻯ ﺍﳋﺮﺝ ﺍﳌﻌﻴﺎﺭﻱ standard
output streamﻭﺗﻠﻔﻆ ” (“see-outﺍﻟﺬﻱ ﻫﻮ ﻋﺎﺩﺓ ﻋﺒﺎﺭﺓ ﻋﻦ ﺷﺎﺷﺔ ﺍﳊﺎﺳﺐ ﻭﻟﻜﻦ ﳝﻜﻦ ﺭﺑﻄﻪ ﺇﱃ ﺃﻱ
ﺟﻬﺎﺯ ﺧﺮﺝ ﺁﺧﺮ .ﻓﻌﻨﺪﻣﺎ ﻧﻘﻮﻝ ﺃﻥ ﺑﺮﻧﺎﳎﹰﺎ ﻣﺎ ﻳﻘﻮﻡ ﺑﻄﺒﺎﻋﺔ ﻧﺘﺎﺋﺠﻪ ﻓﺈﻧﻨﺎ ﻧﻘﺼﺪ ﺑﺬﻟﻚ ﺃﻧﻪ ﻳﺘﻢ ﺇﻇﻬﺎﺭ
ﺍﻟﻨﺘﺎﺋﺞ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ .ﳝﻜﻦ ﺇﺧﺮﺍﺝ ﺍﻟﻨﺘﺎﺋﺞ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺃﺧﺮﻯ ﻣﺜﻞ ﺍﻷﻗﺮﺍﺹ ﺃﻭ ﺍﻟﻄﺎﺑﻌﺎﺕ .ﻳﻮﺟﺪ ﺃﻳﻀﹰﺎ
ﻣﺎ ﻳﺴﻤﻰ ﺑـ "ﳎﺮﻯ ﺍﻷﺧﻄﺎﺀ ﺍﳌﻌﻴﺎﺭﻱ" standard error streamﺍﻟﺬﻱ ﻧﺮﻣﺰ ﻟﻪ ﺑـ Cerrﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ
ﻋﺎﺩﺓ ﻣﻦ ﺃﺟﻞ ﺇﻇﻬﺎﺭ ﺭﺳﺎﺋﻞ ﺍﳋﻄﺄ )ﻭﻫﻮ ﻣﺮﺗﺒﻂ ﻋﺎﺩﺓ ﺑﺎﻟﺸﺎﺷﺔ( .ﻣﻦ ﺍﻟﺸﺎﺋﻊ ﺃﻥ ﻳﻘﻮﻡ ﺍﳌﱪﳎﻮﻥ ﺑﺈﺭﺳﺎﻝ
ﻣﻌﻄﻴﺎﺕ ﺍﳋﺮﺝ )ﺃﻱ ﺗﻮﺟﻴﻪ (coutﺇﱃ ﺃﻱ ﺟﻬﺎﺯ ﺁﺧﺮ ﻏﲑ ﺍﻟﺸﺎﺷﺔ ﺍﻟﱵ ﺗﺒﻘﻰ ﻣُﻮﺻّﻠﺔ ﻣﻊ cerrﻣﻦ ﺃﺟﻞ
ﺇﺧﺒﺎﺭ ﺍﳌﺴﺘﺨﺪﻡ ﺑﺎﻷﺧﻄﺎﺀ ﺍﻟﱵ ﲢﺪﺙ ﻣﺒﺎﺷﺮﺓ.
ﺻُﻤﻤﺖ ﺍﻟﺸﺒﻜﺔ ﻟﺘﻌﻤﻞ ﺑﺪﻭﻥ ﲢﻜﻢ ﻣﺮﻛﺰﻱ .ﻭﻫﺬﺍ ﻳﻌﲏ ﺃﻧﻪ ﰲ ﺣﺎﻝ ﺗﻌﻄﻞ ﺟﺰﺀ ﻣﻨﻬﺎ ،ﺗﺒﻘﻰ ﺑﻘﻴﺔ
ﺍﻷﺟﺰﺍﺀ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺗﻮﺟﻴﻪ ﺍﻟﻄﺮﻭﺩ ﻣﻦ ﺍﳌﺮﺳﻞ ﺇﱃ ﺍﳌﺴﺘﻘﺒﻞ ﻋﻦ ﻃﺮﻳﻖ ﻣﺴﺎﺭﺍﺕ ﺑﺪﻳﻠﺔ.
ﺃﺻﺒﺤﺖ ﺍﻟﱪﻭﺗﻮﻛﻮﻻﺕ ﺍﻟﱵ ﺍﺳﺘﺨﺪﻣﺖ ﰲ ﺷﺒﻜﺔ ARPA netﺗﻌﺮﻑ ﺑﺎﺳﻢ Transmission Control TCP
.Protocolﺿﻤﻦ ﺍﻟﱪﺗﻮﻛﻮﻝ TCPﺗﻮﺟﻴﻪ ﺍﻟﺮﺳﺎﺋﻞ ﻣﻦ ﺍﳌﺮﺳﻞ ﺇﱃ ﺍﳌﺴﺘﻘﺒﻞ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ﻭﺩﻭﻥ ﺃﺧﻄﺎﺀ.
ﻋﻠﻰ ﺍﻟﺘﻮﺍﺯﻱ ﻣﻊ ﺍﻟﺘﻄﻮﺭ ﺍﳌﺒﻜﺮ ﻟﺸﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ ،ﻛﺎﻧﺖ ﺗﻘﻮﻡ ﻣﻨﻈﻤﺎﺕ ﻋﺎﳌﻴﺔ ﺑﺘﻄﻮﻳﺮ ﺷﺒﻜﺎﻬﺗﺎ ﳊﺎﺟﺎﺕ
ﺩﺍﺧﻠﻴﺔ ﻣﺮﺗﺒﻄﺔ ﺑﺎﳌﻨﻈﻤﺔ ﻧﻔﺴﻬﺎ ﺃﻭ ﲝﺎﺟﺎﺕ ﺭﺑﻂ ﺑﲔ ﻫﺬﻩ ﺍﳌﻨﻈﻤﺎﺕ .ﺳﺎﻋﺪ ﺫﻟﻚ ﻋﻠﻰ ﻇﻬﻮﺭ ﺑﲎ ﻣﺮﻧﺔ
ﻭﺻﻠﺒﺔ ﺷﺒﻜﻴﺔ ﺷﺪﻳﺪﺓ ﺍﻟﺘﻨﻮﻉ .ﻭﻛﺎﻥ ﺍﻟﺘﺤﺪﻱ ﰲ ﺟﻌﻞ ﻫﺬﻩ ﺍﻟﺸﺒﻜﺎﺕ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺍﻻﺗﺼﺎﻝ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ.
ﻗﺎﻣﺖ ARPAﺑﺈﳒﺎﺯ ﺫﻟﻚ ﻣﻦ ﺧﻼﻝ ﺗﻄﻮﻳﺮﻫﺎ ﻟﻠﱪﻭﺗﻮﻛﻮﻝ (Internet Protocol) IPﺍﻟﺬﻱ ﺳﺎﻋﺪ ﻋﻠﻰ ﺑﻨﺎﺀ
ﺷﺒﻜﺔ ﻣﻦ ﺍﻟﺸﺒﻜﺎﺕ ،ﻭﺍﻟﱵ ﺗﺸﻜﻞ ﺣﺎﻟﻴﹰﺎ ﺍﻟﺒﻨﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻺﻧﺘﺮﻧﺖ ،ﺗُﻌﺮﻑ ﺍﺠﻤﻟﻤﻮﻋﺔ ﺍﳉﺎﻣﻌﺔ ﻟﻜﻼ
ﺍﻟﱪﻭﺗﻮﻛﻮﻟﲔ ﺍﻟﺴﺎﺑﻘﲔ ﺑﺎﺳﻢ .TCP/IP
ﻛﺎﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻹﻧﺘﺮﻧﺖ ﳏﺼﻮﺭﹰﺍ ﰲ ﺍﻟﺒﺪﺍﻳﺔ ﺿﻤﻦ ﺍﳉﺎﻣﻌﺎﺕ ﻭﺍﳌﺆﺳﺴﺎﺕ ﺍﻟﺒﺤﺜﻴﺔ .ﰒ ﺃﺻﺒﺢ ﺍﻟﻌﺴﻜﺮﻳﻮﻥ
ﺃﺣﺪ ﺃﻛﱪ ﺍﳌﺴﺘﺨﺪﻣﲔ ﳍﺎ .ﻗﺎﻣﺖ ﺑﻌﺪﻫﺎ ﺍﳊﻜﻮﻣﺔ ﺑﺎﻟﺴﻤﺎﺡ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻹﻧﺘﺮﻧﺖ ﻷﻏﺮﺍﺽ ﲡﺎﺭﻳﺔ .ﰲ
ﺍﻟﺒﺪﺍﻳﺔ ﻛﺎﻥ ﻫﻨﺎﻙ ﺍﺳﺘﻴﺎﺀ ﻣﻦ ﻗﺒﻞ ﺍﻟﻌﺴﻜﺮﻳﲔ ﻭﺍﻟﺒﺎﺣﺜﲔ ﺑﺴﺒﺐ ﺍﻟﻘﻴﺎﻡ ﻬﺑﺬﻩ ﺍﳋﻄﻮﺓ ،ﻷﻬﻧﻢ ﻛﺎﻧﻮﺍ
ﻳﻌﺘﻘﺪﻭﻥ ﺃﻥ ﺯﻣﻦ ﺍﻻﺳﺘﺠﺎﺑﺔ ﺳﻴﺘﺄﺛﺮ ﺑﺸﻜﻞ ﻛﺒﲑ ﺑﺴﺒﺐ ﺇﺷﺒﺎﻉ ﺍﻟﺸﺒﻜﺔ ﺑﻌﺪﺩ ﻛﺒﲑ ﻣﻦ ﺍﳌﺴﺘﺜﻤﺮﻳﻦ.
ﻟﻜﻦ ﺣﺪﺙ ﺍﻟﻌﻜﺲ ﻣﻦ ﺫﻟﻚ ﲤﺎﻣﹰﺎ .ﻻﺣﻆ ﻣﺪﺭﺍﺀ ﺍﻷﻋﻤﺎﻝ ﺃﻧﻪ ﳝﻜﻦ ﻟﻌﻤﻠﻴﺎﻫﻢ ﺃﻥ ﺗﻜﻮﻥ ﻣﻀﺒﻮﻃﺔ
ﻭﳝﻜﻦ ﳍﻢ ﺗﻘﺪﱘ ﺧﺪﻣﺎﺕ ﺟﺪﻳﺪﺓ ﻭﺃﻛﺜﺮ ﺟﻮﺩﺓ ﰲ ﺣﺎﻝ ﻗﺎﻣﻮﺍ ﺑﺎﺳﺘﺜﻤﺎﺭ ﺍﻟﺸﺒﻜﺔ ﺑﺸﻜﻞ ﻓﻌﺎﻝ ،ﳑﺎ ﺩﻓﻊ
ﺍﻟﻔﻌﺎﻟﻴﺎﺕ ﺍﻻﻗﺘﺼﺎﺩﻳﺔ ﺇﱃ ﺻﺮﻑ ﻣﺒﺎﻟﻎ ﻛﺒﲑﺓ ﻟﺘﻄﻮﻳﺮ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ ﻭﲢﺪﻳﺜﻬﺎ ،ﳑﺎ ﺃﻧﺘﺞ ﻣﻨﺎﻓﺴﺔ
ﺿﺎﺭﻳﺔ ﺑﲔ ﻣﺰﻭﺩﻱ ﺧﻄﻮﻁ ﺍﻻﺗﺼﺎﻝ ﻭﺍﻟﺒﲎ ﺍﻟﺼﻠﺒﺔ ﻭﺍﳌﺮﻧﺔ ﻟﻠﺘﺠﺎﻭﺏ ﻣﻊ ﻫﺬﺍ ﺍﻟﻄﻠﺐ ﺍﻟﻜﺒﲑ .ﺃﺩﻯ
ﺫﻟﻚ ﺇﱃ ﺯﻳﺎﺩﺓ ﻋﺮﺽ ﺍﳊﺰﻣﺔ bandwidthﺍﳌﺘﺎﺣﺔ ﻟﻼﺗﺼﺎﻝ ﻋﻠﻰ ﺍﻹﻧﺘﺮﻧﺖ ﺑﺸﻜﻞ ﺭﻫﻴﺐ ﻭﺗﻨﺎﻗﺼﺖ
ﺍﻷﺳﻌﺎﺭ ﺑﺸﻜﻞ ﺳﺮﻳﻊ ﺟﺪﹰﺍ.
ﺗﺎریﺦ ﺵﺒﻜﺔ اﻟﻮیﺐ اﻟﻌﺎﻟﻤﻴﺔ 17-1
ﺗﺴﻤﺢ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﳌﻴﺔ ﳌﺴﺘﺨﺪﻣﻲ ﺍﳊﻮﺍﺳﻴﺐ ﺑﺎﻟﺒﺤﺚ ﻭﺗﺼﻔﺢ ﻭﺛﺎﺋﻖ ﻣﺘﻌﺪﺩﺓ ﺍﻟﻮﺳﺎﺋﻂ )ﻣﺜﻞ
ﺍﻟﻮﺛﺎﺋﻖ ﺍﻟﻨﺼﻴﺔ ﻭﺗﻠﻚ ﺍﳌﺰﻭﺩﺓ ﺑﺎﻟﺮﺳﻮﻡ ﺍﻟﺒﻴﺎﻧﻴﺔ ﻭﺍﻟﺮﺳﻮﻡ ﺍﳌﺘﺤﺮﻛﺔ ﻭﻣﻠﻔﺎﺕ ﺍﻟﺼﻮﺕ ﻭﺍﻟﻔﻴﺪﻳﻮ( ﺫﺍﺕ
ﺍﻟﺼﻠﺔ .ﻭﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺗﻄﻮﻳﺮ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ ﻳﻌﻮﺩ ﺇﱃ ﺣﻮﺍﱄ ﺛﻼﺛﺔ ﻋﻘﻮﺩ ﻣﺎﺿﻴﺔ ﺃﻻ ﺃﻥ ﻇﻬﻮﺭ
ﺚ ﻧﺴﺒﻴﹰﺎ .ﻗﺎﻡ Tim Berners- Leeﰲ ) CERNﺍﳌﻨﻈﻤﺔ ﺍﻷﻭﺭﻭﺑﻴﺔ ﻟﻠﺒﺤﻮﺙ
ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﳌﻴﺔ ﺣﺪﻳ ﹲ
ﺍﻟﻨﻮﻭﻳﺔ( ﺑﺘﻄﻮﻳﺮ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﳌﻴﺔ ﻭﺍﻟﱪﻭﺗﻮﻛﻼﺕ ﺍﻟﱵ ﺗﺸﻜﻞ ﻋﻤﻮﺩﻫﺎ ﺍﻟﻔﻘﺮﻱ ﻋﺎﻡ .1990
ﻼ ﺗﺴﺠﻴﻞ ﺍﻹﻧﺘﺮﻧﺖ ﻭﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﳌﻴﺔ ﻣﻦ ﺩﻭﻥ ﺷﻚ ﻋﻠﻰ ﺃﻬﻧﻤﺎ ﻣﻦ ﻻﺑﺪ ﻣﻦ ﺃﻧﻪ ﺳﻴﺠﺮﻱ ﻣﺴﺘﻘﺒ ﹰ
ﺃﻫﻢ ﺍﻹﳒﺎﺯﺍﺕ ﺍﻟﱵ ﻗﺎﻣﺖ ﻬﺑﺎ ﺍﻟﺒﺸﺮﻳﺔ .ﰲ ﺍﳌﺎﺿﻲ ،ﻛﺎﻥ ﳚﺮﻱ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﻋﻠﻰ ﺍﳊﻮﺍﺳﻴﺐ
ﺍﳌﻨﻔﺮﺩﺓ Stand- alone Computersﻏﲑ ﺍﳌﺘﺼﻠﺔ ﺑﻐﲑﻫﺎ ﻣﻦ ﺍﳊﻮﺍﺳﻴﺐ .ﺃﻣﺎ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﳊﺎﻟﻴﺔ ﻓﻴﻤﻜﻦ
ﺗﻄﻮﻳﺮﻫﺎ ﻟﺘﻘﻮﻡ ﺑﺎﻻﺗﺼﺎﻝ ﻭﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺌﺎﺕ ﺍﳌﻼﻳﲔ ﻣﻦ ﺍﳊﻮﺍﺳﻴﺐ ﺍﳌﻨﺘﺸﺮﺓ ﰲ ﺍﻟﻌﺎﱂ ﻛﻠﻪ .ﺗﻘﻮﻡ
ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ ﺑﺎﳌﺰﺝ ﺑﲔ ﺗﻘﻨﻴﺎﺕ ﺍﳊﺎﺳﺐ ﻭﺍﻻﺗﺼﺎﻝ ﳑﺎ ﻳﺴﺎﻋﺪ ﻋﻠﻰ ﺗﺴﻬﻴﻞ ﻋﻤﻠﻨﺎ .ﻛﻤﺎ ﺃﻬﻧﺎ ﲡﻌﻞ
٤٣ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﺍﳌﻌﻠﻮﻣﺎﺕ ﻣﺘﺎﺣﺔ ﺁﻧﻴﹰﺎ ﻭﺑﺸﻜﻞ ﻣﻼﺋﻢ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻌﺎﱂ ﺃﲨﻊ .ﺗﺴﺎﻫﻢ ﺃﻳﻀﹰﺎ ﰲ ﺗﻮﻓﲑ ﺍﻟﻔﺮﺻﺔ ﻟﻸﻓﺮﺍﺩ
ﻭﺍﻷﻋﻤﺎﻝ ﺍﻟﺼﻐﲑﺓ ﺑﺎﻻﻧﺘﺸﺎﺭ ﻋﺎﳌﻴﹰﺎ .ﻓﻬﺬﻩ ﺍﻟﺸﺒﻜﺔ ﺗﺴﺎﻫﻢ ﺣﺘﻤﹰﺎ ﰲ ﺗﻐﻴﲑ ﻃﺮﻳﻘﺔ ﺗﻨﻔﻴﺬ ﺍﻷﻋﻤﺎﻝ
ﻭﺇﳒﺎﺯﻫﺎ .ﳝﻜﻦ ﻟﻠﻨﺎﺱ ﺍﻟﺒﺤﺚ ﻋﻦ ﺃﻓﻀﻞ ﺍﻷﺳﻌﺎﺭ ﻷﻱ ﻣﻨﺘﺞ ﺃﻭ ﻷﻱ ﺧﺪﻣﺔ .ﻛﻤﺎ ﳝﻜﻦ ﺃﻳﻀﹰﺎ
ﻟﻠﺒﺎﺣﺜﲔ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﺁﺧﺮ ﻣﺎ ﰎ ﺍﻟﺘﻮﺻﻞ ﺇﻟﻴﻪ ﻋﺎﳌﻴﹰﺎ .ﺗﺘﻀﻤﻦ ﻫﺬﻩ ﺍﻟﻄﺒﻌﺔ ﻣﻦ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺍﻟﻔﺼﻞ
ﺍﻟﺴﺎﺩﺱ ﻋﺸﺮ :ﺑﺮﳎﺔ ﺍﻟﻮﻳﺐ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟـ (Web Programming With CGI) CGIﺍﻟﺬﻱ ﺳﻴﺴﺎﻋﺪﻙ
ﺣﺘﻤﹰﺎ ﻋﻠﻰ ﺗﻄﻮﻳﺮ ﺗﻄﺒﻴﻘﺎﺕ ﳝﻜﻦ ﺗﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﳌﻴﺔ.
ﺑﺮﳎﻴﺔ ﺿﻴﻘﺔ ﺍﻷﻓﻖ ﻷﻬﻧﺎ ﲡﻌﻞ ﺍﻟﱪﺍﻣﺞ ﺻﻌﺒﺔ ﺍﻟﻘﺮﺍﺀﺓ ﻏﲑ ﻣﻀﻤﻮﻧﺔ ﺍﻟﺴﻠﻮﻙ ﻭﺻﻌﺒﺔ ﺍﻟﻔﺤﺺ ﻭﺍﻟﺘﺪﻗﻴﻖ
ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺍﻟﺼﻌﻮﺑﺔ ﺍﻟﻜﺒﲑﺓ ﳌﻼﺀﻣﺘﻬﺎ ﻣﻊ ﺗﻐﲑ ﺍﳌﺘﻄﻠﺒﺎﺕ .ﰲ ﻛﺘﺎﺑﻨﺎ ﻫﺬﺍ ﺍﳌﻌﺪ ﻟﻠﻤﱪﳎﲔ ﺍﳌﺒﺘﺪﺋﲔ،
ﻧﺆﻛﺪ ﻋﻠﻰ ﺿﺮﻭﺭﺓ ﻭﺿﻮﺡ ﺍﻟﱪﺍﻣﺞ ﻭﺍﻟﱵ ﺗُﻌﺪ ﺃﻭﻝ ﺍﻟﻌﺎﺩﺍﺕ ﺍﻟﱪﳎﻴﺔ ﺍﳉﻴﺪﺓ ﺍﻟﱵ ﻧﻨﺼﺢ ﻬﺑﺎ.
ﻋﺎدات ﺑﺮﻣﺠﻴﺔ ﺝﻴﺪة 1-1
ﻻﺑﺪ ﺃﻧﻚ ﲰﻌﺖ ﺃﻥ ﺍﻟﻠﻐﺘﲔ Cﻭ C++ﳘﺎ ﻟﻐﺘﺎﻥ ﻗﺎﺑﻠﺘﺎﻥ ﻟﻠﻨﻘﻞ ﻭﺃﻥ ﺍﻟﱪﺍﻣﺞ ﺍﳌﻜﺘﻮﺑﺔ ﻬﺑﻤﺎ ﳝﻜﻦ ﺃﻥ
ﺗﻨﻔﺬ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﺘﻌﺪﺩﺓ ﻣﻦ ﺍﳊﺎﺳﺒﺎﺕ .ﻟﻜﻦ ﻣﻔﻬﻮﻡ ﺍﶈﻤﻮﻟﻴﺔ ﻫﻮ ﻣﻔﻬﻮﻡ ﳏﲑ .ﲢﺘﻮﻱ ﺍﻟﻮﺛﺎﺋﻖ ﺍﳌﻌﻴﺎﺭﻳﺔ
ﻟﻠﻐﺔ (AM90) ANSI Cﻋﻠﻰ ﻗﺎﺋﻤﺔ ﻣﻄﻮﻟﺔ ﺣﻮﻝ ﻣﻮﺍﺿﻴﻊ ﺍﶈﻤﻮﻟﻴﺔ ،ﻭﻟﻘﺪ ﺟﺮﻯ ﺗﺄﻟﻴﻒ ﻛﺘﺐ ﻛﺎﻣﻠﺔ
ﺗﺘﺤﺪﺙ ﻋﻦ ﻣﻮﺿﻮﻉ ﺍﶈﻤﻮﻟﻴﺔ.
ﺗﻠﻤﻴﺢ ﻟﺘﺤﺴﻴﻦ اﻟﻤﺤﻤﻮﻟﻴﺔ 3-1
ﺑﺎﻟﺮﻏﻢ ﻣﻦ أﻧﻪ ﻣﻦ اﻟﻤﻤﻜﻦ آﺘﺎﺑﺔ ﺑﺮاﻣﺞ ﻗﺎﺑﻠﺔ ﻟﻠﻨﻘﻞ إﻻ أن هﻨﺎك اﻟﻌﺪیﺪ ﻣﻦ
اﻟﻤﺸﺎآﻞ ﺑﻴﻦ اﻟﻨﺴﺦ اﻟﻤﺨﺘﻠﻔﺔ ﻟﻤﺘﺮﺝﻤﺎت Cو C++وﺑﻴﻦ اﻷﻧﻮاع اﻟﻤﺨﺘﻠﻔﺔ
ﻟﻠﺤﺎﺳﺒﺎت اﻟﺘﻲ ﺕﺠﻌﻞ ﻣﻦ ﻣﺴﺄﻟﺔ اﻟﻤﺤﻤﻮﻟﻴﺔ ﻣﺴﺄﻟﺔ ﺹﻌﺒﺔ اﻟﺤﻞ .ﻓﺒﻜﻞ
ﺑﺴﺎﻃﺔ اﺳﺘﺨﺪام ﻟﻐﺘﻲ Cو C++ﻟﻜﺘﺎﺑﺔ اﻟﺒﺮاﻣﺞ ﻻ یﻀﻤﻦ ﻗﺎﺑﻠﻴﺔ ﻧﻘﻠﻬﺎ .ﻓﻌﻠﻰ
ﻋﺎﺕﻖ اﻟﻤﺒﺮﻣﺞ ﺕﻘﻊ ﻣﺴﺆوﻟﻴﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻻﺥﺘﻼﻓﺎت ﺑﻴﻦ اﻟﻤﺘﺮﺝﻤﺎت وأﻧﻮاع
اﻟﺤﻮاﺳﺐ اﻟﻤﺨﺘﻠﻔﺔ.
ﻟﻘﺪ ﻗﻤﻨﺎ ﺑﻔﺤﺺ ﻣﺘﺄﻥ ﻟﻠﻮﺛﺎﺋﻖ ﺍﳌﻌﻴﺎﺭﻳﺔ ﺍﳋﺎﺻﺔ ﺑﺘﻄﻮﻳﺮ ﻟﻐﺔ ANSI C++ﰒ ﻗﻤﻨﺎ ﺑﻌﺪﻫﺎ ﺑﺘﺪﻗﻴﻖ ﻋﺮﺿﻨﺎ ﳍﺬﻩ
ﺍﻟﻠﻐﺎﺕ ﻣﻘﺎﺭﻧﺔ ﲟﺎ ﺟﺎﺀ ﰲ ﺍﻟﻮﺛﺎﺋﻖ ﺍﳌﻌﻴﺎﺭﻳﺔ ﻣﻦ ﺃﺟﻞ ﲢﻘﻴﻖ ﻣﺰﻳﺪ ﻣﻦ ﺍﻟﺸﻤﻮﻟﻴﺔ ﻭﺍﻟﺪﻗﺔ .ﻋﻠﻰ ﻛﻞ ﺣﺎﻝ،
ﺗﻌﺘﱪ ﻟﻐﺔ C++ﻟﻐﺔ ﻏﻨﻴﺔ ﻭﻟﻘﺪ ﺑﻘﻴﺖ ﺑﻌﺾ ﺍﳉﻮﺍﻧﺐ ﺍﻟﺬﻛﻴﺔ ﻭﺑﻌﺾ ﺍﳌﻮﺍﺿﻴﻊ ﺍﳌﺘﻘﺪﻣﺔ ﺍﻟﱵ ﱂ ﻧﻘﻢ ﺑﺘﻐﻄﻴﺘﻬﺎ.
ﻓﺈﺫﺍ ﺍﺣﺘﺠﺖ ﺇﱃ ﻣﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺎﺻﻴﻞ ﺍﻟﺘﻘﻨﻴﺔ ﺣﻮﻝ C++ﻓﺈﻧﻨﺎ ﻧﻨﺼﺤﻚ ﺑﺎﻟﺮﺟﻮﻉ ﺇﱃ ﺍﻟﻮﺛﺎﺋﻖ ﺍﳌﻌﻴﺎﺭﻳﺔ ﻟﻠﻐﺔ
.ANSI C++ﳝﻜﻨﻚ ﻃﻠﺐ ﻫﺬﻩ ﺍﻟﻮﺛﺎﺋﻖ ﻣﻦ ﻣﻮﻗﻊ ﺍﻟﻮﻳﺐ ﺍﳋﺎﺹ ﺑـ ANSIﺍﻟﺘﺎﱄ:
Webstore.ansi.org/ansidoctore/default.asp
ﻭﺭﻗﻤﻬﺎ ""Information Technology- Programming Languages- C++ ﻭﻋﻨﻮﺍﻥ ﺍﻟﻮﺛﻴﻘﺔ ﺍﳌﻄﻠﻮﺑﺔ ﻫﻮ:
ﻫﻮ.INCITS/ISO/IEC 14882-1998 :
ﻳﻮﺟﺪ ﰲ ﺍﻟﻘﺮﺹ ﺍﳌﻀﻐﻮﻁ ﺍﳌﻠﺤﻖ ﻬﺑﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺗﻌﺪﺍﺩﹰﺍ ﻟﻠﻜﺜﲑ ﻣﻦ ﺍﻟﻜﺘﺐ ﻭﺍﳌﻘﺎﻻﺕ ﺣﻮﻝ ﻟﻐﺔ C++ﻭﺍﻟﱪﳎﺔ
ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ .ﻛﻤﺎ ﺫﻛﺮ ﻓﻴﻪ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺼﺎﺩﺭ ﻟﻐﺔ C++ﺍﳌﺘﻮﻓﺮﺓ ﻋﻠﻰ ﺷﺒﻜﺔ ﺍﻹﻧﺘﺮﻧﺖ ﻭﺍﻟﻮﻳﺐ.
٤٥ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﻫﻨﺎﻙ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺎﺕ ﺍﻟﻨﺴﺦ ﺍﳊﺎﻟﻴﺔ ﻟـ C++ﺍﻟﱵ ﻫﻲ ﻏﲑ ﻣﺘﻮﺍﻓﻘﺔ ﻣﻦ ﺍﻟﻨﺴﺦ ﺍﻟﻘﺪﳝﺔ ﳍﺬﻩ ﺍﻟﻠﻐﺔ
ﻟﺬﻟﻚ ﳝﻜﻦ ﺃﻥ ﳒﺪ ﺃﻥ ﺑﻌﺾ ﺍﻟﱪﺍﻣﺞ ﺍﳌﻌﺮﻭﺿﺔ ﰲ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻻ ﳝﻜﻦ ﺃﻥ ﺗﻌﻤﻞ ﻣﻊ ﺍﻟﻨﺴﺦ ﺍﻟﻘﺪﳝﺔ
ﳌﺘﺮﲨﺎﺕ .C++
ﻋﺎدات ﺑﺮﻣﺠﻴﺔ ﺝﻴﺪة 2-1
إن ﺣﺎﺳﺒﻚ وﻣﺘﺮﺝﻤﻚ هﻤﺎ ﻣﻌﻠﻤﺎن ﺝﻴﺪان .ﻓﺈذا ﺣﺪث أﻧﻚ ﻟﻢ ﺕﺘﻮﺹﻞ إﻟﻰ
ﻓﻬﻢ آﻴﻒ ﺕﻌﻤﻞ إﺣﺪى إﻣﻜﺎﻧﻴﺎت اﻟﻠﻐﺔ ﺑﻌﺪ اﻟﻘﺮاءة ﻋﻨﻬﺎ ﻓﻲ اﻟﻤﺮاﺝﻊ
اﻟﻤﺮﻓﻘﺔ ﻓﻤﺎ ﻋﻠﻴﻚ إﻻ أن ﺕﺠﺮﺑﻬﺎ ﺑﺎﺳﺘﺨﺪام أﻣﺜﻠﺔ ﺑﺮﻣﺠﻴﺔ ﺹﻐﻴﺮة وﺕﺮى
ﻣﺎذا یﺤﺪث .اﺥﺘﺮ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻤﺘﺮﺝﻤﻚ اﻟﺨﻴﺎر اﻟﺬي یﻌﻄﻲ أآﺒﺮ ﻗﺪر ﻣﻤﻜﻦ ﻣﻦ
رﺳﺎﺋﻞ اﻟﺘﺤﺬیﺮ .maximum warningsوادرس آﻞ رﺳﺎﻟﺔ ﺕﻈﻬﺮ ﻟﻚ أﺛﻨﺎء
اﻟﺘﺮﺝﻤﺔ ﻟﺒﺮاﻣﺠﻚ ﺛﻢ ﻗﻢ ﺑﺘﺼﺤﻴﺤﻬﺎ ﻣﻦ أﺝﻞ ﺣﺬف هﺬﻩ اﻟﺮﺳﺎﺋﻞ.
ﺍﻟﻠﺬﺍﻥ ﻳﺒﺪﺃﻥ ﺑﺈﺷﺎﺭﺓ //ﻋﻠﻰ ﺃﻥ ﺍﻟﺒﺎﻗﻲ ﺍﳌﻜﺘﻮﺏ ﺧﻠﻒ ﻫﺬﻩ ﺍﻹﺷﺎﺭﺓ ﻫﻮ ﻋﺒﺎﺭﺓ ﻋﻦ ﺗﻌﻠﻴﻖ ،ﺣﻴﺚ ﳛﻖ
ﻟﻠﻤﱪﳎﲔ ﺇﺩﺭﺍﺝ ﺗﻌﻠﻴﻘﺎﻬﺗﻢ ﺿﻤﻦ ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ ﻭﲢﺴﲔ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﻗﺮﺍﺀﺗﻪ ﺑﺎﻟﻨﺘﻴﺠﺔ .ﺗﺴﺎﻋﺪ
ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻵﺧﺮﻳﻦ ﻋﻠﻰ ﻗﺮﺍﺀﺓ ﻭﻓﻬﻢ ﺑﺮﻧﺎﳎﻚ ﻭﻫﻲ ﻻﺗﻄﻠﺐ ﻣﻦ ﺍﳊﺎﺳﺐ ﺍﻟﻘﻴﺎﻡ ﺑﺄﻱ ﻓﻌﻞ ﻋﻨﺪ ﺗﻨﻔﻴﺬ
ﺍﻟﱪﻧﺎﻣﺞ .ﻓﺎﳌﺘﺮﺟﻢ ﻳﻘﻮﻡ ﺑﺘﺠﺎﻫﻠﻬﺎ ﺃﺛﻨﺎﺀ ﻋﻤﻠﻴﺔ ﺗﻮﻟﻴﺪ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺘﻨﻔﻴﺬﻱ ﺍﳌﻘﺎﺑﻞ ﻟﻠﱪﻧﺎﻣﺞ ﺍﳌﻜﺘﻮﺏ ﺑﻠﻐﺔ
.C++ﺃﻣﺎ ﺍﻟﺴﻄﺮ ﺍﳌﻜﺘﻮﺏ ﺑﻌﺪ ﺇﺷﺎﺭﺓ ﺑﺪﺀ ﺍﻟﺘﻌﻠﻴﻖ ) //ﺍﻟﱵ ﺗﺴﻤىﺒﺈﺷﺎﺭﺓ ﺍﻟﺘﻌﻠﻴﻖ ﺍﳌﺆﻟﻒ ﻣﻦ ﺳﻄﺮ
ﻭﺍﺣﺪ ،single-line commentﻷﻥ ﺍﻟﺘﻌﻠﻴﻖ ﻳﺒﺪﺃ ﺑﻌﺪﻫﺎ ﻭﻳﻨﺘﻬﻲ ﻣﻊ ﻬﻧﺎﻳﺔ ﺍﻟﺴﻄﺮ( ﻓﻬﻮ ﻳﻌﱪ ﻋﻦ ﻫﺪﻑ
ﺍﻟﱪﻧﺎﻣﺞ.
ﻣﻼﺣﻈﺔ 2-1
یﻤﻜﻦ ﻟﻠﻐﺔ C++اﺳﺘﺨﺪام أﺳﻠﻮب ﻟﻐﺔ Cﻓﻲ ذآﺮ اﻟﺘﻌﻠﻴﻘﺎت اﻟﺘﻲ یﻤﻜﻦ أن
ﺕﺘﻀﻤﻦ ﻋﺪة أﺳﻄﺮ .یﻤﻜﻦ أن یﺒﺪأ اﻟﺘﻌﻠﻴﻖ ﺑﺈﺵﺎرة * /ویﻨﺘﻬﻲ ﺑﺎﻹﺵﺎرة .*/
ﻟﻜﻨﻨﺎ ﻻ ﻧﻨﺼﺢ ﺑﻬﺬﻩ اﻟﻄﺮیﻘﺔ أﺑﺪًا.
!Welcome to C++
]< <äq†}æ<íÂ^fŞÖ]<sÚ^Þ†e<“Þ<<<V2-1<ØÓÖ
٤٧ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﻋﻦ ﺗﻮﺟﻴﻪ ﳌﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ .ﺗﺘﻢ ﻣﻌﺎﳉﺔ ﺍﻷﺳﻄﺮ ﺍﻟﱵ ﺗﺒﺪﺃ ﺑـ #ﻣﻦ ﻗﺒﻞ ﻣﺮﺣﻠﺔ ﻣﺎ
ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ ﺃﻭ ﺍﻟﺘﺮﲨﺔ .ﳜﱪ ﺍﻟﺴﻄﺮ ﺍﻟﺴﺎﺑﻖ ﻣﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ ﺑﻀﻢ ﳏﺘﻮﻯ ﺍﳌﻠﻒ ﺍﻟﺮﺃﺳﻲ )ﺫﻭ
ﺍﻻﻣﺘﺪﺍﺩ (.hﺍﳊﺎﻭﻱ ﻋﻠﻰ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﳋﺎﺻﺔ ﺑﺎﻟﺪﺧﻞ/ﺧﺮﺝ ﺇﱃ ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ .ﳚﺐ ﺿﻢ ﻫﺬﺍ ﺍﳌﻠﻒ ﺇﱃ
ﺃﻱ ﺑﺮﻧﺎﻣﺞ ﳛﻮﻱ ﻋﻠﻰ ﻋﻤﻠﻴﺎﺕ ﺧﺮﺝ ﻟﻠﻤﻌﻄﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﺃﻭ ﺩﺧﻞ ﳍﺎ ﻣﻦ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ﺑﺎﺳﺘﺨﺪﺍﻡ
ﺃﺳﻠﻮﺏ C++ﰲ ﺍﻟﺪﺧﻞ ﻭﺍﳋﺮﺝ .ﳜﺮﺝ ﺍﻟﱪﻧﺎﻣﺞ ﰲ ﺍﻟﺸﻜﻞ 2-1ﺍﳌﻌﻄﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﻛﻤﺎ ﺳﻮﻑ
ﻧﻔﺼﻞ ﺑﻌﺪ ﻗﻠﻴﻞ .ﺳﻮﻑ ﻳﺘﻢ ﺷﺮﺡ ﳏﺘﻮﻯ ﺍﳌﻠﻒ iostreamﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻴﻤﺎ ﺑﻌﺪ.
أﺥﻄﺎء ﺑﺮﻣﺠﻴﺔ ﺵﺎﺉﻌﺔ 2-1
یﺆدي ﻋﺪم اﻟﻘﻴﺎم ﺑﻌﻤﻠﻴﺔ إدراج ﻟﻠﻤﻠﻒ > <iostreamﺿﻤﻦ ﻣﻠﻒ ﻧﺺ ﺑﺮﻧﺎﻣﺞ
یﻘﻮم ﺑﻌﻤﻠﻴﺎت دﺥﻞ ﻟﻠﻤﻌﻄﻴﺎت ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺕﻴﺢ وﺥﺮج ﻟﻬﺎ ﻋﻠﻰ اﻟﺸﺎﺵﺔ، 7
إﻟﻰ إﻇﻬﺎر اﻟﻤﺘﺮﺝﻢ ﻟﺮﺳﺎﻟﺔ ﺥﻄﺄ.
ﺃﻣﺎ ﺍﻟﺴﻄﺮ:
) (int main
ﻓﻴﻌﺘﱪ ﺟﺰﺀﹰﺍ ﻣﻦ ﺃﻱ ﺑﺮﻧﺎﻣﺞ .C++ﻭﻳﻌﲏ ﺍﻟﻘﻮﺳﺎﻥ ﺑﻌﺪ ﻛﻠﻤﺔ mainﺃﻥ mainﻋﺒﺎﺭﺓ ﻋﻦ ﻛﺘﻠﺔ ﺑﺮﳎﻴﺔ
ﺗﺴﻤﻰ ﺑﺘﺎﺑﻊ .functionﲢﺘﻮﻱ ﺑﺮﺍﻣﺞ C++ﻋﻠﻰ ﺗﺎﺑﻊ ﺃﻭ ﺃﻛﺜﺮ ،ﺃﺣﺪﻫﺎ ﳚﺐ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺘﺎﺑﻊ .main
ﻓﻌﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ﳛﺘﻮﻱ ﺍﻟﱪﻧﺎﻣﺞ ﰲ ﺍﻟﺸﻜﻞ 2-1ﻋﻠﻰ ﺗﺎﺑﻊ ﻭﺣﻴﺪ .ﻳﺒﺪﺃ ﺗﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ C++ﻋﺎﺩ ﹰﺓ ﻣﻦ
ﺍﻟﺘﺎﺑﻊ mainﺣﱴ ﻟﻮ ﱂ ﻳﻜﻦ ﻫﺬﺍ ﺍﻟﺘﺎﺑﻊ ﻫﻮ ﺍﻟﺘﺎﺑﻊ ﺍﻷﻭﻝ ﰲ ﻣﻠﻒ ﺍﻟﱪﻧﺎﻣﺞ .ﺗﻔﻴﺪ ﺍﻟﻜﻠﻤﺔ ﺍﳌﻔﺘﺎﺣﻴﺔ int
ﺍﳌﻮﺟﻮﺩﺓ ﻋﻠﻰ ﻳﺴﺎﺭ mainﰲ ﺍﻟﺪﻻﻟﺔ ﻋﻠﻰ ﺃﻥ ﻫﺬﺍ ﺍﻟﺘﺎﺑﻊ ﺳﻴﻌﻴﺪ ﻣﻦ ﺍﻟﻨﻤﻂ .intﺳﻮﻑ ﻧﻮﺿﺢ ﰲ
ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻟﺚ ﻣﺎ ﻣﻌﲎ ﺃﻧﻪ ﻳﻘﻮﻡ ﺑﺈﻋﺎﺩﺓ ﻗﻴﻤﺔ ﻋﻨﺪﻣﺎ ﺳﻨﺘﺤﺪﺙ ﻋﻦ ﺍﻟﺘﻮﺍﺑﻊ ﺑﺎﻟﺘﻔﺼﻴﻞ .ﻭﳝﻜﻨﻚ
ﺍﻻﻛﺘﻔﺎﺀ ﺣﺎﻟﻴﹰﺎ ﺑﺬﻛﺮ ﺍﻟﻜﻠﻤﺔ ﺍﳌﻔﺘﺎﺣﻴﺔ intﻋﻠﻰ ﻳﺴﺎﺭ mainﰲ ﻛﺎﻓﺔ ﺑﺮﺍﳎﻚ .ﻳﻌﱪ ﺍﻟﻘﻮﺱ ﺍﻟﻜﺒﲑ
ﺍﻷﻳﺴﺮ } ﻋﻦ ﺑﺪﺍﻳﺔ ﺟﺴﻢ ﺃﻱ ﺗﺎﺑﻊ .ﰲ ﺣﲔ ﻳﻌﱪ ﺍﻟﻘﻮﺱ ﺍﻟﻜﺒﲑ ﺍﻷﳝﻦ { ﻋﻦ ﻬﻧﺎﻳﺔ ﻫﺬﺍ ﺍﻟﺘﺎﺑﻊ.
ﻳﻌﻄﻲ ﺍﻟﺴﻄﺮ ﺍﻟﺜﺎﻣﻦ
;"std::cout << "welcome to C++!\n
ﺍﻷﻣﺮ ﻟﻠﺤﺎﺳﺐ ﻟﻄﺒﺎﻋﺔ ﺍﻟﺴﻠﺴﻠﺔ ﺍﳌﻮﺟﻮﺩﺓ ﺑﲔ ﻋﻼﻣﱵ ﺍﻻﻗﺘﺒﺎﺱ )"( .quotation markesﻧﺴﻤﻲ
ﺍﻟﺴﻄﺮ ﺑﺄﻛﻤﻠﻪ ﺑﺎﻟﺘﻌﻠﻴﻤﺔ statementﲟﺎ ﰲ ﺫﻟﻚ coutﻭﺍﻟﻌﻤﻠﻴﺔ << ﻭﺍﻟﺴﻠﺴﻠﺔ “Welcome to
;” C++!\nﻭﺍﻟﻔﺎﺻﻠﺔ ﺍﳌﻨﻘﻮﻃﺔ );( .ﳚﺐ ﺃﻥ ﻧﻨﻬﻲ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮﻃﺔ )ﺍﻟﱵ ﺗﺴﻤﻰ ﺃﺣﻴﺎﻧﹰﺎ
ﲟﺆﺷﺮ ﻬﻧﺎﻳﺔ ﺍﻟﺘﻌﻠﻴﻤﺔ .(statement terminatorﻳﺘﻢ ﺇﳒﺎﺯ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺪﺧﻞ ﻭﺍﳋﺮﺝ ﰲ ﻟﻐﺔ C++ﺑﻮﺍﺳﻄﺔ
ﳎﺎﺭﻱ streamsﻟﻠﺤﺮﻭﻑ .ﻟﺬﻟﻚ ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻓﺈﻬﻧﺎ ﺗﺮﺳﻞ ﳎﺮﻯ ﺍﳊﺮﻭﻑ
! Welcome to C++ﺇﱃ ﻏﺮﺽ ﳎﺮﻯ ﺍﳋﺮﺝ ﺍﳌﻌﻴﺎﺭﻱ standard output stream object-ﻭﻫﻮ std::cout
اﻟﻔﺼﻞ اﻷول ٤٨
ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﱐ ﻋﺸﺮ std::cout ﻼ ﻋﺎﺩ ﹰﺓ ﺑﺎﻟﺸﺎﺷﺔ .ﺳﻮﻑ ﻧﺘﺤﺪﺙ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻋﻦ
ﺍﻟﺬﻱ ﻳﻜﻮﻥ ﻣﺘﺼ ﹰ
"ﳎﺎﺭﻱ ﺍﻟﺪﺧﻞ /ﺧﺮﺝ".
ﻻﺣﻆ ﺃﻧﻨﺎ ﻭﺿﻌﻨﺎ std::ﻗﺒﻞ .coutﳚﺐ ﻋﻠﻴﻨﺎ ﻓﻌﻞ ﺫﻟﻚ ﺇﺫﺍ ﺃﺭﺩﻧﺎ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﺘﻮﺟﻴﻪ ﺍﳋﺎﺹ ﲟﺮﺣﻠﺔ
ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ > .#include < iostreamﻳﻔﻴﺪ ﺍﻟﺘﻌﺒﲑ std::coutﰲ ﺍﻟﺪﻻﻟﺔ ﻋﻠﻰ ﺃﻧﻨﺎ ﻧﺴﺘﺨﺪﻡ ﺍﻻﺳﻢ
coutﺍﻟﺬﻱ ﻳﻨﺘﻤﻲ ﺇﱃ ﻓﻀﺎﺀ ﺍﻷﲰﺎﺀ .stdﻳﻌﺘﱪ ﻓﻀﺎﺀ ﺍﻷﲰﺎﺀ ﺃﺣﺪ ﺍﳌﻴﺰﺍﺕ ﺍﳌﺘﻘﺪﻣﺔ ﺍﳌﺘﻮﻓﺮﺓ ﰲ ﻟﻐﺔ
.C++ﺳﻮﻑ ﻧﺘﺤﺪﺙ ﻋﻦ ﻫﺬﻩ ﺍﳌﻴﺰﺓ ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﱐ ﻭﺍﻟﻌﺸﺮﻭﻥ ﻣﻦ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ .ﳚﺐ ﻋﻠﻴﻚ
ﺣﺎﻟﻴﹰﺎ ﻗﺒﻞ ﺍﻟﻮﺻﻮﻝ ﺇﱃ ﺗﻠﻚ ﺍﳌﺮﺣﻠﺔ ،ﺃﻥ ﺗﺘﺬﻛﺮ ﺃﻧﻪ ﳚﺐ ﺍﺳﺘﺨﺪﺍﻡ std::ﻗﺒﻞ ﺃﻱ ﺫﻛﺮ ﻟـ coutﺃﻭ
cinﺃﻭ cerrﰲ ﺑﺮﺍﳎﻚ .ﻗﻤﻨﺎ ﰲ ﺍﻟﺸﻜﻞ ) (14-1ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ usingﺍﻟﱵ ﺳﺘﺴﺎﻋﺪﻧﺎ ﻋﻠﻰ ﺣﺬﻑ
std::ﻗﺒﻞ ﺃﻱ ﺍﺳﺘﺨﺪﺍﻡ ﻻﺳﻢ ﻳﻨﺘﻤﻲ ﺇﱃ ﻓﻀﺎﺀ ﺍﻷﲰﺎﺀ .std
ﺗﺮﻣﺰ ﺍﻟﻌﻤﻠﻴﺔ << ﺇﱃ ﻋﻤﻠﻴﺔ ﺍﻹﺩﺧﺎﻝ ﺿﻤﻦ ﺍﺠﻤﻟﺮﻯ .ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﻳﺘﻢ ﺇﺩﺧﺎﻝ ﻗﻴﻤﺔ ﺍﳌﻌﺎﻣﻞ
ﺍﻟﻴﻤﻴﲏ ﻟﻠﻌﻤﻠﻴﺔ ﺍﻟﺴﺎﺑﻘﺔ ﰲ ﳎﺮﻯ ﺍﳋﺮﺝ .ﻳﺘﻢ ﻋﺎﺩ ﹰﺓ ﻃﺒﺎﻋﺔ ﺍﳊﺮﻭﻑ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳌﻌﺎﻣﻞ ﺍﻟﻴﻤﻴﲏ ﻛﻤﺎ
ﻫﻲ ﻣﻮﺟﻮﺩﺓ ﺑﲔ ﺇﺷﺎﺭﰐ ﺍﻻﻗﺘﺒﺎﺱ .ﻟﻜﻦ ﻻﺣﻆ ﺃﻥ ﺍﳊﺮﻑ \nﻟﻦ ﻳﻄﺒﻊ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ .ﻓﺎﳊﺮﻑ )\(
backslashﻳﺴﻤﻰ ﲝﺮﻑ ﺍﳍﺮﻭﺏ escape characterﻭﻫﻮ ﻳﺪﻝ ﻋﻠﻰ ﺃﻥ ﻫﻨﺎﻙ ﺣﺮﻑ ﺧﺎﺹ ﳚﺐ
ﺇﻇﻬﺎﺭﻩ .ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﺣﺮﻑ ﺍﳍﺮﻭﺏ ﻣﺘﺒﻮﻋﹰﺎ ﺑﺴﻠﺴﻠﺔ ﻣﻦ ﺍﳊﺮﻭﻑ ﻳﺘﻢ ﺩﻣﺞ ﺍﳊﺮﻑ ﺍﻟﺘﺎﱄ ﻟﻪ ﻟﻴﺸﻜﻞ
ﻣﻌﻪ ﻣﺎ ﻳﺴﻤﻰ ﺑﺴﻠﺴﻠﺔ ﺍﳍﺮﻭﺏ .escape sequenceﺗﻌﲏ ﺳﻠﺴﻠﺔ ﺍﳍﺮﻭﺏ \nﺳﻄﺮ ﺟﺪﻳﺪ newline
ﻭﻫﻲ ﺗﺴﺒﺐ ﺣﺮﻛﺔ ﺍﳌﺆﺷﺮ cursorﺇﱃ ﺑﺪﺍﻳﺔ ﺳﻄﺮ ﺟﺪﻳﺪ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ .ﻳﺒﲔ ﺍﻟﺸﻜﻞ 3-1ﺑﻌﻀﹰﺎ ﻣﻦ
ﺳﻼﺳﻞ ﺍﳍﺮﻭﺏ ﺍﻟﺸﺎﺋﻌﺔ.
أﺥﻄﺎء ﺑﺮﻣﺠﻴﺔ ﺵﺎﺉﻌﺔ 3-1
ﻋﻦ ﻬﻧﺎﻳﺔ ﺍﻟﺘﺎﺑﻊ mainﻓﺎﻟﻜﻠﻤﺔ ﺍﳌﻔﺘﺎﺡ returnﺗﻌﺘﱪ ﺃﺣﺪ ﺍﻟﻄﺮﻕ ﺍﳌﺴﺘﺨﺪﻣﺔ ﻟﻠﺨﺮﻭﺝ ﻣﻦ ﺍﻟﺘﺎﺑﻊ.
ﺗﻌﱪ ﺍﻟﻘﻴﻤﺔ 0ﻋﻦ ﺍﻧﺘﻬﺎﺀ ﺍﻟﱪﻧﺎﻣﺞ ﺑﺸﻜﻞ ﺻﺤﻴﺢ .ﺳﻮﻑ ﻧﺘﺤﺪﺙ ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻟﺚ ﻭﺑﺎﻟﺘﻔﺼﻴﻞ ﻋﻦ
ﻣﻔﻬﻮﻡ ﺍﻟﺘﻮﺍﺑﻊ ﻭﺑﺎﻟﺘﺎﱄ ﺳﻮﻑ ﺗﺼﺒﺢ ﺃﺳﺒﺎﺏ ﺍﺳﺘﺨﺪﺍﻡ ﺗﻌﻠﻴﻤﺔ returnﺃﻛﺜﺮ ﻭﺿﻮﺣﹰﺎ .ﻭﻟﻜﻦ ﺣﺎﻟﻴﹰﺎ ﻗﻢ
ﺑﺈﺿﺎﻓﺔ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻣﻊ ﻛﻞ ﺑﺮﻧﺎﻣﺞ ﺗﻜﺘﺒﻪ ﻭﺇﻻ ﺳﻮﻑ ﻳﺮﺳﻞ ﻟﻚ ﺍﳌﺘﺮﺟﻢ ﺭﺳﺎﻟﺔ ﲢﺬﻳﺮ.
٤٩ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
اﻟﻤﻌﻨﻰ ﺳﻠﺴﻠﺔ
اﻟﻬﺮوب
]< <íÃñ^Ö]<hæ†]<؉ø‰<˜Ãe<<V3-1<ØÓÖ
اﺕﺮك ﻣﺴﺎﻓﺔ ﺝﺪوﻟﺔ أﻓﻘﻴﺔ واﺣﺪة ﺑﻴﻦ ﺝﺴﻢ اﻟﺘﺎﺑﻊ وﺑﻴﻦ اﻷﻗﻮاس اﻟﻜﺒﻴﺮة اﻟﺘﻲ
ﺕﻌﺮف ﺑﺪایﺔ وﻧﻬﺎیﺔ ﺝﺴﻢ اﻟﺘﺎﺑﻊ .ﻣﻤﺎ یﺠﻌﻞ ﺑﻨﻴﺔ اﻟﺒﺮﻧﺎﻣﺞ واﺿﺤﺔ وأﺳﻬﻞ
ﻟﻠﻘﺮاءة.
اﻟﻔﺼﻞ اﻷول ٥٠
ﺣﺪد ﻃﻮل ﻣﻌﻴﻦ ﻟﻤﺴﺎﻓﺔ اﻟﺠﺪوﻟﺔ اﻷﻓﻘﻴﺔ ﺕﻔﻀﻠﻪ وﺕﺼﻄﻠﺢ ﻋﻠﻰ اﺳﺘﺨﺪاﻣﻬﺎ
ﺑﺸﻜﻞ ﻣﻨﺘﻈﻢ ﻣﻊ ﺑﺮاﻣﺠﻚ .یﻤﻜﻦ أن ﻧﺴﺘﺨﺪم ﻣﺴﺎﻓﺔ اﻟﺠﺪوﻟﺔ tabآﻤﺴﺎﻓﺔ
ﺝﺪوﻟﺔ أﻓﻘﻴﺔ ﻟﻜﻦ ﻧﻌﻠﻢ أن ﻃﻮل هﺬﻩ اﻟﻤﺴﺎﻓﺔ ﻗﺎﺑﻞ ﻟﻠﺘﻐﻴﻴﺮ .ﻧﺤﻦ ﻧﻨﺼﺢ
ﺑﺎﺳﺘﺨﺪام إﻣﺎ ﻣﺴﺎﻓﺔ اﻟــ 1/4إﻧﺶ ﻹﺵﺎرات ﺕﻮﻗﻒ tabأو ﻣﺴﺎﻓﺔ ﺛﻼث
ﻓﺮاﻏﺎت ﻟﻠﺴﻴﺮ ﻣﺴﺎﻓﺔ ﺝﺪوﻟﺔ أﻓﻘﻴﺔ واﺣﺪة.
ﳝﻜﻦ ﻃﺒﺎﻋﺔ ﺍﻟﺴﻠﺴﻠﺔ ! Welcome to C++ﺑﻌﺪﺓ ﻃﺮﻕ .ﻓﻌﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﻳﺴﺘﺨﺪﻡ ﺍﻟﱪﻧﺎﻣﺞ ﰲ
ﺍﻟﺸﻜﻞ 4-1ﻋﺪﺓ ﺗﻌﻠﻴﻤﺎﺕ ﺠﻤﻟﺎﺭﻱ ﺇﺧﺮﺍﺝ ﻭﺍﻟﱵ ﺗﻌﻄﻲ ﻧﻔﺲ ﻧﺘﻴﺠﺔ ﺍﳋﺮﺝ ﺍﳌﻤﺎﺛﻠﺔ ﻟﱪﻧﺎﻣﺞ ﺍﻟﺸﻜﻞ .2-1
ﺣﺼﻠﻨﺎ ﻋﻠﻰ ﻧﻔﺲ ﺍﻟﻨﺘﻴﺠﺔ ﻷﻥ ﺗﻌﻠﻴﻤﺔ ﺍﻻﺩﺭﺍﺝ ﰲ ﳎﺮﻯ ﺍﳋﺮﺝ ﺗﺒﺪﺃ ﻋﻤﻠﻬﺎ ﰲ ﻃﺒﺎﻋﺔ ﺍﳋﺮﺝ ﺍﻧﻄﻼﻗﹰﺎ
ﻣﻦ ﺍﳌﻜﺎﻥ ﺍﻟﺬﻱ ﺗﻮﻗﻔﺖ ﻋﻨﺪﻩ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻟﻄﺒﺎﻋﺔ ﺍﳋﺮﺝ.
Welcome to C!++
]< <<Jí×’ËßÚ<cout<l^Ûé×Ãi<ì‚Â<Ý]‚~j‰^e<‚u]æ<†Ş‰<àÚ<ÌÖöÚ<“Þ<íÂ^f<<<V4-1<ØÓÖ
ﻣﺘﺒﻮﻋﺔ ﻣﺒﺎﺷﺮﺓ ﺑﻔﺮﺍﻍ ﰒ ﺗﺘﺎﺑﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺜﺎﻧﻴﺔ ﺗﻘﻮﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻷﻭﱃ ﻟﻠﺨﺮﺝ ﺑﻄﺒﺎﻋﺔ ﻛﻠﻤﺔ
Welcome
Welcome
to
C++!
19.
20. std::cout << "Sum is " << sum << std::endl; // print sum
21.
22. ;return 0 // indicate that program ended successfully
23.
24. } // end function main
]< <°vév‘<àè‚Â<Ķ<sÚ^Þ†e<<<V6-1<ØÓÖ
ﻳﻮﺿﺢ ﺍﻟﺘﻌﻠﻴﻖ
// Fig. 1.6: fig01- 06.cpp
// Addition Program
ﺍﳍﺪﻑ ﻣﻦ ﺍﻟﱪﻧﺎﻣﺞ .ﺃﻣﺎ ﺳﻄﺮ ﺍﻟﺘﻮﺟﻴﻪ ﳌﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ:
>#include <iostream
ﻓﻴﻘﻮﻡ ﺑﺘﻀﻤﲔ ﳏﺘﻮﻯ ﺍﳌﻠﻒ ﺍﻟﺮﺃﺳﻲ iostream:ﺇﱃ ﻣﻠﻒ ﺍﻟﱪﻧﺎﻣﺞ .ﻛﻤﺎ ﺑﻴﻨﺎ ﺳﺎﺑﻘﺎﹰ ،ﻳﺒﺪﺃ ﺗﻨﻔﻴﺬ ﻛﻞ
ﺑﺮﻧﺎﻣﺞ ﻣﻦ ﺍﻟﺘﺎﺑﻊ mianﺣﻴﺚ ﳛﺪﺩ ﺍﻟﻘﻮﺱ ﺍﻟﻜﺒﲑ ﺍﻷﻳﺴﺮ ﺿﻤﻦ mianﺑﺪﺍﻳﺔ ﺟﺴﻢ ﻫﺬﺍ ﺍﻟﺘﺎﺑﻊ ﻭﳛﺪﺩ
ﺍﻟﻘﻮﺱ ﺍﻟﻜﺒﲑ ﺍﻷﳝﻦ ﺍﳌﻮﺍﻓﻖ ﻟﻠﻘﻮﺱ ﺍﻟﺴﺎﺑﻖ ﻬﻧﺎﻳﺘﻪ.
ﺗﻌﱪ ﺍﻷﺳﻄﺮ :10-8
;int integer1
;int integer2
;int sum
ﻋﻦ ﻃﺮﻳﻘﺔ ﺍﻟﺘﺼﺮﻳﺢ declarationﻋﻦ ﺍﳌﺘﺤﻮﻻﺕ .ﻓﺎﻟﻜﻠﻤﺎﺕ integer1ﻭ integer2ﻭ sumﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ
ﺃﲰﺎﺀ ﻣﺘﺤﻮﻻﺕ .ﻧﻘﺼﺪ ﺑﺎﳌﺘﺤﻮﻝ ﻋﻤﻠﻴﺔ ﲢﺪﻳﺪ ﻣﻮﺿﻊ ﰲ ﺫﺍﻛﺮﺓ ﺣﻴﺚ ﳝﻜﻦ ﺃﻥ ﳔﺰﻥ ﻓﻴﻪ ﻗﻴﻤﺔ ﻟﻴﺘﻢ
ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻦ ﻗﺒﻞ ﺑﺮﻧﺎﻣﺞ ﻣﺎ .ﳜﺼﺺ ﺍﻟﺘﺼﺮﻳﺢ ﺍﻟﺴﺎﺑﻖ ﺍﳌﺘﺤﻮﻻﺕ integer1ﻭ integer2ﻭ sumﻋﻠﻰ
ﺃﻬﻧﺎ ﻣﻌﻄﻴﺎﺕ ﻣﻦ ﺍﻟﻨﻤﻂ intﻭﻫﺬﺍ ﻳﻌﲏ ﺗﻠﻚ ﺍﳌﺘﺤﻮﻻﺕ ﺳﻮﻑ ﲢﺘﻮﻱ ﻋﻠﻰ ﻗﻴﻢ ﺻﺤﻴﺤﺔ integerﻣﺜﻞ
ﺍﻷﻋﺪﺍﺩ .31914, 0, -11, 7 :ﳚﺐ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﻛﻞ ﺍﳌﺘﺤﻮﻻﺕ ﺑﺘﺤﺪﻳﺪ ﺃﲰﺎﺋﻬﺎ ﻭﳕﻂ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﱵ
ﺳﻮﻑ ﲣﺰﻥ ﻓﻴﻬﺎ ﻭﺫﻟﻚ ﻗﺒﻞ ﺃﻥ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﰲ ﺍﻟﱪﻧﺎﻣﺞ .ﳝﻜﻦ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﻋﺪﺓ ﻣﺘﺤﻮﻻﺕ ﻣﻦ
ﻧﻔﺲ ﺍﻟﻨﻤﻂ ﺑﻮﺍﺳﻄﺔ ﻋﻤﻠﻴﺔ ﺗﺼﺮﻳﺢ ﻭﺍﺣﺪﺓ ﺃﻭ ﻋﺪﺓ ﻋﻤﻠﻴﺎﺕ ﺗﺼﺮﻳﺢ .ﻛﺎﻥ ﺑﺈﻣﻜﺎﻧﻨﺎ ﻛﺘﺎﺑﺔ ﻋﻤﻠﻴﺔ ﺗﺼﺮﻳﺢ
ﻭﺍﺣﺪﺓ ﻟﻠﻤﺘﺤﻮﻻﺕ ﺍﳌﺬﻛﻮﺭﺓ ﺃﻋﻼﻩ ﺍﺧﺘﺼﺎﺭﹰﺍ:
;int integer1, int integer2, int sum
٥٣ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﳚﻌﻞ ﺫﻟﻚ ﺍﻟﱪﻧﺎﻣﺞ ﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻘﺮﺍﺀﺓ ﻭﳝﻨﻌﻨﺎ ﻣﻦ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﱵ ﺗﺼﻒ ﺍﻟﻐﺎﻳﺔ ﻣﻦ ﻛﻞ ﻣﺘﺤﻮﻝ
ﺿﻤﻦ ﺍﻟﱪﻧﺎﻣﺞ .ﺇﺫﺍ ﺟﺮﻯ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺃﻛﺜﺮ ﻣﻦ ﻣﺘﺤﻮﻝ ﻭﺍﺣﺪ ﺿﻤﻦ ﻧﻔﺲ ﺳﻄﺮ ﺍﻟﺘﺼﺮﻳﺢ ﺍﻟﻮﺍﺣﺪ
)ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﺃﻋﻼﻩ( ﻓﺈﻧﻪ ﳚﺐ ﺍﻟﻔﺼﻞ ﺑﲔ ﺃﲰﺎﺀ ﺍﳌﺘﺤﻮﻻﺕ ﺑﻔﻮﺍﺻﻞ ) (,ﻭﺗﺴﻤﻰ ﺑﻘﺎﺋﻤﺔ ﺍﻷﲰﺎﺀ
ﺍﳌﻔﺼﻮﻟﺔ ﺑﻔﻮﺍﺻﻞ .Comma- Separated list
ﻋﺎدات ﺑﺮﻣﺠﻴﺔ ﺝﻴﺪة 8-1
ﺳﻮﻑ ﻧﻨﺎﻗﺶ ﻓﻴﻤﺎ ﻳﻠﻲ ﺃﳕﺎﻁ ﺍﳌﻌﻄﻴﺎﺕ ) doubleﻣﻦ ﺃﺟﻞ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻷﻋﺪﺍﺩ ﺍﳊﻘﻴﻘﻴﺔ ﺃﻱ ﺍﻷﻋﺪﺍﺩ ﺍﻟﱵ
ﲢﺘﻮﻱ ﻋﻠﻰ ﺃﺟﺰﺍﺀ ﻋﺸﺮﻳﺔ ﻣﺜﻞ ( -11.19, 0.0, 3.4 :ﻭ) charﻣﻦ ﺃﺟﻞ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﳊﺮﻭﻑ؛ ﳝﻜﻦ ﳌﺘﺤﻮﻝ
ﻣﻦ ﳕﻂ charﺃﻥ ﳛﻮﻱ ﻋﻠﻰ ﺣﺮﻑ ﻭﺍﺣﺪ ﺻﻐﲑ ـ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺤﺮﻭﻑ ﺍﻟﻼﺗﻴﻨﻴﺔ ـ ﺃﻭ ﺣﺮﻑ ﻭﺍﺣﺪ ﻛﺒﲑ
ﺃﻭ ﻋﻠﻰ ﺍﻷﺭﻗﺎﻡ ﻣﻦ 0ﺇﱃ 9ﺃﻭ ﻋﻠﻰ ﺃﺣﺪ ﺍﳊﺮﻭﻑ ﺍﳋﺎﺻﺔ ﻣﺜﻞ *.......$ ،ﻭﻏﲑﻫﺎ(.
ﻋﺎدات ﺑﺮﻣﺠﻴﺔ ﺝﻴﺪة 9-1
ﺿﻊ ﻓﺮاﻏًﺎ ﺑﻌﺪ آﻞ إﺵﺎرة ﻓﺎﺹﻠﺔ ) (,ﻟﻴﺼﺒﺢ اﻟﺒﺮﻧﺎﻣﺞ أآﺜﺮ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻘﺮاءة.
ﳝﻜﻦ ﻻﺳﻢ ﺍﳌﺘﺤﻮﻝ ﺃﻥ ﻳﻜﻮﻥ ﺃﻱ ﻣُﻌﺮﻑ identifierﺻﺤﻴﺢ .ﻧﻘﺼﺪ ﺑﺎﳌﹸﻌﺮﻑ ﺍﻟﺼﺤﻴﺢ ﺃﻳﺔ ﳎﻤﻮﻋﺔ
ﻻﺗﺒﺪﺃ ﺑﺮﻗﻢ ﻭﺗﺘﺄﻟﻒ ﻣﻦ ﺃﻱ ﻋﺪﺩ ﻣﻦ ﺍﳊﺮﻭﻑ ﻭﺍﻷﺭﻗﺎﻡ ﻭﺇﺷﺎﺭﺍﺕ ﲢﺖ ﺍﻟﺴﻄﺮ ) .(-ﲤﺴﺢ ﻟﻐﺔ C++
ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣُﻌﺮﻓﺎﺕ ﻣﻦ ﺃﻱ ﻃﻮﻝ ﻛﺎﻥ ﻟﻜﻦ ﳝﻜﻦ ﻟﻠﻨﻈﺎﻡ ﺍﻟﺬﻱ ﺗﻌﻤﻞ ﲢﺘﻪ ﺃﻭ ﻟﻨﺴﺨﻪ C++ﺍﳌﺴﺘﺨﺪﻣﺔ
ﺃﻥ ﻳﻔﺮﺿﺎ ﻧﻮﻋﹰﺎ ﻣﻦ ﺍﻟﺘﺤﺪﻳﺪ ﻟﻄﻮﻝ ﺍﳌﻌﺮﻓﺎﺕ.
ﳚﺐ ﺍﻻﻧﺘﺒﺎﻩ ﺃﻥ ﻟﻐﺔ C++ﺗﺘﺤﺴﺲ ﳊﺎﻟﺔ ﺍﳊﺮﻭﻑ ،case sensitiveﺃﻱ ﺃﻥ ﺍﳊﺮﻭﻑ ﺍﻟﻼﺗﻴﻨﻴﺔ ﺍﻟﻜﺒﲑﺓ
ﻭﺍﻟﺼﻐﲑﺓ ﻫﻲ ﺣﺮﻭﻑ ﳐﺘﻠﻔﺔ ﻓﺈﺫﺍ ﻛﺘﺒﻨﺎ a1ﻭ A1ﻓﻬﻤﺎ ﺗﻌﱪﺍﻥ ﻋﻦ ﻣﻌﺮﻓﲔ ﳐﺘﻠﻔﲔ.
ﺗﻠﻤﻴﺢ ﻟﺘﺤﺴﻴﻦ اﻟﻤﺤﻤﻮﻟﻴﺔ 4-1
ﺕﺠﻨﺐ اﺳﺘﺨﺪام اﻟﻤُﻌﺮﻓﺎت اﻟﺘﻲ ﺕﺒﺪأ ﺑﺄﺵﺎرة ﺕﺤﺖ اﻟﺴﻄﺮ ) (-ﻷﻧﻪ یﻤﻜﻦ
ﻟﻠﻤﺘﺮﺝﻢ أن یﺴﺘﺨﺪم أﺳﻤﺎء ﻣﺸﺎﺑﻬﺔ ﻣﻦ ﺥﻼل ﻋﻤﻠﻪ ﻣﻤﺎ یﺴﺎﻋﺪك ﻋﻠﻰ
ﺕﺠﺎوز أي ﻣﺸﻜﻠﺔ ﺥﻠﻂ ﺑﻴﻦ اﻷﺳﻤﺎء اﻟﺘﻲ ﺕﺴﺘﺨﺪﻣﻬﺎ أو ﺕﻠﻚ اﻟﺘﻲ یﺴﺘﺨﺪﻣﻬﺎ
اﻟﻤﺘﺮﺝﻢ.
ﳝﻜﻦ ﻭﺿﻊ ﺍﻟﺘﺼﺮﳛﺎﺕ ﰲ ﺃﻱ ﻣﻜﺎﻥ ﰲ ﺟﺴﻢ ﺍﻟﺘﺎﺑﻊ .ﻟﻜﻦ ﻋﻠﻰ ﻛﺎﻓﺔ ﺍﻷﺣﻮﺍﻝ ،ﳚﺐ ﺃﻥ ﻳﻈﻬﺮ
ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺍﳌﺘﺤﻮﻝ ﻗﺒﻞ ﺍﺳﺘﺨﺪﺍﻣﻪ ﰲ ﺍﻟﱪﻧﺎﻣﺞ .ﻓﻌﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﳝﻜﻦ ﰲ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺸﻜﻞ ،6-1
ﺍﺳﺘﺨﺪﺍﻡ ﺛﻼﺙ ﺗﺼﺮﳛﺎﺕ ﺑﺪ ﹰﻻ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺗﺼﺮﻳﺢ ﻭﺍﺣﺪ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ:
ﳝﻜﻦ ﻭﺿﻊ ﺍﻟﺘﺼﺮﻳﺢ:
;int integer1
ﺿﻊ داﺋﻤًﺎ ﺳﻄﺮًا ﻓﺎرﻏًﺎ ﻗﺒﻞ أي ﺕﺼﺮیﺢ ﻣﻮﺝﻮد ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ
اﻟﺘﻌﻠﻴﻤﺎت ﻓﻬﺬا یﺠﻌﻞ ﻣﻦ اﻟﺘﺼﺮیﺤﺎت ﻇﺎهﺮة ﻧﺺ اﻟﺒﺮﻧﺎﻣﺞ ویﺴﺎهﻢ
ﺑﺎﻟﺘﺎﻟﻲ ﻓﻲ وﺿﻮح ﻧﺺ اﻟﺒﺮﻧﺎﻣﺞ.
إذا آﻨﺖ ﺕﻔﻀﻞ وﺿﻊ اﻟﺘﺼﺮیﺤﺎت ﻓﻲ ﺑﺪایﺔ ﺝﺴﻢ اﻟﺘﺎﺑﻊ ،إﻓﺼﻞ ﺑﻴﻨﻬﺎ وﺑﻴﻦ
ﻣﺠﻤﻮﻋﺔ اﻟﺘﻌﻠﻴﻤﺎت اﻟﻤﻮﺝﻮدة ﺿﻤﻦ اﻟﺘﺎﺑﻊ ﺑﻮاﺳﻄﺔ ﺳﻄﺮ ﻓﺎرغ ﻣﻦ أﺝﻞ
إﻇﻬﺎر ﻧﻘﻄﺔ ﻧﻬﺎیﺔ اﻟﺘﺼﺮیﺤﺎت وﻧﻘﻄﺔ ﺑﺪایﺔ اﻟﺘﻌﻠﻴﻤﺎت.
٥٥ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﺑﻄﺒﺎﻋﺔ ﺍﳉﻤﻠﺔ Enter first integerﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﻟﻴﻘﻒ ﺍﳌﺆﺷﺮ ﺑﻌﺪﻫﺎ ﰲ ﺑﺪﺍﻳﺔ ﺍﻟﺴﻄﺮ ﺍﻟﺘﺎﱄ .ﻫﺬﻩ ﺍﻟﺮﺳﺎﻟﺔ
ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﺇﺷﺎﺭﺓ ﺟﺎﻫﺰﻳﺔ promptﻷﻬﻧﺎ ﲣﱪ ﺍﳌﺴﺘﺨﺪﻡ ﲜﺎﻫﺰﻳﺔ ﺍﻟﱪﻧﺎﻣﺞ ﻟﺘﻘﺒﻞ ﺍﻟﻘﻴﺎﻡ ﺑﻔﻌﻞ ﻣﻌﲔ.
ﻳﻔﻀﻞ ﺃﻥ ﺗﻘﺮﺃ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ" :ﻳﺄﺧﺬ coutﺳﻠﺴﻠﺔ ﺍﳊﺮﻭﻑ ."Enter first integer\n
ﺗﺴﺘﺨﺪﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ ﰲ ﺍﻟﺴﻄﺮ ﺍﻟﺜﺎﻟﺚ ﻋﺸﺮ:
;std::cin >> integer1
ﻏﺮﺽ ﳎﺮﻯ ﺍﻟﺪﺧﻞ ; (cin) input stream objectﺍﻟﺘﺎﺳﻊ ﻟﻔﻀﺎﺀ ﺍﻷﲰﺎﺀ stdﻭﻋﻤﻠﻴﺔ ﺍﻻﺳﺘﺨﺮﺍﺝ ﻣﻦ
ﳎﺮﻯ ﺍﻟﺪﺧﻞ )>>( stream extraction operatorﻣﻦ ﺃﺟﻞ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﺍﻟﻘﻴﻤﺔ ﺍﳌﹸﺪﺧﻠﺔ ﻣﻦ ﻗﺒﻞ
ﺍﳌﺴﺘﺨﺪﻡ .ﻳﺄﺧﺬ ﺍﺠﻤﻟﺮﻯ cinﺩﺧﻠﻪ ﻋﺎﺩ ﹰﺓ ﻣﻦ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ﻭﻳﻔﻀﻞ ﻗﺮﺍﺀﺓ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ
ﺍﻟﺘﺎﱄ" :ﻳﻌﻄﻲ std::cinﺍﻟﻘﻴﻤﺔ ﺍﳌﹸﺪﺧﻠﺔ ﺇﱃ ﺍﳌﺘﺤﻮﻝ ."integer1
ﻋﻨﺪﻣﺎ ﻳﻨﻔﺬ ﺍﳊﺎﺳﺐ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻓﺈﻧﻪ ﻳﻨﺘﻈﺮ ﺍﳌﺴﺘﺨﺪﻡ ﺣﱴ ﻳﻘﻮﻡ ﺑﺈﺩﺧﺎﻝ ﻗﻴﻤﺔ ﻟﻠﻤﺘﺤﻮﻝ .integer1
ﻳﺴﺘﺠﻴﺐ ﺍﳌﺴﺘﺨﺪﻡ ﻟﻠﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻟﻜﺘﺎﺑﺔ ﻋﺪﺩ ﺻﺤﻴﺢ ﰒ ﺑﻜﺒﺲ ﺯﺭ ﺍﻹﺩﺧﺎﻝ ) return keyﻭﻧﺴﻤﻴﻪ
ﺃﺣﻴﺎﻧﹰﺎ (enter keyﻣﻦ ﺃﺟﻞ ﺇﺭﺳﺎﻝ ﺍﻟﻌﺪﺩ ﺇﱃ ﺍﳊﺎﺳﺐ .ﺑﻌﺪﻫﺎ ﻳﻘﻮﻡ ﺍﳊﺎﺳﺐ ﺑﺈﺳﻨﺎﺩ ﻫﺬﺍ ﺍﻟﻌﺪﺩ ﺃﻭ
ﻗﻴﻤﺘﻪ ﺇﱃ ﺍﳌﺘﺤﻮﻝ .integer1ﻭﻳﺮﻣﺰ ﺃﻱ ﻭﺭﻭﺩ ﻟﻠﻤﺘﺤﻮﻝ integer1ﺿﻤﻦ ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ ﻻﺳﺘﺨﺪﺍﻡ
ﺍﻟﻘﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ.
ﺗﺴﺎﻋﺪ ﺍﻷﻏﺮﺍﺽ std::cinﻭ std::coutﻋﻠﻰ ﺍﻟﺘﻔﺎﻋﻞ ﻣﺎ ﺑﲔ ﺍﳌﺴﺘﺨﺪﻡ ﻭﺍﳊﺎﺳﺐ .ﻭﻋﻠﻰ ﺍﻋﺘﺒﺎﺭ ﺃﻥ ﻫﺬﺍ
ﺍﻟﺘﻔﺎﻋﻞ ﻳﺸﺒﻪ ﻋﻤﻠﻴﺔ ﺍﳊﻮﺍﺭ ﻟﺬﻟﻚ ﻧﺴﻤﻴﻪ ﺃﺣﻴﺎﻧﹰﺎ "ﺑﺎﻟﱪﳎﺔ ﺍﻟﺘﺨﺎﻃﺒﻴﺔ" .interactive computing
ﺗﻄﺒﻊ ﺍﻟﺘﻌﻠﻴﻤﺔ ﰲ ﺍﻟﺴﻄﺮ :15
std::cout << "Enter second integer\n"; //prompt
ﺍﻟﺮﺳﺎﻟﺔ Enter second integerﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﻟﻴﻘﻒ ﺍﳌﺆﺷﺮ ﺑﻌﺪﻫﺎ ﰲ ﺑﺪﺍﻳﺔ ﺍﻟﺴﻄﺮ ﺍﻟﺘﺎﱄ.
ﺗﻌﱪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻋﻦ ﺍﳉﺎﻫﺰﻳﺔ ﻟﺘﻘﺒﻞ ﻓﻌﻞ ﳏﺪﺩ .ﰲ ﺣﲔ ﺗﺴﺎﻋﺪ ﺍﻟﺘﻌﻠﻴﻤﺔ ﰲ ﺍﻟﺴﻄﺮ :16
std::cin >> integer2; //read on integer
ﲝﺴﺎﺏ ﳎﻤﻮﻉ ﻗﻴﻤﱵ ﺍﳌﺘﺤﻮﻟﲔ integer1ﻭ integer2ﻭﺑﺈﺳﻨﺎﺩ ﻧﺘﻴﺠﺔ ﺍﺠﻤﻟﻤﻮﻉ ﻟﻠﻤﺘﺤﻮﻝ sumﺑﺎﺳﺘﺨﺪﺍﻡ
ﻋﻤﻠﻴﺔ ﺍﻹﺳﻨﺎﺩ )=( .ﳝﻜﻦ ﻗﺮﺍﺀﺓ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ" :ﻳﺄﺧﺬ ﺍﳌﺘﺤﻮﻝ sumﻗﻴﻤﺔ ﺍﺠﻤﻟﻤﻮﻉ
."integer1+integer2ﺗﺘﻢ ﻣﻌﻈﻢ ﺍﳊﺴﺎﺑﺎﺕ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﺳﻨﺎﺩ .ﺗﺴﻤﻰ ﺍﻟﻌﻤﻠﻴﺘﺎﻥ )=( ﻭ )(+
ﻼ ﻣﻨﻬﺎ ﳛﺘﺎﺝ ﺇﱃ ﻣﻌﺎﻣﻠﲔ .two operandsﻓﻔﻲ ﺣﺎﻟﺔ "ﺑﻌﻤﻠﻴﺘﲔ ﺛﻨﺎﺋﻴﺘﲔ" binary operatorsﻷﻥ ﻛ ﹰ
اﻟﻔﺼﻞ اﻷول ٥٦
ﺍﻟﻌﻤﻠﻴﺔ ) (+ﻳﺸﻜﻞ ﺍﳌﺘﺤﻮﻻﻥ integer2,integer1ﺍﳌﻌﺎﻣﻠﲔ ﺍﳋﺎﺻﲔ ﻬﺑﺎ ﺃﻣﺎ ﰲ ﺣﺎﻝ ﺍﻟﻌﻤﻠﻴﺔ )=(،
ﻓﻴﺸﻜﻞ ﺍﳌﺘﺤﻮﻝ sumﻭﻗﻴﻤﺔ ﺍﻟﻌﺒﺎﺭﺓ integer1+integer2ﺍﳌﻌﺎﻣﻠﲔ ﺍﳋﺎﺻﲔ ﺑﺘﻠﻚ ﺍﻟﻌﻤﻠﻴﺔ.
ﻋﺎدات ﺑﺮﻣﺠﻴﺔ ﺝﻴﺪة 14-1
ﺿﻊ ﻓﺮاﻏًﺎ ﻋﻠﻰ ﻃﺮﻓﻲ آﻞ ﻋﻤﻠﻴﺔ ﺛﻨﺎﺋﻴﺔ .ﻣﻤﺎ یﺒﺮز هﺬﻩ اﻟﻌﻤﻠﻴﺔ ویﺠﻌﻞ
اﻟﺒﺮﻧﺎﻣﺞ أآﺜﺮ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻘﺮاءة.
std::endl ﺑﻄﺒﺎﻋﺔ ﺳﻠﺴﻠﺔ ﺍﳊﺮﻭﻑ sum isﻣﺘﺒﻮﻋﺔ ﺑﺎﻟﻘﻴﻤﺔ ﺍﻟﻌﺪﺩﻳﺔ ﻟﻠﻤﺘﺤﻮﻝ sumﺍﳌﺘﺒﻮﻋﺔ ﺑﺪﻭﺭﻫﺎ ﺑـ
)ﺍﺧﺘﺼﺎﺭ ﳊﺮﻑ ﻬﻧﺎﻳﺔ ﺍﻟﺴﻄﺮ ” “end lineﺍﻟﺘﺎﺑﻊ ﻟﻔﻀﺎﺀ ﺍﻷﲰﺎﺀ (stdﺍﻟﱵ ﻧﺴﻤﻴﻬﺎ ؛ "ﻣﺘﺤﻜﻢ ﺑﺎﺠﻤﻟﺮﻯ"
.stream manipulatorﻳﻘﻮﻡ ﺍﳌﺘﺤﻜﻢ std::endlﺑﺈﺧﺮﺍﺝ "ﻬﻧﺎﻳﺔ ﺳﻄﺮ" ﻭﺇﻓﺮﺍﻍ ﳐﺰﻥ ﺍﳋﺮﺝ output
.bufferﻫﺬﺍ ﻳﻌﲏ ﺃﻧﻪ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺒﻌﺾ ﺍﻷﻧﻈﻤﺔ ﺣﻴﺚ ﻳﺘﻢ ﲡﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﳋﺮﺝ ﰲ ﳐﺰﻥ ﺣﱴ ﻳﺼﻞ
ﻣﺴﺘﻮﺍﻫﺎ ﺇﱃ ﺣﺪ ﻳﺴﺘﺤﻖ ﻋﻨﺎﺀ ﺍﻟﻘﻴﺎﻡ ﺑﻄﺒﺎﻋﺘﻬﺎ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ،ﻓﺈﻥ std::endlﺗﻮﻗﻒ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺠﻤﻴﻊ
ﻭﲣﺮﺝ ﻛﻞ ﻣﺎ ﰎ ﲡﻤﻴﻌﻪ ﻟﻴﻄﺒﻊ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﻓﻮﺭﹰﺍ ﺩﻭﻥ ﺃﻱ ﺍﻧﺘﻈﺎﺭ.
ﻻﺣﻆ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﺗﺴﺘﺨﺪﻡ ﻋﺪﺓ ﻗﻴﻢ ﻣﻦ ﻋﺪﺓ ﺃﻧﻮﺍﻉ .ﻓﻌﻤﻠﻴﺔ ﺍﻹﺩﺧﺎﻝ ﰲ ﳎﺮﻯ ﺍﳋﺮﺝ ﺗﻌﺮﻑ
ﲤﺎﻣﹰﺎ ﻛﻴﻒ ﳚﺐ ﺇﺧﺮﺍﺝ ﻛﻞ ﺟﺰﺀ ﻣﻦ ﺍﳌﻌﻄﻴﺎﺕ .ﻧﺴﻤﻲ ﻋﻤﻠﻴﺔ ﺍﺳﺘﺨﺪﺍﻡ ﻋﺪﺓ ﻋﻤﻠﻴﺎﺕ ﺇﺩﺧﺎﻝ ﰲ
ﳎﺮﻯ )<<( ﺿﻤﻦ ﺗﻌﻠﻴﻤﺔ ﻭﺍﺣﺪﺓ ﺑﻌﻤﻠﻴﺔ "ﺩﻣﺞ ﻋﻤﻠﻴﺎﺕ ﺍﻹﺩﺧﺎﻝ ﰲ ﳎﺮﻯ ﺍﳋﺮﺝ concatenating
"stream insertion operationsﻟﺬﻟﻚ ﻟﻴﺲ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ،ﺍﺳﺘﺨﺪﺍﻡ ﺗﻌﻠﻴﻤﺎﺕ ﺧﺮﺝ ﻹﻇﻬﺎﺭ ﻛﻞ ﻧﻮﻉ
ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﳌﻌﻄﻴﺎﺕ.
ﳝﻜﻦ ﺍﻟﻘﻴﺎﻡ ﺑﺎﳊﺴﺎﺑﺎﺕ ﰲ ﺗﻌﻠﻴﻤﺎﺕ ﺍﳋﺮﺝ ﺃﻳﻀﺎﹰ ،ﺃﻱ ﳝﻜﻦ ﺃﻥ ﺗﱪﻣﺞ ﺍﻟﺘﻌﻠﻴﻤﺘﺎﻥ ﺍﻟﺴﺎﺑﻘﺘﺎﻥ ﺑﺘﻌﻠﻴﻤﺔ
ﻭﺍﺣﺪﺓ ﻫﻲ:
;std::cout << "sum is " << integer1+integer2 << std::endl
ﳜﱪ ﺍﻟﻘﻮﺱ ﺍﻟﻜﺒﲑ ﺍﻷﳝﻦ )}( ﺍﳊﺎﺳﺐ ﺑﺎﻟﻮﺻﻮﻝ ﺇﱃ ﻬﻧﺎﻳﺔ ﺍﻟﺘﺎﺑﻊ .mian
ﺗُﻌﺪ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺑﻨﺎﺀ ﺑﲎ ﻟﻠﻤﻌﻄﻴﺎﺕ ﺧﺎﺻﺔ ﺑﺎﳌﺴﺘﺨﺪﻡ ﻫﻲ ﺇﺣﺪﻯ ﺍﳌﻴﺰﺍﺕ ﺍﻟﻘﻮﻳﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﻟﻐﺔ
) C++ﻛﻤﺎ ﺳﻴﺘﻢ ﺗﺒﻴﺎﻧﻪ ﰲ ﺍﻟﻔﺼﻞ .(6ﻛﻤﺎ ﳝﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻣﲔ "ﺗﻌﻠﻴﻢ" C++ﻛﻴﻒ ﳝﻜﻦ ﺇﺩﺧﺎﻝ
ﻭﺇﺧﺮﺍﺝ ﺍﳌﻌﻄﻴﺎﺕ ﺇﱃ ﻭﻣﻦ ﺍﻟﺒﲎ ﺍﻟﺴﺎﺑﻘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﻤﻠﻴﺘﲔ <<ﻭ>> )ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺑـ
"ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺋﺪ ﻟﻠﻌﻤﻠﻴﺎﺕ" operator overloadingﻛﻤﺎ ﺳﻮﻑ ﻧﺮﻯ ﰲ ﺍﻟﻔﺼﻞ .(8
ﰲ ﺑﺮﻧﺎﻣﺞ ﺍﳉﻤﻊ ﺍﳌﺒﲔ ﰲ ﺍﻟﺸﻜﻞ ،6-1ﻓﺈﻥ ﺍﻟﻘﻴﻤﺔ ﺍﳌﹸﺪﺧﻠﺔ ﻣﻦ ﻗﺒﻞ ﺍﳌﺴﺘﺨﺪﻡ ﺗُﻮﺿﻊ ﰲ ﻣﻮﺿﻊ
ﺍﻟﺬﺍﻛﺮﺓ ﺍﳌﺨﺼﺺ ﻣﻦ ﻗﺒﻞ ﺍﳌﺘﺮﺟﻢ ﻟﻠﻤﺘﺤﻮﻝ .integer1ﻓﺈﺫﺍ ﺍﻓﺘﺮﺿﻨﺎ ﺃﻥ ﺍﳌﺴﺘﺨﺪﻡ ﻛﺎﻥ ﻗﺪ ﺃﺩﺧﻞ
ﺍﻟﻘﻴﻤﺔ 45ﻛﻘﻴﻤﺔ ﻟﻠﻤﺘﺤﻮﻝ integer1ﻓﺴﻴﻘﻮﻡ ﺍﳊﺎﺳﺐ ﺑﻮﺿﻊ ﺍﻟﻘﻴﻤﺔ 45ﰲ ﻣﻮﺿﻊ ﺍﻟﺬﺍﻛﺮﺓ ﺍﳌﺨﺼﺺ
ﻟـ ineger1ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ ﺍﻟﺸﻜﻞ .7-1
ﻋﻨﺪ ﻭﺿﻊ ﻗﻴﻤﺔ ﻣﺎ ﰲ ﻣﻜﺎﻥ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ ﺳﻮﻑ ﲢﻞ ﳏﻞ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻘﺪﳝﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ
ﺫﻟﻚ ﺍﳌﻜﺎﻥ ﻭﺍﻟﱵ ﺳﻮﻑ ﻳﺘﻢ ﺗﺪﻣﲑﻫﺎ.
ﺇﺫﺍ ﻋﺪﻧﺎ ﺛﺎﻧﻴﺔ ﺇﱃ ﺑﺮﻧﺎﻣﺞ ﺍﳉﻤﻊ ،ﻓﻌﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ:
std::cin >> integer2
ﻣﻊ ﺇﻓﺘﺮﺍﺽ ﺃﻥ ﺍﳌﺴﺘﺨﺪﻡ ﺳﻮﻑ ﻳﺪﺧﻞ ﺍﻟﻘﻴﻤﺔ 72ﺳﻮﻑ ﻳﺘﻢ ﲣﺰﻳﻦ ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ ﰲ ﺍﳌﻮﺿﻊ
integer2
ﻭﺳﻮﻑ ﺗﺒﺪﻭ ﺍﻟﺬﺍﻛﺮﺓ ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﰲ ﺍﻟﺸﻜﻞ 8-1ﻣﻊ ﻣﻼﺣﻈﺔ ﺃﻥ ﻫﺬﻩ ﺍﳌﻮﺍﺿﻊ ﻻ ﲢﺘﺎﺝ
ﺑﺎﻟﻀﺮﻭﺭﺓ ﺃﻥ ﺗﻜﻮﻥ ﺟﻨﺒﹰﺎ ﺇﱃ ﺟﻨﺐ ﰲ ﺍﻟﺬﺍﻛﺮﺓ.
Integer1 45
]< <<Jinteger1<äe<¼fi†¹]<Ùçvj¹]<íÛéÎæ<܉]<†Òƒ<ÄÚ<ì†Ò]„Ö]<»<Ä•çÚ<<V7-1<ØÓÖ
Integer1 45
< <Integer2 72
]< <<Jinteger2æ<integer1<°Öçvj¹^e<°jÏ×ÃjÚ<°jÛÎ<Ù^}c<‚Ãe<ì†Ò]„Ö]<»<á^ÕçÚ<V8-1<ØÓÖ
ﻓﺈﻧﻪ ﻳﻘﻮﻡ ﺑﻌﻤﻠﻴﺔ ﺍﳉﻤﻊ ﻭﻳﻀﻊ integer2 ﻭ integer1 ﺑﻌﺪ ﺃﻥ ﳛﺼﻞ ﺍﻟﱪﻧﺎﻣﺞ ﻋﻠﻰ ﻗﻴﻤﱵ ﺍﳌﺘﺤﻮﻟﲔ
ﺍﻟﻨﺘﻴﺠﺔ ﰲ ﺍﳌﺘﺤﻮﻝ .sumﻓﺎﻟﺘﻌﻠﻴﻤﺔ:
; sum = integer1 + integer2
ﺗﻨﻔﺬ ﻋﻤﻠﻴﺔ ﺍﳉﻤﻊ ﻭﺗﺆﺩﻱ ﺇﱃ ﺗﺪﻣﲑ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ sumﻭﳛﺼﻞ ﻫﺬﺍ ﺑﻌﺪ ﻭﺿﻊ ﻗﻴﻤﺔ
ﺍﳉﻤﻊ ﻟـ integer1ﻭ integer2ﰲ ﻣﻮﺿﻊ ﺍﻟﺬﺍﻛﺮﺓ ﺍﳌﺨﺼﺺ ﻟـ ) sumﺩﻭﻥ ﺃﺧﺬ ﺃﻱ ﺍﻋﺘﺒﺎﺭ ﻟﻠﻘﻴﻤﺔ
اﻟﻔﺼﻞ اﻷول ٥٨
ﺍﳌﻤﻜﻦ ﻭﺟﻮﺩﻫﺎ ﰲ .(sumﺑﻌﺪ ﺍﻟﻘﻴﺎﻡ ﺑﻌﻤﻠﻴﺔ ﺍﳉﻤﻊ ،ﺗﺒﺪﻭ ﺍﻟﺬﺍﻛﺮﺓ ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ ﺍﻟﺸﻜﻞ .9-1
45
Integer1
Integer2 72
<< sum
117
ﻻﺣﻆ ﺑﻘﺎﺀ ﻣﻮﺿﻌﻲ ﺍﻟﺬﺍﻛﺮﺓ ﺍﳌﺨﺼﺼﲔ ﻟـ integer1ﻭ integer2ﻋﻠﻰ ﺷﻜﻠﻬﻤﺎ ﺍﻟﺴﺎﺑﻖ ﻗﺒﻞ ﺍﻟﻘﻴﺎﻡ
ﺑﻌﻤﻠﻴﺔ ﺍﳉﻤﻊ ﺍﳌﺮﺗﺒﻄﺔ ﺑﺎﳌﺘﺤﻮﻝ sumﺣﻴﺚ ﰎ ﺍﺳﺘﺨﺪﺍﻡ ﻗﻴﻤﻬﻤﺎ ﻭﻟﻜﻦ ﱂ ﳚ ِﺮ ﺗﺪﻣﲑﻫﺎ .ﻓﺒﺎﻟﺘﺎﱄ ﻻ
ﺗﺆﺩﻱ ﻋﻤﻠﻴﺔ ﻗﺮﺍﺀﺓ ﻗﻴﻤﺔ ﳐﺰﻧﺔ ﰲ ﻣﻮﺿﻊ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﺇﱃ ﺗﺪﻣﲑ ﺗﻠﻚ ﺍﻟﻘﻴﻤﺔ ﻭﺿﻴﺎﻋﻬﺎ.
ﻣﻊ اﻷﻋﺪاد ﻏﻴﺮ اﻟﺼﺤﻴﺤﺔ یﻌﺘﺒﺮ اﺳﺘﺨﺪام ﻋﻤﻠﻴﺔ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ اﻟﺼﺤﻴﺤﺔ
7
%
ﺥﻄًﺄ ﻗﻮاﻋﺪیًﺎ.
ﳚﺐ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﺎﺑﲑ ﺍﳊﺴﺎﺑﻴﺔ ﰲ ﻟﻐﺔ C++ﻋﻠﻰ ﺧﻂ ﻣﺴﺘﻘﻴﻢ straight-line formﻓﻴﺠﺐ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ
ﻛﺘﺎﺑﺔ ﺍﻟﻌﺒﺎﺭﺓ "ﻗﺴﻤﺔ aﻋﻠﻰ "bﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ a/b :ﺣﻴﺚ ﺗﻈﻬﺮ ﻛﺎﻓﺔ ﺍﻟﺜﻮﺍﺑﺖ ﻭﺍﳌﺘﺤﻮﻻﺕ
ﻭﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﻧﻔﺲ ﺍﻟﺴﻄﺮ .ﺃﻣﺎ ﺍﻟﺸﻜﻞ ﺍﳉﱪﻱ baﻓﻬﻮ ﻏﲑ ﻣﻘﺒﻮﻝ ﻣﻦ ﻗﺒﻞ ﺍﳌﺘﺮﺟﻢ .ﻭﻟﻜﻨﻬﺎ ﻣﺘﻮﻓﺮﺓ ﰲ
ﺑﻌﺾ ﺍﻟﻨﻈﻢ ﺍﻟﱪﳎﻴﺔ ﺍﻟﱵ ﺗﺪﻋﻢ ﺍﻟﺘﻌﺎﻣﻞ ﺑﺎﻟﺸﻜﻞ ﺍﻟﻄﺒﻴﻌﻲ ﺧﺼﻮﺻﹰﺎ ﻓﻴﻤﺎ ﻳﺘﻌﻠﻖ ﺑﺎﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺍﳌﻌﻘﺪﺓ.
ﳝﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﻗﻮﺍﺱ ﰲ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﳊﺴﺎﺑﻴﺔ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ C++ﺑﻨﻔﺲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﱵ ﻧﺴﺘﻌﻤﻠﻬﺎ ﻬﺑﺎ ﰲ
ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﳉﱪﻳﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ﺃﺭﺩﻧﺎ ﺣﺴﺎﺏ ﻧﺘﻴﺠﺔ ﺿﺮﺏ aﺑﺎﻟﻜﻤﻴﺔ b+cﳚﺐ ﺃﻥ ﻧﻜﺘﺐ:
)a*(b+c
ﺗﻘﻮﻡ C++ﺑﺘﻄﺒﻴﻖ ﺍﻟﻌﻤﻠﻴﺎﺕ ﰲ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﳊﺴﺎﺑﻴﺔ ﺣﺴﺐ ﺗﺮﺗﻴﺐ ﻣﻌﲔ ﳏﺪﺩ ﺗﺒﻌﹰﺎ ﻟﻘﻮﺍﻋﺪ ﺍﻷﻭﻟﻮﻳﺔ ﺑﲔ
ﺍﻟﻌﻤﻠﻴﺎﺕ rules of operator precedenceﺍﻟﱵ ﲤﺎﺛﻞ ﻗﻮﺍﻋﺪ ﺍﻷﻭﻟﻮﻳﺔ ﺍﳌﺴﺘﺨﺪﻣﺔ ﰲ ﺍﳉﱪ:
.1ﳚﺮﻱ ﺃﻭ ﹰﻻ ﺇﳒﺎﺯ ﺍﳊﺴﺎﺑﺎﺕ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻸﺯﻭﺍﺝ ﺍﳌﻮﺟﻮﺩﺓ ﺑﲔ ﻗﻮﺳﲔ .ﻟﺬﻟﻚ ﺗﺴﺘﺨﺪﻡ ﺍﻷﻗﻮﺍﺱ
ﻟﺘﺤﺪﻳﺪ ﺗﺮﺗﻴﺐ ﺣﺴﺎﺏ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺬﻱ ﻧﺮﻏﺐ ﺑﻪ ﻛﻤﱪﳎﲔ .ﻧﻘﻮﻝ ﻋﻦ ﺍﻷﻗﻮﺍﺱ ﺃﻬﻧﺎ ﲢﺪﺩ
"ﺃﻋﻠﻰ ﻣﺴﺘﻮﻯ ﻟﻸﻭﻟﻮﻳﺔ" ﰲ ﺣﺎﻝ ﻭﺟﻮﺩ ﳎﻤﻮﻋﺎﺕ ﻟﻸﻗﻮﺍﺱ ﻣﺘﺪﺍﺧﻠﺔ ﺑﻌﻀﻬﺎ ﺑﺒﻌﺾ ،ﻓﺈﻥ
ﻋﻤﻠﻴﺔ ﺍﳊﺴﺎﺏ ﺗﺒﺪﺃ ﺍﻧﻄﻼﻗﹰﺎ ﻣﻦ ﺍﻟﺰﻭﺝ ﺍﻟﺪﺍﺧﻠﻲ ﺍﻷﻭﻝ ﺍﻟﺬﻱ ﻻ ﳛﻮﻱ ﺃﻱ ﳎﻤﻮﻋﺔ ﻟﻸﻗﻮﺍﺱ
ﺿﻤﻨﻪ.
.2ﺑﻌﺪﻫﺎ ﻳﺘﻢ ﺣﺴﺎﺏ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻀﺮﺏ ﻭﺍﻟﻘﺴﻤﺔ ﻭﺑﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ .ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻌﺒﺎﺭﺓ
ﲢﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺓ ﻋﻤﻠﻴﺎﺕ ﺿﺮﺏ ﺃﻭ ﺗﻘﺴﻴﻢ ﺃﻭ ﺣﺴﺎﺏ ﻟﺒﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ ﻓﻴﺠﺮﻱ
اﻟﻔﺼﻞ اﻷول ٦٠
ﺣﺴﺎﻬﺑﺎ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ .ﻧﻘﻮﻝ ﻋﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻀﺮﺏ ﻭﺍﻟﻘﺴﻤﺔ ﻭﺑﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ
ﺃﻬﻧﺎ ﻣﻦ ﻧﻔﺲ ﻣﺴﺘﻮﻯ ﺍﻷﻭﻟﻮﻳﺔ.
.3ﺃﺧﲑﹰﺍ ﻧﻘﻮﻡ ﲝﺴﺎﺏ ﻋﻤﻠﻴﺎﺕ ﺍﳉﻤﻊ ﻭﺍﻟﻄﺮﺡ .ﺇﺫﺍ ﺣﻮﺕ ﺍﻟﻌﺒﺎﺭﺓ ﻋﻠﻰ ﻋﺪﺓ ﻋﻤﻠﻴﺎﺕ ﲨﻊ ﺃﻭ
ﻃﺮﺡ ﻋﻨﺪﻫﺎ ﺗﺒﺪﺃ ﻋﻤﻠﻴﺔ ﺍﳊﺴﺎﺏ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ .ﻧﻘﻮﻝ ﺃﻳﻀﹰﺎ ﺃﻥ ﻋﻤﻠﻴﱵ ﺍﳉﻤﻊ ﻭﺍﻟﻄﺮﺡ
ﳍﻤﺎ ﻧﻔﺲ ﻣﺴﺘﻮﻯ ﻟﻸﻭﻟﻮﻳﺔ.
ﺗﺴﻤﺢ ﻗﻮﺍﻋﺪ ﺍﻷﻭﻟﻮﻳﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻟـ C++ﲝﺴﺎﺏ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﳊﺴﺎﺑﻴﺔ ﺣﺴﺐ ﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﺼﺤﻴﺢ
ﻟﻠﻌﻤﻠﻴﺎﺕ ﺍﳊﺴﺎﺑﻴﺔ .ﻋﻨﺪﻣﺎ ﻧﻘﻮﻝ ﺃﻥ ﺗﻄﺒﻴﻖ ﺍﻟﻌﻤﻠﻴﺎﺕ ﳚﺮﻱ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ ﻓﺈﻧﻨﺎ ﻧﺴﺘﻌﲔ ﻟﺬﻟﻚ
ﺑﺎﳋﺎﺻﺔ ﺍﻟﺘﺠﻤﻴﻌﻴﺔ ﻟﻠﻌﻤﻠﻴﺎﺕ .associativityﺳﻮﻑ ﻧﺮﻯ ﻻﺣﻘﹰﺎ ﺃﻥ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻧﻔﺴﻬﺎ ﻫﻲ
ﻋﻤﻠﻴﺎﺕ ﲡﻤﻴﻌﻴﺔ ﻣﻦ ﺍﻟﻴﻤﲔ ﺇﱃ ﺍﻟﻴﺴﺎﺭ ﺃﻳﻀﹰﺎ .ﻳﻠﺨﺺ ﺍﻟﺸﻜﻞ 11-1ﻗﻮﺍﻋﺪ ﺍﻷﻭﻟﻮﻳﺔ ﺍﻟﺴﺎﺑﻘﺔ .ﺳﻮﻑ
ﻳﺘﻢ ﺗﻌﺪﻳﻞ ﻫﺬﺍ ﺍﳉﺪﻭﻝ ﻻﺣﻘﹰﺎ ﻋﻨﺪ ﺇﺿﺎﻓﺔ ﻋﻤﻠﻴﺎﺕ ﺃﺧﺮﻯ ﺧﺎﺻﺔ ﺑـ .C++ﲢﺘﻮﻱ ﺍﳌﻼﺣﻖ ﻋﻠﻰ
ﻼ ﻟﻸﻭﻟﻮﻳﺔ ﺑﲔ ﻋﻤﻠﻴﺎﺕ .C++ ﳐﻄﻄﹰﺎ ﻛﺎﻣ ﹰ
]< <íée^Š£]<l^é×ÛÃÖ]<°e<íèçÖæù]<V11-1<ØÓÖ
ﻟﻨﺤﺎﻭﻝ ﺍﻵﻥ ﺗﻄﺒﻴﻖ ﻗﻮﺍﻋﺪ ﺍﻷﻭﻟﻮﻳﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻋﻠﻰ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻷﻣﺜﻠﺔ ﻭﺍﻟﺘﻌﺎﺑﲑ ﺍﳊﺴﺎﺑﻴﺔ.
ﻛﻞ ﻣﺜﺎﻝ ﻣﻦ ﻫﺬﻩ ﺍﻷﻣﺜﻠﺔ ﻳﺘﻀﻤﻦ ﺍﻟﺸﻜﻞ ﺍﳉﱪﻱ ﻟﻠﻌﺒﺎﺭﺓ ﺍﳌﺴﺘﺨﺪﻣﺔ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﻃﺮﻳﻘﺔ ﺍﻟﺘﻌﺒﲑ ﻋﻨﻬﺎ
ﺍﳌﻜﺎﻓﺌﺔ ﺣﺴﺐ ﻟﻐﺔ .C++
ﻼ ﺇﺫﺍ ﺃﺭﺩﻧﺎ ﺣﺴﺎﺏ ﺍﳌﺘﻮﺳﻂ ﺍﳊﺴﺎﰊ ﳋﻤﺴﺔ ﺣﺪﻭﺩ ﻓﻠﺪﻳﻨﺎ: ﻣﺜ ﹰ
٦١ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
=m
a +b +c +d +e
ﺟﱪﻳﹰﺎ:
5
ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﻭﺿﻊ ﺩﺍﺧﻞ ﺍﻷﻗﻮﺍﺱ ﻃﺮﻳﻘﺔ ﺍﻟﺘﻌﺒﲑ ﺣﺴﺐ ﻟﻐﺔ C++ﻷﻥ ﻋﻤﻠﻴﺔ ﺍﻟﻘﺴﻤﺔ ﳍﺎ ﺃﻭﻟﻮﻳﺔ
ﺍﻟﺘﻨﻔﻴﺬ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺍﳉﻤﻊ ﻭﺑﺎﻟﺘﺎﱄ ﻳﻌﲏ ﻭﺟﻮﺩﻫﺎ ﺣﺴﺎﺏ ﻧﺎﺗﺞ ﻗﺴﻤﺔ ﺍﻟﻜﻤﻴﺔ ) (a+b+c+d+eﻋﻠﻰ
ﺍﻟﻜﻤﻴﺔ .5ﺃﻣﺎ ﻏﻴﺎﻬﺑﺎ ﻓﻴﻌﲏ ﺣﺴﺎﺏ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ a+b+c+d+e/5ﺃﻱ ﺍﻟﻌﺒﺎﺭﺓ:
e
a+b+c+d+
5
ﻭﻫﺬﺍ ﻻ ﻳﺘﻔﻖ ﻣﻊ ﻣﺎﻫﻮ ﻣﻄﻠﻮﺏ ﺣﺴﺎﺑﻪ.
ﻟﻨﺄﺧﺬ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ﻣﻌﺎﺩﻟﺔ ﺧﻂ ﻣﺴﺘﻘﻴﻢ ﺍﻟﱵ ﻧﻌﱪ ﻋﻨﻬﺎ
y=mx + b ﺟﱪﻳﺎﹰ ،ﺑﺎﻟﺸﻜﻞ :
;y=m*x + b ﺣﺴﺐ ﻟﻐﺔ ،C++ﺑﺎﻟﺸﻜﻞ:
ﻻﺣﻆ ﺃﻧﻪ ﻻ ﺣﺎﺟﺔ ﻫﻨﺎ ﻻﺳﺘﺨﺪﺍﻡ ﺍﻷﻗﻮﺍﺱ ﺣﻴﺚ ﻳﺘﻢ ﺃﻭ ﹰﻻ ﺣﺴﺎﺏ ﻋﻤﻠﻴﺔ ﺍﻟﻀﺮﺏ ﻷﻥ ﳍﺎ ﺍﻷﻭﻟﻮﻳﺔ
ﻋﻠﻰ ﺍﳉﻤﻊ.
ﺃﻣﺎ ﺍﳌﺜﺎﻝ ﺍﻟﺘﺎﱄ ﻓﻬﻮ ﳛﺘﻮﻱ ﻋﻠﻰ ﻋﻤﻠﻴﺎﺕ ﺣﺴﺎﺏ ﺑﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻟﻀﺮﺏ ﻭﺍﻟﻘﺴﻤﺔ ﻭﺍﳉﻤﻊ
ﻭﺍﻟﻄﺮﺡ:
Z = pr % q+w/x - y ﺟﱪﻳﹰﺎ:
;Z= p*r % q+ w / x - y ﺣﺴﺐ ﻟﻐﺔ :C++
6 ١ ٢ ٤ ٣ ٥
ﺗﺒﲔ ﺍﻷﺭﻗﺎﻡ ﺍﳌﻜﺘﻮﺑﺔ ﺿﻤﻦ ﺩﻭﺍﺋﺮ ﺗﺮﺗﻴﺐ ﺗﻄﺒﻴﻖ ﺍﻟﻌﻤﻠﻴﺎﺕ .ﻳﺄﰐ ﺃﻭ ﹰﻻ ﺍﻟﻀﺮﺏ ،ﻓﺤﺴﺎﺏ
ﺑﺎﻗﻲ ﺍﻟﻘﺴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ ،ﻓﻌﻤﻠﻴﺔ ﺍﻟﻘﺴﻤﺔ ﺍﻧﻄﻼﻗﹰﺎ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ )ﻣﺴﺘﻔﻴﺪﻳﻦ ﺑﺎﻟﺘﺎﱄ ﻣﻦ ﺍﳋﺎﺻﺔ
ﺍﻟﺘﺠﻤﻴﻌﻴﺔ ﳍﺬﻩ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ( ﻋﻠﻰ ﺍﻋﺘﺒﺎﺭ ﺃﻬﻧﺎ ﺫﺍﺕ ﺃﻭﻟﻮﻳﺔ ﺃﻋﻠﻰ ﻣﻦ ﺗﻠﻚ ﺍﳋﺎﺻﺔ
ﺑﻌﻤﻠﻴﱵ ﺍﳉﻤﻊ ﻭﺍﻟﻄﺮﺡ ﺍﻟﻠﺘﲔ ﻳﺘﻢ ﺗﻄﺒﻴﻘﻬﻤﺎ ﺑﻌﺪ ﺫﻟﻚ ﻭﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ ﺃﻳﻀﹰﺎ.
ﻻ ﲢﺘﻮﻱ ﲨﻴﻊ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﳊﺴﺎﺑﻴﺔ ﻋﻠﻰ ﺃﺟﺰﺍﺀ ﳏﺼﻮﺭﺓ ﺿﻤﻦ ﺃﻗﻮﺍﺱ ﻣﺘﺪﺍﺧﻠﺔ ﻭﺇﻥ ﺣﻮﺕ ﻋﻠﻰ ﺃﺯﻭﺍﺝ
ﺩﺍﺧﻞ ﺃﻗﻮﺍﺱ ﻣﻦ ﺍﳌﻌﺎﻣﻼﺕ ﻟﻌﻤﻠﻴﺎﺕ ﺛﻨﺎﺋﻴﺔ .ﻓﻌﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﻻﲢﺘﻮﻱ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
a*(b+c)+c*(d+e)7
ﻋﻠﻰ ﺃﻗﻮﺍﺱ ﻣﺘﺪﺍﺧﻠﺔ ﻟﻜﻨﻬﺎ ﺗﺘﻀﻤﻦ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻷﻗﻮﺍﺱ ﺍﳌﻮﺟﻮﺩﺓ ﻋﻠﻰ ﻧﻔﺲ ﺍﳌﺴﺘﻮﻯ.
اﻟﻔﺼﻞ اﻷول ٦٢
ﺣﱴ ﻧﺘﻮﺻﻞ ﺇﱃ ﻓﻬﻢ ﺃﻓﻀﻞ ﻟﻘﻮﺍﻋﺪ ﺍﻷﻭﻟﻮﻳﺔ ﺑﲔ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﳌﺬﻛﻮﺭﺓ ﺃﻋﻼﻩ ،ﻟﻨﺄﺧﺬ ﻣﻌﺎﺩﻟﺔ ﻛﺜﲑ
ﺣﺪﻭﺩ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻟﺜﺎﻧﻴﺔ:
;y = a * x * x + b * x + c
ﺗﻮﺿﺢ ﺍﻷﺭﻗﺎﻡ ﺍﳌﻮﺟﻮﺩﺓ ﺿﻤﻦ ﺍﻟﺪﻭﺍﺋﺮ ﻋﻠﻰ ﺗﺴﻠﺴﻞ ﺣﺴﺎﺏ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺬﻱ ﺗﻄﺒﻘﻪ ﻟﻐﺔ C++ﻋﻠﻴﻬﺎ.
ﻻ ﻳﻮﺟﺪ ﰲ ﻟﻐﺔ C++ﻋﻤﻠﻴﺔ ﺣﺴﺎﺑﻴﺔ ﺧﺎﺻﺔ ﺑﻌﻤﻠﻴﺔ ﺍﻟﺮﻓﻊ ﺇﱃ ﻗﻮﺓ exponentiationﻟﺬﻟﻚ ﻗﻤﻨﺎ ﺑﺘﻤﺜﻴﻞ
ﺍﳊﺪ xﻋﻠﻰ ﺍﻟﺸﻜﻞ .x*xﺳﻮﻑ ﻧﺘﺤﺪﺙ ﻓﻴﻤﺎ ﺑﻌﺪ ﻋﻦ ﺍﻟﺘﺎﺑﻊ (“power”) powﺍﻟﺬﻱ ﳛﻘﻖ ﻋﻤﻠﻴﺔ 2
ﺍﻟﺮﻓﻊ ﺇﱃ ﻗﻮﺓ .ﻭﻟﻜﻦ ﺑﺴﺒﺐ ﺑﻌﺾ ﺍﻷﻣﻮﺭ ﺍﻟﺪﻗﻴﻘﺔ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺄﳕﺎﻁ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﱵ ﻳﺴﺘﺨﺪﻣﻬﺎ ﺍﻟﺘﺎﺑﻊ ،pow
ﺳﻮﻑ ﻧﺆﺟﻞ ﺷﺮﺡ ﺍﻟﺘﻔﺼﻴﻼﺕ ﺍﳌﺘﻌﻠﻘﺔ ﻬﺑﺬﺍ ﺍﻟﺘﺎﺑﻊ ﺣﱴ ﺍﻟﻔﺼﻞ .3
أﺥﻄﺎء ﺑﺮﻣﺠﻴﺔ ﺵﺎﺉﻌﺔ 5-1
ﺑﻔﺮﺽ ﺃﻧﻨﺎ ﻧﻌﻄﻲ ﻟﻠﻤﺘﺤﻮﻻﺕ c, b, aﻭ xﻗﻴﻤﹰﺎ ﺍﺑﺘﺪﺍﺋﻴﺔ ﲝﻴﺚ a=2 :ﻭ b=3ﻭ c=7ﻭ .x=5ﻳﺒﲔ ﺍﻟﺸﻜﻞ
12-1ﺗﺮﺗﻴﺐ ﺗﻄﺒﻴﻖ ﺍﻟﻌﻤﻠﻴﺎﺕ ﰲ ﻋﻤﻠﻴﺔ ﺣﺴﺎﺏ ﻛﺜﲑ ﺍﳊﺪﻭﺩ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻟﺜﺎﻧﻴﺔ ﺍﳌﺬﻛﻮﺭ ﺃﻋﻼﻩ.
ﻧﻌﻠﻢ ﺃﻧﻪ ﻣﻦ ﺍﳌﻤﻜﻦ ﺇﺿﺎﻓﺔ ﺃﻗﻮﺍﺱ ﻏﲑ ﺿﺮﻭﺭﻳﺔ ﺇﱃ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﳊﺴﺎﺑﻴﺔ ﻟﻨﺠﻌﻞ ﻣﻨﻬﺎ ﺗﻌﺎﺑﲑ ﺃﻭﺿﺢ.
ﻧﺴﻤﻲ ﻋﺎﺩ ﹰﺓ ﻫﺬﻩ ﺍﻷﻗﻮﺍﺱ ﻏﲑ ﺍﻟﻀﺮﻭﺭﻳﺔ ﺑـ "ﺃﻗﻮﺍﺱ ﺯﺍﺋﺪﺓ" .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﳝﻜﻦ ﻛﺘﺎﺑﺔ ﻣﻌﺎﺩﻟﺔ
ﻛﺜﲑ ﺍﳊﺪﻭﺩ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻟﺜﺎﻧﻴﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ:
;y=(a*x*x) + (b*x) + c
ﻧﻌﻤﺪ أﺣﻴﺎﻧًﺎ ﻓﻲ اﻟﺘﻌﺎﺑﻴﺮ اﻟﺠﺒﺮیﺔ إﻟﻰ إﺿﺎﻓﺔ أﻗﻮاس زاﺋﺪة ﻟﺠﻌﻞ هﺬﻩ
اﻟﺘﻌﺎﺑﻴﺮ أآﺜﺮ وﺿﻮﺣًﺎ .یﻤﻜﻨﻨﺎ اﻟﻘﻴﺎم ﺑﺬﻟﻚ ﻋﻨﺪ آﺘﺎﺑﺔ هﺬﻩ اﻟﺘﻌﺎﺑﻴﺮ ﺑﻠﻐﺔ .C++
آﻤﺎ ویﻔﻀﻞ أﺣﻴﺎﻧًﺎ ﻟﺰیﺎدة اﻟﻮﺿﻮح ﺕﻘﺴﻴﻢ اﻟﺘﻌﺎﺑﻴﺮ اﻟﺤﺴﺎﺑﻴﺔ اﻟﻤﻌﻘﺪة إﻟﻰ
أﺝﺰاء أﺹﻐﺮ وأﺳﻬﻞ ﻟﻠﻘﺮاءة.
ﺻﺤﺔ ﺃﻭ ﻋﺪﻡ ﺻﺤﺔ ﺷﺮﻁ ﻣﺎ .ﻋﻨﺪ ﲢﻘﻖ ﺍﻟﺸﺮﻁ ﺍﳌﻔﺮﻭﺽ ،ﻳﺒﺪﺃ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺟﺴﻢ
ﺑﻨﻴﺔ .ifﻭﰲ ﺣﺎﻝ ﻋﺪﻡ ﲢﻘﻘﻪ ﻻﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻫﺬﺍ ﺍﳉﺰﺀ .ﻛﻤﺎ ﺳﻨﺮﻯ ﰲ ﺍﳌﺜﺎﻝ ﺍﳌﺒﲔ ﻓﻴﻤﺎ ﻳﻠﻲ.
ﳝﻜﻦ ﺻﻴﺎﻏﺔ ﺍﻟﺸﺮﻭﻁ ﺍﳋﺎﺻﺔ ﺑﺎﻟﺒﲎ ﺍﻟﱵ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺗﻌﻠﻴﻤﺔ ifﺑﺎﺳﺘﺨﺪﺍﻡ ﻋﻤﻠﻴﺎﺕ ﺍﳌﺴﺎﻭﺍﺓ ﻭﺍﳌﻘﺎﺭﻧﺔ
ﺍﳌﻠﺨﺼﺔ ﰲ ﺍﻟﺸﻜﻞ .13-1ﻟﻜﻞ ﻋﻤﻠﻴﺎﺕ ﺍﳌﻘﺎﺭﻧﺔ ﻧﻔﺲ ﺍﳌﺴﺘﻮﻯ ﻣﻦ ﺍﻷﻭﻟﻮﻳﺔ ﻭﻫﻲ ﲡﻤﻴﻌﻴﺔ ﻣﻦ ﺍﻟﻴﺴﺎﺭ
ﺇﱃ ﺍﻟﻴﻤﲔ ،ﺃﻣﺎ ﻓﻠﻌﻤﻠﻴﱵ ﺍﳌﺴﺎﻭﺍﺓ ﻧﻔﺲ ﺍﳌﺴﺘﻮﻯ ﻣﻦ ﺍﻷﻭﻟﻮﻳﺔ ﺃﻳﻀﹰﺎ ﻟﻜﻨﻪ ﺃﺧﻔﺾ ﻣﻦ ﻣﺴﺘﻮﻯ ﺃﻭﻟﻮﻳﺔ
ﻋﻤﻠﻴﺎﺕ ﺍﳌﻘﺎﺭﻧﺔ ﻭﻫﻲ ﻛﺬﻟﻚ ﲡﻤﻴﻌﻴﺔ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ.
]< <íéÞ^nÖ]<íq…‚Ö]<àÚ<æ‚u<nÒ<íÛéÎ<h^Š£<l^é×ÛÃÖ]<h^Šu<؊׊i<<V12-1<ØÓÖ
ﻋﻤﻠﻴﺎت اﻟﻤﻘﺎرﻧﺔ
xأآﺒﺮ ﻣﻦ
y x>y > >
]< <íÞ…^Ϲ]æ<ì]æ^Š¹]<l^é×ÛÂ<Ùæ‚q<<V13-1<ØÓÖ
یﻤﻜﻦ أن یﺤﺪث ﺥﻄﺄ ﻗﻮاﻋﺪي ﻋﻨﺪﻣﺎ ﻧﻀﻊ ﻓﺮاﻏﺎت ﺑﻴﻦ اﻟﺮﻣﻮز اﻟﻤﻌﺒﺮة
ﻋﻦ اﻟﻌﻤﻠﻴﺎت اﻟﺘﺎﻟﻴﺔ.<= ،>= ،!= ،== : 7
أﺥﻄﺎء ﺑﺮﻣﺠﻴﺔ ﺵﺎﺉﻌﺔ 7-1
ﺕﺴﺒﺐ اﻟﻜﺘﺎﺑﺔ اﻟﻤﻌﻜﻮﺳﺔ ﻟﻠﻌﻤﻠﻴﺎت =! >= ،و =< ﻋﻠﻰ اﻟﺸﻜﻞ != => ،و
<= ﻋﻠﻰ اﻟﺘﺮﺕﻴﺐ ،ﺥﻄًﺄ ﻗﻮاﻋﺪیًﺎ .ﻓﻲ ﺑﻌﺾ اﻟﺤﺎﻻت ،ﻻ ﺕﺴﺒﺐ اﻟﻜﺘﺎﺑﺔ 7
ﻟﻠﻌﻤﻠﻴﺔ =! ﻋﻠﻰ اﻟﺸﻜﻞ != ﺥﻄﺄ ﻗﻮاﻋﺪیًﺎ ﻟﻜﻨﻬﺎ ﺕﺴﺒﺐ ﺣﺘﻤًﺎ ﺥﻄًﺄ ﻣﻨﻄﻘﻴًﺎ ذو
ﺕﺄﺛﻴﺮ ﻋﻠﻰ ﻣﺠﺮى ﺕﻨﻔﻴﺬ اﻟﺒﺮﻧﺎﻣﺞ.
ﻣﻦ اﻷﺥﻄﺎء اﻟﺒﺮﻣﺠﻴﺔ اﻟﺸﺎﺋﻌﺔ هﻨﺎك ﻣﺸﻜﻠﺔ اﻟﺨﻠﻂ ﻣﺎ ﺑﻴﻦ ﻋﻤﻠﻴﺔ اﻟﻤﺴﺎواة
)==( وﻋﻤﻠﻴﺔ اﻷﺳﻨﺎد )=( .یﺠﺐ أن ﻧﻘﺮأ ﻋﻤﻠﻴﺔ اﻟﻤﺴﺎواة ﻋﻠﻰ اﻟﺸﻜﻞ
"اﻟﻤﻌﺎﻣﻞ اﻷول یﺴﺎوي اﻟﻤﻌﺎﻣﻞ اﻟﺜﺎﻧﻲ" ﻓﻲ ﺣﻴﻦ یﺠﺐ أن ﻧﻘﺮأ ﻋﻤﻠﻴﺔ
7
اﻻﺳﻨﺎد ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ "اﻟﻤﻌﺎﻣﻞ اﻷول یﺄﺥﺬ ﻗﻴﻤﺔ اﻟﻤﻌﺎﻣﻞ اﻟﺜﺎﻧﻲ" .آﻤﺎ
ﺳﻨﺮى ﻻﺣﻘﺎً ،إن ﻋﻤﻠﻴﺔ اﻟﺨﻠﻂ ﺑﻴﻦ اﻟﻌﻤﻠﻴﺘﻴﻦ اﻟﺴﺎﺑﻘﺘﻴﻦ ﻻﺕﺴﺒﺐ ﺑﺎﻟﻀﺮورة
ﺥﻄًﺄ ﻗﻮاﻋﺪیًﺎ ﺳﻬﻞ اﻻآﺘﺸﺎف وأﻧﻤﺎ یﻤﻜﻦ أن ﺕﺴﺒﺐ ﺕﻐﻴﻴﺮًا ﺝﺬریًﺎ ﻓﻲ ﻣﻨﻄﻖ
اﻟﺒﺮﻧﺎﻣﺞ.
٦٥ C++ ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ.1
ﻋﻨﺪ.( ﻟﻠﻤﻘﺎﺭﻧﺔ ﺑﲔ ﺭﻗﻤﲔ ﻣﺪﺧﻠﲔ ﻣﻦ ﻗﺒﻞ ﺍﳌﺴﺘﺨﺪﻡif ) ﻳﺴﺘﺨﺪﻡ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺘﺎﱄ ﺳﺘﺔ ﺗﻌﻠﻴﻤﺎﺕ
.ﲢﻘﻖ ﺍﻟﺸﺮﻁ ﺍﳌﺮﺍﻓﻖ ﻷﻱ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺴﺎﺑﻖ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺔ ﺍﳋﺮﺝ ﺍﳌﺮﺍﻓﻘﺔ ﻟﺘﻠﻚ ﺍﻟﺘﻌﻠﻴﻤﺔ
ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳊﺎﻭﻱ ﻋﻠﻰ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﳌﺬﻛﻮﺭﺓ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺫﻛﺮ ﺛﻼﺛﺔ ﺃﺷﻜﺎﻝ14-1 ﻳﻮﺿﺢ ﺍﻟﺸﻜﻞ
.ﳐﺘﻠﻔﺔ ﳋﺮﺝ ﻫﺬﺍ ﺍﻟﱪﻧﺎﻣﺞ
< <íÞ…^Ϲ]æ<ì]æ^Š¹]<l^é×ÛÂ<Ý]‚~j‰]<V14-1<ØÓÖ]
ﰲ ﻛﻞ ﻣﺮﺓ ﻧﺮﻳﺪ ﻓﻴﻬﺎ ﺍﻟﺘﻌﺎﻣﻞstd: : ﺍﻟﱵ ﺗﻔﻴﺪ ﰲ ﺇﻟﻐﺎﺀ ﺍﳊﺎﺟﺔ ﺇﱃ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺎﺩﺋﺔUsing ﺗﻌﻠﻴﻤﺎﺕ
ﺩﻭﻥ ﺍﳊﺎﺟﺔ ﺇﱃcout ﺑﻌﺪ ﺫﻛﺮ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﳝﻜﻨﻨﺎ ﺫﻛﺮ.ﺧﺮﺝ/ﻣﻊ ﻣﺘﺤﻜﻤﺎﺕ ﳎﺎﺭﻱ ﺍﻟﺪﺧﻞ
.endl ﻭcin ﻛﺬﻟﻚ ﺍﻷﻣﺮ ﺑﺎﻟﻨﺴﺒﺔ ﻟـ.std: :cout :ﺍﻟﻜﺘﺎﺑﺔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ
ﻣﻼﺣﻈﺔ 2-1
ﰲ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺍﳌﺘﺤﻮﻻﺕ ﺍﳌﺴﺘﺨﺪﻣﺔ ﺿﻤﻦ ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ .ﺗﺬﻛﺮ ﺃﻧﻪ ﳝﻜﻦ ﺫﻛﺮ ﺍﻟﺘﺼﺮﳛﺎﺕ ﻋﻠﻰ
ﺷﻜﻞ ﺃﺳﻄﺮ ﻣﻨﻔﺼﻠﺔ ﺃﻭ ﺳﻄﺮ ﻭﺍﺣﺪ.
ﻻﺣﻆ ﺃﻥ ﺍﻟﱪﻧﺎﻣﺞ ﰲ ﺍﻟﺸﻜﻞ 14-1ﻳﺴﺘﺨﺪﻡ ﺃﺳﻠﻮﺏ ﺍﻹﺳﺘﺨﺮﺍﺝ ﺍﳌﺘﻌﺪﺩ ﻣﻦ ﳎﺮﻯ ﺍﻟﺪﺧﻞ ﻹﺩﺧﺎﻝ
ﻋﺪﺩﻳﻦ ﺻﺤﻴﺤﲔ ﺣﻴﺚ ﻳﺘﻢ ﻗﺮﺍﺀﺓ ﺍﻟﻘﻴﻤﺔ ﺍﻷﻭﱃ ﻟﻮﺿﻌﻬﺎ ﰲ ﺍﳌﺘﺤﻮﻝ num1ﰒ ﺗُﻘﺮﺃ ﺑﻌﺪﻫﺎ ﺍﻟﻘﻴﻤﺔ
ﺍﻟﺜﺎﻧﻴﺔ ﻟﺘﻮﺿﻊ ﰲ ﺍﳌﺘﺤﻮﻝ ) num2ﺍﻟﺴﻄﺮ .(18
ﻻﺣﻆ ﻃﺮﻳﻘﺔ ﺍﻹﺯﺍﺣﺔ ﺍﻟﱵ ﻛﺘﺐ ﻬﺑﺎ ﺟﺴﻢ ﺗﻌﻠﻴﻤﺔ ifﰲ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﺒﲔ ﰲ ﺍﻟﺸﻜﻞ .14-1ﺗﺴﺎﻋﺪ ﻫﺬﻩ
ﺍﻟﻄﺮﻳﻘﺔ ﻋﻠﻰ ﺯﻳﺎﺩﺓ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﻗﺮﺍﺀﺓ ﺍﻟﱪﻧﺎﻣﺞ .ﻳﺘﺄﻟﻒ ﺟﺴﻢ ﺗﻌﻠﻴﻤﺎﺕ ifﺍﻟﺴﺎﺑﻘﺔ ﻣﻦ ﺗﻌﻠﻴﻤﺔ ﻭﺍﺣﺪﺓ
ﻭﺳﻮﻑ ﻧﺮﻯ ﰲ ﺍﻟﻔﺼﻞ 2ﻛﻴﻔﻴﺔ ﻛﺘﺎﺑﺔ ﺟﺴﻢ ﻟﺘﻌﻠﻴﻤﺔ ‘ifﻣﺆﻟﻒ ﻣﻦ ﻋﺪﺓ ﺗﻌﻠﻴﻤﺎﺕ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻷﻗﻮﺍﺱ } {.
ﻋﺎدات ﺑﺮﻣﺠﻴﺔ ﺝﻴﺪة 17-1
ﺕﺒﺮز ذﻟﻚ اﻟﺠﺰء ﻣﻦ اﻟﺘﻌﻠﻴﻤﺔ if إن إزاﺣﺔ اﻟﺘﻌﻠﻴﻤﺎت داﺥﻞ ﺝﺴﻢ ﺕﻌﻠﻴﻤﺔ
ویﺰیﺪ ﻣﻦ اﻟﻘﺪرة ﻋﻠﻰ ﻗﺮاءة اﻟﺒﺮﻧﺎﻣﺞ.
إن وﺿﻊ ﻓﺎﺹﻠﺔ ﻣﻨﻘﻮﻃﺔ );( ﺑﻌﺪ اﻟﻘﻮس اﻷیﻤﻦ اﻟﺬي یﺤﺪد ﻧﻬﺎیﺔ ﺕﻌﻠﻴﻤﺔ
if
هﻮ ﻣﻦ اﻷﺥﻄﺎء اﻟﺒﺮﻣﺠﻴﺔ اﻟﺸﺎﺋﻌﺔ .آﻤﺎ أن وﺿﻌﻬﺎ ﺑﻌﺪ اﻟﺸﺮط اﻟﺨﺎص
ﺑﻬﺬﻩ اﻟﺘﻌﻠﻴﻤﺔ یﺆدي إﻟﻰ ﺕﻨﻔﻴﺬهﺎ دون اﻟﻘﻴﺎم ﺑﺄي ﻓﻌﻞ ﺑﻐﺾ اﻟﻨﻈﺮ ﻋﻦ آﻮن
7
اﻟﺸﺮط ﻣﺤﻘﻖ أم ﻻ واﻻﺳﻮء ﻣﻦ ذﻟﻚ أن ﺝﺴﻢ ﺕﻌﻠﻴﻤﺔ یﻨﻔﺼﻞ ﺑﻨﺘﻴﺠﺔ ذﻟﻚ
ﻋﻦ اﻟﺘﻌﻠﻴﻤﺔ ویﺘﻢ ﺕﻨﻔﻴﺬﻩ داﺋﻤًﺎ.
ﻻﺣﻆ ﻭﺟﻮﺩ ﺍﻟﻔﻮﺍﺻﻞ ﺑﲔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﰲ ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﻮﺿﺢ ﰲ ﺍﻟﺸﻜﻞ .14-1ﻣﻦ ﻫﺬﻩ ﺍﻟﻔﻮﺍﺻﻞ
ﻟﺪﻳﻨﺎ ﺇﺷﺎﺭﺍﺕ ﺍﳉﺪﻭﻟﺔ tabsﻭﺍﻷﺳﻄﺮ ﺍﳉﺪﻳﺪﺓ newlinesﻭﺍﻟﻔﺮﺍﻏﺎﺕ spacesﻭﺍﻟﱵ ﻳﺘﻢ ﲡﺎﻫﻠﻬﺎ ﻋﺎﺩ ﹰﺓ
ﻣﻦ ﻗﺒﻞ ﺍﳌﺘﺮﺟﻢ .ﻟﺬﻟﻚ ﻣﻦ ﺍﳌﻤﻜﻦ ﲡﺰﺋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﻋﺪﺓ ﺃﺳﻄﺮ ﻭﳝﻜﻦ ﺃﻳﻀﹰﺎ ﻭﳝﻜﻦ ﺃﻳﻀﹰﺎ ﻭﺿﻊ
ﺃﺟﺰﺍﺀﻫﺎ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺬﻱ ﻳﻔﻀﻠﻪ ﺍﳌﱪﻣﺞ ﻭﻟﻜﻦ ﳚﺐ ﺍﻻﻧﺘﺒﺎﻩ ﺇﱃ ﺃﻥ ﲡﺰﺋﺔ ﺍﳌﹸﻌﺮﻓﺎﺕ identifiersﻫﻲ
ﻋﻤﻠﻴﺔ ﻏﲑ ﺻﺤﻴﺤﺔ.
أﺥﻄﺎء ﺑﺮﻣﺠﻴﺔ ﺵﺎﺉﻌﺔ 10-1
ﺕﺴﺒﺐ ﺕﺠﺰﺋﺔ اﻟﻤُﻌﺮﻓﺎت إﻟﻰ أﺝﺰاء ﺑﻌﺪ وﺿﻊ ﻓﻮاﺹﻞ ﺿﻤﻨﻬﺎ ،ﺥﻄ ًﺄ
ﻗﻮاﻋﺪیًﺎ )ﻣﺜﺎل :آﺘﺎﺑﺔ mainﻋﻠﻰ اﻟﺸﻜﻞ .(ma in 7
اﻟﻔﺼﻞ اﻷول ٦٨
یﻤﻜﻦ أن ﺕﺸﻐﻞ ﺕﻌﻠﻴﻤﺔ ﻃﻮیﻠﺔ ﻋﺪة أﺳﻄﺮ .ﻟﺬﻟﻚ إذا ﻣﺎ ﺹﺎدﻓﺘﻨﺎ ﺕﻠﻚ اﻟﺤﺎﻟﺔ یﺠﺐ
ﺕﺠﺰﺋﺔ اﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﻋﺪة أﺳﻄﺮ وﻧﺨﺘﺎر آﻨﻘﺎط ﺕﺠﺰﺋﺔ ﻟﻬﺬﻩ اﻟﺘﻌﻠﻴﻤﺔ اﻟﻤﻮاﺿﻊ
اﻟﺘﻲ ﻟﻬﺎ ﻣﻌﻨﻰ ﻓﻲ ﻧﺺ اﻟﺘﻌﻠﻴﻤﺔ ﻣﺜﻞ اﻟﻔﻮاﺹﻞ )) (,ﻓﻲ ﺣﺎﻟﺔ وﺝﻮد ﻗﺎﺋﻤﺔ ﻣﻦ
اﻟﻌﻨﺎﺹﺮ( أو اﻟﻌﻤﻠﻴﺎت ﻓﻲ اﻟﻌﺒﺎرات اﻟﻄﻮیﻠﺔ .ﻋﻨﺪ ﺕﺠﺰﺋﺔ اﻟﺘﻌﻠﻴﻤﺔ ﻋﻠﻰ ﻋﺪة
أﺳﻄﺮ یﺠﺐ إزاﺣﺔ أﺳﻄﺮهﺎ ﻣﻘﺎرﻧﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺴﻄﺮ اﻷول.
ﻳﺒﲔ ﺍﻟﺸﻜﻞ 15-1ﺍﻷﻭﻟﻮﻳﺔ ﺑﲔ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﳌﺨﺘﻠﻔﺔ ﺍﻟﱵ ﰎ ﻋﺮﺿﻬﺎ ﰲ ﺍﻟﻔﺼﻞ .ﻭﻫﻲ ﻣﺒﻴﻨﺔ ﺣﺴﺐ
ﺗﺴﻠﺴﻞ ﺗﺮﺗﻴﺒﻬﺎ ﺍﻟﺘﻨﺎﺯﱄ .ﻻﺣﻆ ﺃﻥ ﲨﻴﻊ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺎﺕ ،ﻣﺎ ﻋﺪﺍ ﻋﻤﻠﻴﺔ ﺍﻹﺳﻨﺎﺩ )=( ﻫﻲ ﻋﻤﻠﻴﺎﺕ
ﲡﻤﻴﻌﻴﺔ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﺇﱃ ﺍﻟﻴﻤﲔ .ﻓﻌﻤﻠﻴﺔ ﺍﳉﻤﻊ ﻫﻲ ﻋﻤﻠﻴﺔ ﲡﻤﻴﻌﻴﺔ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﻟﺬﻟﻚ ﻳﺘﻢ ﺣﺴﺎﺏ ﻗﻴﻤﺔ
ﺍﻟﻌﺒﺎﺭﺓ x+y+zﻛﻤﺎ ﻟﻮ ﺃﻧﻨﺎ ﻛﺘﺒﻨﺎﻫﺎ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ .(x+y)+z :ﺃﻣﺎ ﺗﻌﻠﻴﻤﺔ ﺍﻹﺳﻨﺎﺩ )=( ﻓﻬﻲ
ﲡﻤﻴﻌﻴﺔ ﻣﻦ ﺍﻟﻴﻤﲔ ﺇﱃ ﺍﻟﻴﺴﺎﺭ ،ﻟﺬﻟﻚ ﺗﻜﺎﻓﺊ ﺍﻟﻌﺒﺎﺭﺓ x=y=0ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ x=(y=0) :ﺣﻴﺚ ﻧﺴﻨﺪ
ﺃﻭ ﹰﻻ ﺍﻟﻘﻴﻤﺔ 0ﺇﱃ yﰒ ﻧﺴﻨﺪ ﺍﻟﻨﺘﻴﺠﺔ )ﺍﻟﱵ ﻫﻲ (0ﺇﱃ .x
ﻋﺎدات ﺑﺮﻣﺠﻴﺔ ﺝﻴﺪة 20-1
ﻋﺪ إﻟﻰ ﺝﺪول أوﻟﻮیﺔ اﻟﻌﻤﻠﻴﺎت ﻋﻨﺪ آﺘﺎﺑﺔ اﻟﻌﺒﺎرات اﻟﺤﺎویﺔ ﻋﻠﻰ ﻋﺪة ﻋﻤﻠﻴﺎت.
ﺕﺄآﺪ ﻣﻦ أن ﺕﻨﻔﻴﺬ اﻟﻌﻤﻠﻴﺎت یﺘﻢ ﺣﺴﺐ اﻟﺘﺮﺕﻴﺐ اﻟﺬي ﺕﺘﻮﻗﻌﻪ .إذا ﻟﻢ ﺕﻜﻦ ﻣﺘﺄآﺪًا
ﻣﻦ ﺕﺮﺕﻴﺐ ﺣﺴﺎب اﻟﻌﻤﻠﻴﺎت ﻓﻲ اﻟﻌﺒﺎرات اﻟﻤﻌﻘﺪة ،ﻋﻠﻴﻚ ﺑﺎﺳﺘﺨﺪام اﻷﻗﻮاس
ﻟﺘﺤﺪیﺪ ﺕﺮﺕﻴﺐ ﺕﺴﻠﺴﻞ اﻟﻌﻤﻠﻴﺎت ﺕﻤﺎﻣًﺎ آﻤﺎ یﻤﻜﻦ أن ﻧﺠﺪﻩ ﻓﻲ اﻟﺸﻜﻞ اﻟﺠﺒﺮي
ﻟﻠﻌﺒﺎرات .آﻦ ﻣﺘﺄآﺪًا ﻣﻦ ﻣﺮاﻋﺎة أن ﺑﻌﺾ اﻟﻌﻤﻠﻴﺎت ﻣﺜﻞ ﻋﻤﻠﻴﺔ اﻹﺳﻨﺎد )=(
ﻻ ﻣﻦ اﻟﻴﺴﺎر إﻟﻰ اﻟﻴﻤﻴﻦ.
هﻲ ﻋﻤﻠﻴﺔ ﺕﺠﻤﻌﻴﺔ ﻣﻦ اﻟﻴﻤﻴﻦ إﻟﻰ اﻟﻴﺴﺎر ﺑﺪ ً
ﻗﻤﻨﺎ ﰲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺑﺘﻘﺪﱘ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻻﻣﻜﺎﻧﺎﺕ ﺍﳍﺎﻣﺔ ﺍﳌﺘﻮﻓﺮﺓ ﰲ ﻟﻐﺔ C++ﲟﺎ ﰲ ﺫﻟﻚ ﺇﻣﻜﺎﻧﻴﺎﺕ
ﻃﺒﺎﻋﺔ ﺍﳌﻌﻄﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﺃﻭ ﺇﺩﺧﺎﳍﺎ ﻣﻦ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ﻭﺇﻣﻜﺎﻧﻴﺎﺕ ﺗﻨﻔﻴﺬ ﺍﳊﺴﺎﺑﺎﺕ ﻭﺍﲣﺎﺫ
ﺍﻟﻘﺮﺍﺭﺍﺕ .ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﱐ ،ﺳﻮﻑ ﻧﻌﺘﻤﺪ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺘﻘﻨﻴﺎﺕ ﻋﻨﺪ ﻋﺮﺿﻨﺎ ﻷﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﺍﳌﻬﻴﻜﻠﺔ
.structured programmingﳑﺎ ﺳﻴﺠﻌﻠﻚ ﺃﻛﺜﺮ ﻣﻌﺮﻓﺔ ﺑﻄﺮﻕ ﺗﻨﺴﻴﻖ ﻧﺼﻮﺹ ﺍﻟﱪﺍﻣﺞ .ﻛﻤﺎ ﺃﻧﻨﺎ ﺳﻮﻑ
ﻧﺪﺭﺱ ﻛﻴﻔﻴﺔ ﲢﺪﻳﺪ ﻭﺗﻐﻴﲑ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﺬﻱ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﻓﻘﹰﺎ ﻟﻪ .ﻳﺴﻤﻰ ﻫﺬﺍ ﺍﻟﺘﺮﺗﻴﺐ ﺑـ
"ﺟﺮﻳﺎﻥ ﺍﻟﺘﺤﻜﻢ" .flow of control
]< <íË×j~¹]<l^é×ÛÃÖ]<°e<íéÃéÛrjÖ]æ<íèçÖæù]<<V15-1<ØÓÖ
ﺍﻟﻨﻈﺎﻡ .ﺳﻮﻑ ﻧﻘﻮﻡ ﺑﻜﻞ ﺫﻟﻚ ﻣﻦ ﺃﺟﻞ ﻣﺴﺄﻟﺔ ﳍﺎ ﻋﻼﻗﺔ ﺑﺎﻟﻮﺍﻗﻊ ﺍﻟﻌﻤﻠﻲ ﻭﻫﻲ ﻟﻴﺴﺖ ﻣﺴﺄﻟﺔ ﻣُﺼﻄﻨﻌﺔ
ﻭﻣﻄﺮﻭﺣﺔ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ .ﺳﻴﺘﻢ ﺫﻟﻚ ﻛﻠﻪ ﻗﺒﻞ ﺃﻥ ﻧﺘﻌﻠﻢ ﻛﻴﻒ ﻧﻜﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻏﺮﺿﻲ ﺍﻟﺘﻮﺟﻪ ﺑﻠﻐﺔ
.C++ﻭﻋﻨﺪﻣﺎ ﻧﺼﻞ ﺇﱃ ﺍﻟﻔﺼﻞ ﺍﻟﺴﺎﺩﺱ ،ﺳﻮﻑ ﻧﻜﻮﻥ ﺟﺎﻫﺰﻳﻦ ﻟﻠﺒﺪﺀ ﺑﺘﻄﻮﻳﺮ ﻧﻈﻢ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ
ﺑﻠﻐﺔ .C++ﰲ ﺍﳌﻘﺎﻃﻊ ﺍﻻﺧﺘﻴﺎﺭﻳﺔ "ﻣﺎﺫﺍ ﻋﻦ ﺍﻷﻏﺮﺍﺽ" ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﻬﻧﺎﻳﺔ ﺍﻟﻔﺼﻮﻝ 6 :ﻭ 7ﻭ ،9ﺳﻮﻑ
ﻧﺘﻌﺮﺽ ﻟﻜﻴﻔﻴﺔ ﻛﺘﺎﺑﺔ ﺍﻟﻨﻈﺎﻡ ﻏﺮﺿﻲ ﺍﻟﺘﻮﺟﻪ ﺍﻟﺬﻱ ﲢﺪﺛﻨﺎ ﻋﻨﻪ ﰲ ﺍﻟﻔﺼﻮﻝ ﺍﻟﺴﺎﺑﻘﺔ ﺑﻠﻐﺔ .C++
ﺳﺘﺴﺎﻋﺪﻧﺎ ﻫﺬﻩ ﺍﳊﺎﻟﺔ ﺍﻟﺪﺭﺍﺳﻴﺔ ﻋﻠﻰ ﻋﺮﺽ ﺍﻟﻌﺎﺩﺍﺕ ﻭﺍﻟﺘﺼﺮﻓﺎﺕ ﺍﻟﱵ ﳝﻜﻦ ﺃﻥ ﺗﻮﺍﺟﻬﻚ ﰲ ﻋﺎﱂ
ﺍﻟﻌﻤﻠﻲ ﺍﳊﻘﻴﻘﻲ .ﺗﺘﻤﻴﺰ ﺣﺎﻟﺘﻨﺎ ﺍﻟﺪﺭﺍﺳﻴﺔ ﺑﻜﻮﻬﻧﺎ ﻧﺴﺨﺔ ﻣﺼﻐﺮﺓ ﻋﻦ ﻣﺴﺄﻟﺔ ﻣﻮﺟﻮﺩﺓ ﰲ ﺍﻟﻌﺎﱂ ﺍﳊﻘﻴﻘﻲ،
ﻭﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺫﻟﻚ ﻓﺈﻧﻨﺎ ﻟﻦ ﳒﺪ ﺻﻌﻮﺑﺔ ﻟﻌﺮﺽ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻌﺎﺩﺍﺕ ﻭﺍﻟﺘﺼﺮﻓﺎﺕ ﺍﻟﱵ ﳚﺐ ﺃﻥ
ﳝﺘﻠﻜﻬﺎ ﺍﳌﱪﻣﺞ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﻫﻜﺬﺍ ﻣﺴﺎﺋﻞ .ﺇﺫﺍ ﻛﻨﺖ ﻃﺎﻟﺒﹰﺎ ﻭﱂ ﻳﻘﻢ ﻣﺪﺭﺳﻚ ﺑﺄﺧﺬ ﻫﺬﻩ ﺍﳊﺎﻟﺔ
ﺍﻟﺪﺭﺍﺳﻴﺔ ﺑﻌﲔ ﺍﻻﻋﺘﺒﺎﺭ ﻋﻨﺪ ﺗﺪﺭﻳﺴﻚ ﻟﻠﻐﺔ ،C++ﻓﺈﻧﻨﺎ ﻧﻨﺼﺤﻚ ﺑﻘﻮﺓ ﺑﺎﻟﺪﺧﻮﻝ ﰲ ﻫﺬﻩ ﺍﻟﺘﺠﺮﺑﺔ.
ﻷﻬﻧﺎ ﺳﺘﺴﺎﻋﺪﻙ ﻋﻠﻰ ﺗﻌﻠﻢ ﺍﻟﺘﺼﻤﻴﻢ ﻏﺮﺿﻲ ﺍﻟﺘﻮﺟﻪ ﺑﺎﺳﺘﺨﺪﺍﻡ UMLﻭﺳﻮﻑ ﺗﻘﻮﻱ ﻗﺪﺭﺗﻚ ﻋﻠﻰ ﻗﺮﺍﺀﺓ
ﺍﻟﻨﺼﻮﺹ ﺍﻟﱪﳎﻴﺔ ﺍﻟﱵ ﻳﺒﻠﻎ ﻃﻮﳍﺎ ﺣﻮﺍﱄ 1200ﺳﻄﺮ ﺑﺮﳎﻲ ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ .C++
ﻟﻨﺒﺪﺃ ﺑﻌﺮﺽ ﺑﻌﺾ ﺍﳌﺼﻄﻠﺤﺎﺕ ﺍﳋﺎﺻﺔ ﺑﺄﺳﻠﻮﺏ ﺍﻟﺘﻔﻜﲑ ﻏﺮﺿﻲ ﺍﻟﺘﻮﺟﻪ .ﺍﻧﻈﺮ ﺣﻮﻟﻚ ﰲ ﺍﻟﻌﺎﱂ
ﺍﶈﻴﻂ ﺑﻚ ﺳﻮﻑ ﲡﺪﻩ ﺣﻮﻟﻚ ﺣﻴﺜﻤﺎ ﻧﻈﺮﺕ ﺇﻬﻧﺎ ﺍﻷﻏﺮﺍﺽ .objectsﻧﺬﻛﺮ ﻣﻨﻬﺎ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ:
ﺍﻟﺒﺸﺮ ،ﺍﳊﻴﻮﺍﻧﺎﺕ ،ﺍﻟﻨﺒﺎﺗﺎﺕ ،ﺍﻟﺴﻴﺎﺭﺍﺕ ،ﺍﻟﻄﺎﺋﺮﺍﺕ ،ﺍﻷﺑﻨﻴﺔ ،ﺁﻻﺕ ﺟﺰ ﺍﻟﻌﺸﺐ ،ﺍﳊﺎﺳﺒﺎﺕ ﻭﻏﲑﻫﺎ.
ﻳﻌﺘﻤﺪ ﺃﺳﻠﻮﺏ ﺗﻔﻜﲑ ﺍﻟﻜﺎﺋﻨﺎﺕ ﺍﻟﺒﺸﺮﻳﺔ ﻋﻠﻰ ﺍﻷﻏﺮﺍﺽ ﻓﻨﺤﻦ ﳕﺘﻠﻚ ﺗﻠﻚ ﺍﻟﻘﺪﺭﺓ ﺍﳋﺎﺭﻗﺔ ﻋﻠﻰ ﺍﻟﺘﺠﺮﻳﺪ
abstractionﺍﻟﱵ ﺗﺴﻤﺢ ﻟﻨﺎ ﺑﺎﻟﻨﻈﺮ ﺇﱃ ﺍﻟﺼﻮﺭ ﺍﳌﻌﺮﻭﺿﺔ ﻋﻠﻰ ﺃﻬﻧﺎ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻷﻏﺮﺍﺽ ﻣﺜﻞ ﺍﻟﺒﺸﺮ،
ﺍﻟﻄﺎﺋﺮﺍﺕ ،ﺍﻷﺷﺠﺎﺭ ،ﺑﺪ ﹰﻻ ﻣﻦ ﺃﻬﻧﺎ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺒﻘﻊ ﺍﳌﻨﻔﺼﻠﺔ ﻭﺍﳌﻠﻮﻧﺔ .ﻛﻤﺎ ﳝﻜﻨﻨﺎ ﺇﺫﺍ ﺃﺭﺩﻧﺎ ﺃﻥ ﻧﻔﻜﺮ
ﻼ ﺑﺎﻟﺸﻮﺍﻃﺊ ﺑﺪ ﹰﻻ ﻣﻦ ﺣﺒﺎﺕ ﺍﻟﺮﻣﻞ ،ﺑﺎﻟﻐﺎﺑﺎﺕ ﺑﺪ ﹰﻻ ﺑﺎﻋﺘﻤﺎﺩ ﻣﺴﺘﻮﻯ ﺃﻋﻠﻰ ﻣﻦ ﺍﻟﺘﺠﺮﻳﺪ ﺑﺄﻥ ﻧﻔﻜﺮ ﻣﺜ ﹰ
ﻣﻦ ﺍﻷﺷﺠﺎﺭ .ﺑﺎﻟﺒﻴﻮﺕ ﺑﺪ ﹰﻻ ﻣﻦ ﺍﻟﻠﺒﻨﺎﺕ ﺍﳌﺆﻟﻔﺔ ﻣﻨﻬﺎ ﻭﺑﺎﻟﺒﻴﻮﺕ ﺑﺪ ﹰﻻ ﻣﻦ ﺍﻟﻠﺒﻨﺎﺕ ﺍﳌﺆﻟﻔﺔ ﳍﺎ.
ﳓﻦ ﳕﻴﻞ ﺇﱃ ﺗﻘﺴﻴﻢ ﺍﻷﻏﺮﺍﺽ ﺇﱃ ﻓﺌﺘﲔ :ﺍﻷﻏﺮﺍﺽ ﺍﳊﻴﺔ ﻭﺍﻷﻏﺮﺍﺽ ﺍﳉﺎﻣﺪﺓ .ﻓﺎﻷﻏﺮﺍﺽ ﺍﳊﻴﺔ ﺗﺘﻤﺘﻊ
ﺑﻨﻮﻉ ﻣﻦ ﺍﳊﻴﺎﺓ ﻓﻬﻲ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺍﻟﺘﺤﺮﻙ ﻭﻋﻠﻰ ﺍﻟﻘﻴﺎﻡ ﺑﺄﺷﻴﺎﺀ ﻋﺪﻳﺪﺓ .ﺃﻣﺎ ﺍﻷﻏﺮﺍﺽ ﺍﳉﺎﻣﺪﺓ ﻣﺜﻞ
ﺍﳌﻨﺎﺷﻒ ،ﻓﻬﻲ ﺗﺒﺪﻭ ﻏﲑ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺍﻟﻘﻴﺎﻡ ﺑﺄﻱ ﺷﺊ .ﻭﻫﻲ ﻣﻦ ﻧﻔﺲ ﻧﻮﻉ ﺍﻷﻏﺮﺍﺽ ﺍﶈﻴﻄﺔ ﺑﻨﺎ .ﻟﺪﻯ
ﲨﻴﻊ ﺍﻷﻏﺮﺍﺽ ﺍﻟﺴﺎﺑﻘﺔ ﺍﳊﻴﺔ ﻭﺍﳉﺎﻣﺪﺓ ﺑﻌﺾ ﺍﻷﺷﻴﺎﺀ ﺍﳌﺸﺘﺮﻛﺔ .ﻓﻠﻬﺎ ﺻﻔﺎﺕ attributesﻣﺜﻞ ﺍﳊﺠﻢ،
ﺍﻟﺸﻜﻞ ،ﺍﻟﻠﻮﻥ ،ﺍﻟﻮﺯﻥ ﻭﻏﲑﻫﺎ ﻣﻦ ﺍﻟﺼﻔﺎﺕ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺫﻟﻚ ﻓﻬﻲ ﺗُﻈﻬﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﺼﺮﻓﺎﺕ
ﻼ ﳝﻜﻦ ﺃﻥ ﺗﺘﺪﺣﺮﺝ ﻭﺗﺮﺗﺪ ﻭﺃﻥ ﺗﻨﺘﻔﺦ ﺃﻭ ﺗﻔﺮﻍ ﻣﻦ ﺍﳍﻮﺍﺀ .ﻛﻤﺎ ﳝﻜﻦ ﻟﻠﻄﻔﻞ .behaviorsﻓﺎﻟﻜﺮﺓ ﻣﺜ ﹰ
ﺍﻟﺮﺿﻴﻊ ﺃﻥ ﻳﺒﻜﻲ ﻭﻳﻨﺎﻡ ﻭﻳﺪﺏ ﻭﳝﺸﻲ ﻭﻳﺮﻣﺶ ﺑﻌﻴﻨﻴﻪ .ﻭﳝﻜﻦ ﻟﻠﺴﻴﺎﺭﺓ ﺃﻳﻀﹰﺎ ﺃﻥ ﺗﺘﺴﺎﺭﻉ ﻭﺃﻥ ﺗﻔﺮﻣﻞ
ﻭﺃﻥ ﺗﻌﻤﻞ ﻏﲑ ﺫﻟﻚ.
ﻳﺘﻌﻠﻢ ﺍﻟﺒﺸﺮ ﻋﻦ ﺍﻷﻏﺮﺍﺽ ﻣﻦ ﺧﻼﻝ ﺩﺭﺍﺳﺔ ﺻﻔﺎﻬﺗﺎ ﻭﻣﻦ ﺧﻼﻝ ﻣﻼﺣﻈﺔ ﺗﺼﺮﻓﺎﻬﺗﺎ .ﳝﻜﻦ ﺃﻥ ﻳﻜﻮﻥ
ﻟﻌﺪﺓ ﺃﻏﺮﺍﺽ ﳐﺘﻠﻔﺔ ﺍﻟﻜﺜﲑ ﻣﻦ ﺍﻟﺼﻔﺎﺕ ﺍﳌﺸﺘﺮﻛﺔ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺇﻇﻬﺎﺭﻫﺎ ﻟﻨﻔﺲ ﺍﻟﺘﺼﺮﻓﺎﺕ .ﻭﳝﻜﻦ
ﺑﺎﻟﺘﺎﱄ ﺃﻥ ﻧﻘﺎﺭﻥ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ﻣﺎ ﺑﲔ ﺍﻷﻃﻔﺎﻝ ﺍﻟﺮﺿﻊ ﻭﺍﻟﻜﺒﺎﺭ ،ﻣﺎ ﺑﲔ ﺍﻟﺒﺸﺮ ﻭﻗﺮﻭﺩ ﺍﻟﺸﻤﺒﺎﻧﺰﻱ.
٧١ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﻛﻤﺎ ﳝﻜﻦ ﺃﻥ ﳒﺪ ﺍﻟﻜﺜﲑ ﻣﻦ ﺍﻷﺷﻴﺎﺀ ﺍﳌﺸﺘﺮﻛﺔ ﻣﺎ ﺑﲔ ﺍﻟﺴﻴﺎﺭﺍﺕ ﻭﺍﻟﺸﺎﺣﻨﺎﺕ ﻭﻋﺮﺑﺎﺕ ﺍﻟﻨﻘﻞ ﺍﻟﺼﻐﲑﺓ
ﺍﳊﻤﺮﺍﺀ ﻭﺃﺣﺬﻳﺔ ﺍﻟﺘﺰﰿ ﺍﳌﺰﻭﺩﺓ ﺑﺪﻭﺍﻟﻴﺐ.
ﺗﻘﻮﻡ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ (OOP) object-oriented programmingﺑﻨﻤﺬﺟﺔ ﺃﻏﺮﺍﺽ ﺍﻟﻌﺎﱂ ﺍﳊﻘﻴﻘﻲ ﻣﻦ
ﺧﻼﻝ ﺗﻄﻮﻳﺮ ﺑﲎ ﻣﺮﻧﺔ )ﻧﻈﻢ ﻭﺑﺮﺍﻣﺞ( ﳑﺎﺛﻠﺔ ﳍﺎ .ﻓﻬﻲ ﺗﺴﺘﻔﻴﺪ ﻣﻦ ﻣﻴﺰﺍﺕ ﺍﻟﻌﻼﻗﺎﺕ ﺑﲔ ﺍﻷﻏﺮﺍﺽ ﺍﻟﱵ
ﺗﻨﺘﻤﻲ ﺇﱃ ﻭﺻﻒ ﻣﻌﲔ ﻓﻌﻠﻰ ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﺗﺘﻤﺘﻊ ﺍﻷﻏﺮﺍﺽ ﺍﻟﱵ ﺗﻨﺘﻤﻲ ﺇﱃ ﺻﻒ ﻭﺍﺣﺪ-ﻣﺜﻞ ﺻﻒ
ﺍﻟﺴﻴﺎﺭﺍﺕ ﺑﻨﻔﺲ ﺍﳋﻮﺍﺹ .ﻛﻤﺎ ﺃﻬﻧﺎ ﺗﺴﺘﻔﻴﺪ ﻣﻦ ﻋﻼﻗﺎﺕ ﺍﻟﺘﻮﺭﻳﺚ inheritance relationshipsﻭﺣﱴ ﻣﻦ
ﻋﻼﻗﺎﺕ ﺍﻟﺘﻮﺭﻳﺚ ﺍﳌﺘﻌﺪﺩ multiple inheritance relationshipsﺣﻴﺚ ﳚﺮﻱ ﺫﻟﻚ ﺑﺄﻥ ﺗﺮﺙ ﺍﻟﺼﻔﻮﻑ
ﺻﻔﺎﺕ ﺍﻟﺼﻔﻮﻑ ﺍﳌﻮﺟﻮﺩﺓ ﻣﺴﺒﻘﹰﺎ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺍﻟﺼﻔﺎﺕ ﺍﳋﺎﺻﺔ ﺍﻟﱵ ﺗﺘﻤﺘﻊ ﻬﺑﺎ ﺍﻷﻏﺮﺍﺽ ﺍﻟﱵ ﻬﻧﺘﻢ
ﻬﺑﺎ .ﻓﺄﻏﺮﺍﺽ ﺻﻒ ﺍﻟﺴﻴﺎﺭﺍﺕ ﺫﺍﺕ ﺍﻟﺴﻘﻒ ﺍﻟﻘﺎﺑﻞ ﻟﻠﻄﻲ ﳍﺎ ﻧﻔﺲ ﺧﺼﺎﺋﺺ ﺃﻏﺮﺍﺽ ﺻﻒ ﺍﻟﺴﻴﺎﺭﺍﺕ
ﺍﻟﻌﺎﻡ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﻛﻮﻥ ﺳﻘﻔﻬﺎ ﻗﺎﺑﻞ ﻟﻠﻄﻲ.
ﺗﻌﻄﻴﻨﺎ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺃﺳﻠﻮﺑﹰﺎ ﺃﻛﺜﺮ ﻃﺒﻴﻌﻴﺔ ﻭﺃﻛﺜﺮ ﻓﻄﺮﻳﺔ ﰲ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻋﻤﻠﻴﺔ ﺍﻟﱪﳎﺔ ﻭﺫﻟﻚ ﻣﻦ
ﺧﻼﻝ ﳕﺬﺟﺘﻬﺎ ﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﱂ ﺍﳊﻘﻴﻘﻲ ﻭﺧﺼﺎﺋﺼﻬﺎ ﻭﺳﻠﻮﻛﻬﺎ .ﻛﻤﺎ ﺃﻬﻧﺎ ﺗﻘﻮﻡ ﺑﻨﻤﺬﺟﺔ ﺍﻻﺗﺼﺎﻻﺕ ﻣﺎ
ﺑﲔ ﺍﻷﻏﺮﺍﺽ ﲤﺎﻣﹰﺎ ﻛﻤﺎ ﻳﻔﻌﻞ ﺍﻟﺒﺸﺮ ﻋﻨﺪﻣﺎ ﻳﻘﻮﻣﻮﻥ ﺑﺈﺭﺳﺎﻝ ﺍﻟﺮﺳﺎﺋﻞ ﺑﻌﻀﻬﻢ ﻟﺒﻌﺾ) ،ﻛﻤﺎ ﰲ ﺣﺎﻟﺔ
ﺿﺎﺑﻂ ﻳﺄﻣﺮ ﺟﻨﻮﺩﻩ ﺑﺎﻟﻮﻗﻮﻑ ﰲ ﺣﺎﻟﺔ ﺍﻧﺘﺒﺎﻩ( ﻓﺎﻷﻏﺮﺍﺽ ﺗﺘﺨﺎﻃﺐ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﺮﺳﺎﺋﻞ.
ﺗﻘﻮﻡ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﺇﺫﹰﺍ ﺑﺘﻐﻠﻴﻒ encapsulationﺍﳌﻌﻄﻴﺎﺕ )ﺍﳋﺼﺎﺋﺺ ﻭﺍﻟﺼﻔﺎﺕ( ﻭﺍﻟﺘﻮﺍﺑﻊ
)ﺍﻟﺘﺼﺮﻓﺎﺕ ﻭﺍﻟﺴﻠﻮﻙ( ﺑﻮﺣﺪﺍﺕ ﻧﺴﻤﻴﻬﺎ "ﺍﻷﻏﺮﺍﺽ" ﲟﻌﲎ ﺃﻥ ﺍﳌﻌﻄﻴﺎﺕ ﻭﺍﻟﺘﻮﺍﺑﻊ ﺍﳋﺎﺻﺔ ﺑﻐﺮﺽ ﻣﺎ ﻫﻲ
ﻋﺒﺎﺭﺓ ﻋﻦ ﻋﻨﺎﺻﺮ ﻣﺮﺗﺒﻄﺔ ﻣﻊ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ ﺑﺸﻜﻞ ﻭﺛﻴﻖ .ﲤﺘﻠﻚ ﺍﻷﻏﺮﺍﺽ ﺃﻳﻀﹰﺎ ﺧﺎﺻﺔ ﺇﺧﻔﺎﺀ ﺍﳌﻌﻠﻮﻣﺎﺕ
.information hidingﻫﺬﺍ ﻳﻌﲏ ﺃﻥ ﺍﻷﻏﺮﺍﺽ ﺗﻌﺮﻑ ﻛﻴﻒ ﺗﺘﺨﺎﻃﺐ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﻣﻦ ﺧﻼﻝ ﻭﺍﺟﻬﺎﺕ
interfacesﻣُﻌﺮﻓﺔ ﺟﻴﺪﺍﹰ ،ﻻ ﻳُﺴﻤﺢ ﻋﺎﺩﺓ ﻟﻸﻏﺮﺍﺽ ﺃﻥ ﺗﻌﺮﻑ ﻛﻴﻒ ﰎ ﺑﻨﺎﺀ ﺍﻷﻏﺮﺍﺽ ﺍﻷﺧﺮﻯ )ﳚﺮﻱ
ﺇﺧﻔﺎﺀ ﺗﻔﺎﺻﻴﻞ ﻋﻤﻠﻴﺔ ﺍﻟﺒﻨﺎﺀ ﺑﻮﺍﺳﻄﺔ ﺍﻷﻏﺮﺍﺽ ﻧﻔﺴﻬﺎ( .ﳝﻜﻦ ﻟﻨﺎ ﺑﺎﻟﺘﺄﻛﻴﺪ ﻗﻴﺎﺩﺓ ﺳﻴﺎﺭﺓ ﺩﻭﻥ ﺃﻥ ﻧﻌﺮﻑ
ﻛﻴﻒ ﻳﻌﻤﻞ ﳏﺮﻛﻬﺎ ﺩﺍﺧﻠﻴﹰﺎ ﻭﻛﻴﻒ ﺗﺘﻢ ﻋﻤﻠﻴﺔ ﻧﻘﻞ ﺍﳊﺮﻛﺔ ﻭﻧﻔﺚ ﺍﻟﻐﺎﺯﺍﺕ ﻣﻦ ﺧﻼﻝ ﺍﻟﻌﺎﺩﻡ .ﺳﻮﻑ ﻧﺮﻯ
ﻻﺣﻘﹰﺎ ﳌﺎﺫﺍ ﺗﻔﻴﺪ ﻋﻤﻠﻴﺔ ﺇﺧﻔﺎﺀ ﺍﳌﻌﻠﻮﻣﺎﺕ ﰲ ﻋﻤﻠﻴﺔ ﻫﻨﺪﺳﺔ ﺍﻟﱪﳎﻴﺎﺕ.
ﲤﻴﻞ ﺍﻟﱪﳎﺔ ﺑﻠﻐﺔ Cﻭﻏﲑﻫﺎ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻹﺟﺮﺍﺋﻴﺔ procedural programming languagesﺃﻥ ﺗﻜﻮﻥ
ﻣﻮﺟﻬﺔ ﺑﺎﻷﻓﻌﺎﻝ action-orientedﰲ ﺣﲔ ﺃﻬﻧﺎ ﻣﻊ C++ﻣﻮﺟﻬﺔ ﺑﺎﻷﻏﺮﺍﺽ .ﻓﻤﻊ ،Cﺗﻌﺪ ﺍﻟﺘﻮﺍﺑﻊ
functionsﻫﻲ ﻭﺣﺪﺓ ﺍﻟﺒﻨﺎﺀ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﱪﺍﻣﺞ .ﺃﻣﺎ ﻣﻊ ،C++ﳒﺪ ﺃﻥ ﺍﻟﺼﻔﻮﻑ classesﺍﻟﱵ ﻧﺸﺘﻖ
ﻣﻨﻬﺎ ﻧﺴﺦ ﻋﻠﻰ ﺷﻜﻞ ﺃﻏﺮﺍﺽ ،ﺗﺸﻜﻞ ﻭﺣﺪﺓ ﺍﻟﺒﻨﺎﺀ ﺍﻟﺮﺋﻴﺴﻴﺔ.
ﻳﺮﻛﺰ ﺍﳌﱪﳎﻮﻥ ﺑﻠﻐﺔ Cﺍﻫﺘﻤﺎﻣﻬﻢ ﻋﻠﻰ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﱵ ﺗﺘﺄﻟﻒ ﻣﻦ ﳎﻤﻮﻋﺔ ﺍﻷﻓﻌﺎﻝ ﺍﻟﱵ ﺗﺸﺘﺮﻙ ﻟﺘﻨﻔﻴﺬ
ﻣﻬﻤﺔ ﻣﺸﺘﺮﻛﺔ .ﻭﻳﺘﻢ ﲡﻤﻴﻊ ﺍﻟﺘﻮﺍﺑﻊ ﻟﺘﺸﻜﻞ ﺑﺮﻧﺎﳎﹰﺎ .ﻣﻦ ﺍﻟﻄﺒﻴﻌﻲ ﺃﻥ ﺗﻜﻮﻥ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻬﻤﺔ ﺟﺪﺍﹰ،
ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﱪﺍﻣﺞ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ Cﻭﻟﻜﻦ ﻳُﻨﻈﺮ ﺇﻟﻴﻬﺎ ﻋﻠﻰ ﺃﻬﻧﺎ ﻣﻮﺟﻮﺩﺓ ﻟﺘﺪﻋﻢ ﺍﻷﻓﻌﺎﻝ ﺍﻟﱵ ﺗﻘﻮﻡ ﻬﺑﺎ
ﺍﻟﺘﻮﺍﺑﻊ .ﺗﺴﺎﻋﺪ ﺍﻷﻓﻌﺎﻝ verbsﺍﻟﻮﺍﺭﺩ ﺫﻛﺮﻫﺎ ﰲ ﻧﺼﻮﺹ ﺗﻌﺮﻳﻒ ﺗﻮﺻﻴﻒ ﻧﻈﺎﻡ ﻣﺎ ،ﻣﱪﳎﻲ ﻟﻐﺔ C
ﻋﻠﻰ ﲢﺪﻳﺪ ﳎﻤﻮﻋﺔ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﻮﺍﺟﺐ ﻛﺘﺎﺑﺘﻬﺎ ﻣﻦ ﺃﺟﻞ ﺗﻄﻮﻳﺮ ﺍﻟﻨﻈﺎﻡ ﻛﻜﻞ.
اﻟﻔﺼﻞ اﻷول ٧٢
ﻳﺮﻛﺰ ﺍﳌﱪﳎﻮﻥ ﺑﻠﻐﺔ C++ﺍﻫﺘﻤﺎﻣﻬﻢ ﻋﻠﻰ ﺧﻠﻖ ﺍﻷﳕﺎﻁ ﺍﳌﹸﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻠﻬﻢ user-defined typesﻭﺍﻟﱵ
ﻧﺴﻤﻴﻬﺎ ﺻﻔﻮﻑ .classesﳛﺘﻮﻱ ﻛﻞ ﺻﻒ ﻣﻦ ﺍﻟﺼﻔﻮﻑ ﻋﻠﻰ ﻣﻌﻄﻴﺎﺕ ﻭﻋﻠﻰ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻮﺍﺑﻊ
ﻟﻠﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ .ﻧﺴﻤﻲ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﺪﺍﺧﻠﺔ ﰲ ﺗﺮﻛﻴﺐ ﺍﻟﺼﻒ ﺑـ "ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﺪﺍﺧﻠﻴﺔ" data-membersﰲ
ﺣﲔ ﻧﺴﻤﻲ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﺪﺍﺧﻠﺔ ﰲ ﺗﺮﻛﻴﺐ ﺍﻟﺼﻒ ﺑـ "ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﺪﺍﺧﻠﻴﺔ" .member functionsﲤﺎﻣﹰﺎ ﻛﻤﺎ
ﻟﻮ ﻛﻨﺎ ﳔﻠﻖ ﻧﺴﺨﺔ ﻣﻦ ﺍﻟﻨﻤﻂ ﺍﻷﺳﺎﺳﻲ intﻭﺍﻟﱵ ﻧﺴﻤﻴﻬﺎ ﻣﺘﺤﻮﻝ variableﳝﻜﻦ ﻟﻨﺎ ﺃﻥ ﳔﻠﻖ ﻧﺴﺨﺔ
ﻣﻦ ﳕﻂ ﻣُﻌﺮﻑ ﻣﻦ ﻗﺒﻞ ﺍﳌﺴﺘﺨﺪﻡ )ﺃﻱ ﺻﻒ( ﻭﻧﺴﻤﻴﻪ ﰲ ﻫﺬﻩ ﺍﳊﺎﻟﺔ ﻏﺮﺽ .objectﻳﺴﺘﺨﺪﻡ ﺍﳌﱪﻣﺞ
ﺍﻷﳕﺎﻁ ﺍﻷﺳﺎﺳﻴﺔ ﺍﳉﺎﻫﺰﺓ ﻋﻠﻰ ﺃﻬﻧﺎ ﻭﺣﺪﺍﺕ ﺑﻨﺎﺀ ﻟﺘﺮﻛﻴﺐ ﺃﳕﺎﻁ ﻣﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻠﻪ )ﺃﻱ ﺍﻟﺼﻔﻮﻑ(.
ﺳﻮﻑ ﻧﺮﻛﺰ ﺍﻫﺘﻤﺎﻣﻨﺎ ﻣﻊ C++ﻋﻠﻰ ﺍﻷﻏﺮﺍﺽ ﺃﻛﺜﺮ ﻣﻦ ﺍﻷﻓﻌﺎﻝ .ﻭﻣﻦ ﺍﳉﺪﻳﺮ ﺫﻛﺮﻩ ﺃﻥ ﺍﻷﲰﺎﺀ
nounsﺍﻟﻮﺍﺭﺩ ﺫﻛﺮﻫﺎ ﰲ ﻧﺼﻮﺹ ﺗﻌﺮﻳﻒ ﺗﻮﺻﻴﻒ ﻧﻈﺎﻡ ﻣﺎ ﺗﺴﺎﻋﺪ ﺍﳌﱪﳎﲔ ﺑﻠﻐﺔ C++ﻋﻠﻰ ﲢﺪﻳﺪ
ﳎﻤﻮﻋﺔ ﺍﻟﺼﻔﻮﻑ ﺍﻟﱵ ﺳﻴﻨﺤﺪﺭ ﻣﻨﻬﺎ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻼﺯﻣﺔ ﻟﺒﻨﺎﺀ ﺍﻟﻨﻈﺎﻡ.
ﳝﻜﻦ ﺗﺸﺒﻴﻪ ﺍﻟﺼﻔﻮﻑ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻸﻏﺮﺍﺽ ﻛﻤﺎ ﻟﻮ ﺃﻬﻧﺎ ﺍﳌﺨﻄﻄﺎﺕ ﺍﳌﻌﻤﺎﺭﻳﺔ ﺍﻟﺰﺭﻗﺎﺀ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻸﺑﻨﻴﺔ.
ﳝﻜﻨﻨﺎ ﺑﻨﺎﺀ ﻋﺪﺓ ﺃﺑﻨﻴﺔ ﺍﻧﻄﻼﻗﹰﺎ ﻣﻦ ﺍﳌﺨﻄﻄﺎﺕ ﺍﳌﻌﻤﺎﺭﻳﺔ ﻛﻤﺎ ﳝﻜﻨﻨﺎ ﺍﺷﺘﻘﺎﻕ ﻋﺪﺓ ﺃﻏﺮﺍﺽ ﻣﻦ ﺻﻒ
ﻼ ﰲ ﺍﻟﺘﺼﻤﻴﻢ ﻏﺮﺿﻲ ﺍﻟﺘﻮﺟﻪ ﻭﺍﺣﺪ .ﳝﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻟﻠﺼﻔﻮﻑ ﻋﻼﻗﺔ ﺑﺼﻔﻮﻑ ﺃﺧﺮﻯ .ﳝﻜﻦ ﻣﺜ ﹰ
ﻟﻠﺒﻨﻚ ﺃﻥ ﳛﺘﺎﺝ ﺍﻟﺼﻒ BankTellerﺃﻥ ﻳﻜﻮﻥ ﻣﺮﺗﺒﻄﹰﺎ ﺑﺎﻟﺼﻒ .BankAccountﺗﺴﻤﻰ ﺃﺑﺴﻂ ﺃﻧﻮﺍﻉ
ﻫﺬﻩ ﺍﻟﻌﻼﻗﺎﺕ ﺑﺎﻻﺭﺗﺒﺎﻁ .Association
ﺳﻮﻑ ﻧﺮﻯ ﻻﺣﻘﹰﺎ ﺃﻥ ﺍﻟﱪﳎﻴﺎﺕ ﺍﳌﺮﺗﺒﺔ ﻋﻠﻰ ﺷﻜﻞ ﺻﻔﻮﻑ ،ﳝﻜﻦ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﰲ ﺍﳌﺴﺘﻘﺒﻞ ﻟﺒﻨﺎﺀ
ﺃﻧﻈﻤﺔ ﺑﺮﳎﻴﺔ ﺃﺧﺮﻯ .ﺗُﺤﺰﻡ ﻋﺎﺩﺓ ﺍﻟﺼﻔﻮﻑ ﺍﳌﺮﺗﺒﻄﺔ ﺑﻌﻀﻬﺎ ﺑﺒﻌﺾ ﻟﺘﺸﻜﻞ ﻣﺎ ﻳﺴﻤﻰ ﺑﺎﳌﻜﻮﻧﺎﺕ
.Compnentsﻭﻧﺆﻛﺪ ﻫﻨﺎ ﻋﻠﻰ ﺿﺮﻭﺭﺓ ﺍﻟﺘﻔﻜﲑ ﺩﺍﺋﻤﹰﺎ ﺑﺈﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﱪﳎﻴﺎﺕ ﻷﻧﻨﺎ ﻧﻌﺘﻘﺪ ﺃﻥ
ﻣﺴﺘﻘﺒﻞ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ﻣﻌﺘﻤﺪ ﺑﺸﻜﻞ ﻛﺒﲑ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻨﻘﻄﺔ.
ﻧﻘﻮﻡ ﺑﺒﻨﺎﺀ ﻣﻌﻈﻢ ﺍﻟﱪﳎﻴﺎﺕ ﺍﳌﺴﺘﻘﺒﻠﻴﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻘﻨﻴﺎﺕ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻣﻦ ﺧﻼﻝ ﲡﻤﻴﻊ ﺍﻷﺟﺰﺍﺀ
ﺍﳌﻌﻴﺎﺭﻳﺔ ﻏﲑ ﺍﳌﺘﻐﲑﺓ ﺍﻟﱵ ﻧﺴﻤﻴﻬﺎ ﺍﻟﺼﻔﻮﻑ .ﻳﻌﻠﻤﻚ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻛﻴﻒ ﳝﻜﻦ ﺑﻨﺎﺀ ﺻﻔﻮﻑ ﻗﺎﺑﻠﺔ
ﻹﻋﺎﺩﺓ ﺍﻻﺳﺘﺨﺪﺍﻡ .ﳝﻜﻦ ﻷﻱ ﺻﻒ ﺗﻘﻮﻡ ﺑﺈﻧﺸﺎﺋﻪ ﺃﻥ ﻳﺼﺒﺢ ﺑﺮﳎﻴﺔ ﻣﻬﻤﺔ ﻣﺴﺎﻋﺪﺓ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻚ ﺃﻭ
ﻼ.
ﻟﻐﲑﻙ ﻣﻦ ﺃﺟﻞ ﺍﻟﺘﻘﻠﻴﻞ ﻣﻦ ﺟﻬﻮﺩ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ﻣﺴﺘﻘﺒ ﹰ
ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺃﻓﻀﻞ ﺍﳊﻠﻮﻝ ،ﳚﺐ ﻋﻠﻴﻚ ﺇﺗﺒﺎﻉ ﺃﺳﻠﻮﺏ ﺗﻔﺼﻴﻠﻲ ﻟﺘﺤﻠﻴﻞ ﻣﺘﻄﻠﺒﺎﺕ ﺍﳌﺸﺮﻭﻉ ﻭﺗﻄﻮﻳﺮ
ﺗﺼﻤﻴﻢ ﻟﺘﻠﺒﻴﺔ ﻫﺬﻩ ﺍﳌﺘﻄﻠﺒﺎﺕ .ﺗﻘﻮﻡ ﺑﻌﺪ ﺍﳊﺼﻮﻝ ﻋﻠﻰ ﻧﺘﺎﺋﺞ ﻫﺬﺍ ﺍﻷﺳﻠﻮﺏ ﺑﺘﻮﺛﻴﻖ ﺍﻟﻨﺘﺎﺋﺞ ﻟﻌﺮﺿﻬﺎ
ﻋﻠﻰ ﺭﺅﺳﺎﺋﻚ ﰲ ﺍﻟﻌﻤﻞ ﻟﻠﻤﻮﺍﻓﻘﺔ ﻋﻠﻴﻬﺎ ﻗﺒﻞ ﻛﺘﺎﺑﺔ ﺃﻱ ﻧﺺ ﺑﺮﳎﻲ ﰲ ﻣﺸﺮﻭﻋﻚ .ﺇﺫﺍ ﻛﺎﻥ ﺍﻷﺳﻠﻮﺏ
ﺍﻟﺬﻱ ﺍﺗﺒﻌﺘﻪ ﻳﺘﻀﻤﻦ ﻃﺮﻳﻘﺔ ﻟﻠﺘﺤﻠﻴﻞ ﻭﺍﻟﺘﺼﻤﻴﻢ ﻣﻦ ﻭﺟﻬﺔ ﻧﻈﺮ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻓﺈﻧﻨﺎ ﻧﺴﻤﻲ ﺫﻟﻚ
ﺃﺳﻠﻮﺏ ﺍﻟﺘﺤﻠﻴﻞ ﻭﺍﻟﺘﺼﻤﻴﻢ ﻏﺮﺿﻲ ﺍﻟﺘﻮﺟﻪ ) .(OOADﻳﻌﺮﻑ ﺍﳌﱪﳎﻮﻥ ﺍﳋﱪﺍﺀ ﺃﻧﻪ ﻣﻬﻤﺎ ﺑﺪﺕ ﺍﳌﺴﺄﻟﺔ
ﺍﳌﻄﻠﻮﺏ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ﺳﻬﻠﺔ ،ﻓﺈﻥ ﺍﻟﻮﻗﺖ ﺍﻟﺬﻱ ﳕﻀﻴﻪ ﻟﺘﺤﻠﻴﻞ ﻭﺗﺼﻤﻴﻢ ﺍﳊﻞ ﳍﺎ ﳝﻜﻦ ﺃﻥ ﻳﻮﻓﺮ ﻋﻠﻴﻨﺎ
ﺳﺎﻋﺎﺕ ﻛﺜﲑﺓ ﳝﻜﻦ ﺃﻥ ﻧﻀﻴﻌﻬﺎ ﺇﺫﺍ ﺍﺗﺒﻌﻨﺎ ﻃﺮﻳﻘﺔ ﺳﻴﺌﺔ ﻟﺘﺼﻤﻴﻢ ﺍﻟﻨﻈﺎﻡ ﺍﳌﻄﻠﻮﺏ ﻗﺒﻞ ﺍﻟﺒﺪﺀ ﺑﺘﻄﻮﻳﺮﻩ.
ﺇﻥ ﺍﻟﺘﻌﺒﲑ OOADﻫﻮ ﺍﻟﺘﻌﺒﲑ ﺍﻟﺬﻱ ﻳﻌﱪ ﻋﻦ ﺍﻟﻔﻜﺮﺓ ﺍﻟﻜﺎﻣﻨﺔ ﻭﺭﺍﺀ ﺍﻷﺳﻠﻮﺏ ﺍﻟﺬﻱ ﺳﻨﺴﺘﺨﺪﻣﻪ ﻟﺘﺤﻠﻴﻞ
ﺍﳌﺴﺎﺋﻞ ﻭﺗﻄﻮﻳﺮ ﺣﻠﻮﻝ ﳍﺎ .ﻻ ﺗﺘﻄﻠﺐ ﺍﳌﺴﺎﺋﻞ ﺍﻟﺼﻐﲑﺓ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﻟﻔﺼﻮﻝ ﺍﻷﻭﱃ ﺃﺳﻠﻮﺑﹰﺎ ﻣﻌﻘﺪﹰﺍ
ﳊﻠﻬﺎ .ﻳﻜﻔﻲ ﺃﻥ ﻧﻘﻮﻡ ﺑﻜﺘﺎﺑﺔ ﻓﻜﺮﺓ ﺣﻠﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻟﻐﺔ ﺍﳋﻮﺍﺭﺯﻣﻴﺎﺕ Pseudo Codeﻗﺒﻞ ﻛﺘﺎﺑﺔ
ﺍﻟﻨﺼﻮﺹ ﻓﻌﻠﻴﹰﺎ .ﺗﻌﺘﱪ ﻟﻐﺔ ﺍﳋﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﻄﺮﻳﻘﺔ ﻟﻐﺔ ﻏﲑ ﺭﲰﻴﺔ ﻟﻜﺘﺎﺑﺔ ﺍﻟﻨﺼﻮﺹ ﺍﻟﱪﳎﻴﺔ .ﺳﻮﻑ
ﻧﺘﺤﺪﺙ ﻋﻦ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺑﺎﻟﺘﻔﺼﻴﻞ ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﱐ.
ﳝﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻟﻐﺔ ﺍﳋﻮﺍﺭﺯﻣﻴﺎﺕ ﻛﺎﻓﻴﺔ ﻣﻦ ﺃﺟﻞ ﺍﳌﺴﺎﺋﻞ ﺍﻟﺼﻐﲑﺓ ﻭﻟﻜﻦ ﻋﻨﺪﻣﺎ ﻳﺰﺩﺍﺩ ﻋﺪﺩ ﺍﳌﺴﺎﺋﻞ ﻭﺣﺠﻢ
ﳎﻤﻮﻋﺎﺕ ﺍﻟﻌﻤﻞ ﺍﳌﺸﺘﺮﻛﺔ ﰲ ﺣﻠﻬﺎ ﻓﺈﻧﻪ ﳚﺐ ﺍﺳﺘﺨﺪﺍﻡ ﺗﻘﻨﻴﺎﺕ ﳍﺎ ﻋﻼﻗﺔ ﺑﺎﻷﺳﻠﻮﺏ .OOADﻣﻦ ﺍﻟﺒﺪﻳﻬﻲ
ﺃﻧﻪ ﳚﺐ ﻋﻠﻰ ﳎﻤﻮﻋﺎﺕ ﺍﻟﻌﻤﻞ ﺃﻥ ﺗﺘﻔﻖ ﺣﻮﻝ ﺍﻷﺳﻠﻮﺏ ﺍﻟﺪﻗﻴﻖ ﳊﻞ ﺍﳌﺴﺄﻟﺔ ﻭﻃﺮﻳﻘﺔ ﺗﺒﺎﺩﻝ ﺍﻟﻨﺘﺎﺋﺞ ﺑﲔ
ﺇﺟﺮﺍﺀ ﻭﺁﺧﺮ .ﻳﻮﺟﺪ ﻋﺪﺓ ﺃﺳﺎﻟﻴﺐ OOADﻭﻫﻨﺎﻙ ﻟﻐﺔ ﻟﺘﻮﺻﻴﻒ ﻃﺮﻳﻘﺔ ﺗﺒﺎﺩﻝ ﺍﻟﻨﺘﺎﺋﺞ ﺑﲔ ﺍﻹﺟﺮﺍﺀﺍﺕ ﻭﻫﻲ
ﻟﻐﺔ ) .(UMLﻃﻮﺭﺕ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﰲ ﻣﻨﺘﺼﻒ ﺍﻟﺘﺴﻌﻴﻨﺎﺕ ﺑﺈﺷﺮﺍﻑ ﺛﻼﺛﺔ ﺃﺷﺨﺎﺹ ﻋﺎﻣﻠﲔ ﰲ ﻣﻨﻬﺠﻴﺎﺕ
ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ﻭﻫﻢ Grady Booch :ﻭ James Rumesaughﻭ.Ivar Jacobson
ﻥﺒﺬة ﺗﺎریﺨﻴﺔ ﺣﻮل ﻟﻐﺔ UML
ﰲ ﻓﺘﺮﺓ ﺍﻟﺜﻤﺎﻧﻴﻨﺎﺕ ،ﺗﺰﺍﻳﺪ ﻋﺪﺩ ﺍﳌﻨﻈﻤﺎﺕ ﻭﺍﳌﺆﺳﺴﺎﺕ ﺍﻟﱵ ﺑﺪﺃﺕ ﺗﺴﺘﺨﺪﻡ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻲ
ﺍﻟﺘﻮﺟﻪ ﰲ ﺗﻄﻮﻳﺮ ﺗﻄﺒﻴﻘﺎﻬﺗﺎ ﻭﻇﻬﺮﺕ ﺍﳊﺎﺟﺔ ﺇﱃ ﺗﻄﻮﻳﺮ ﺃﺳﻠﻮﺏ .OOADﻗﺎﻡ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻌﺎﻣﻠﲔ ﰲ
ﳎﺎﻝ ﻣﻨﻬﺠﻴﺎﺕ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﱪﳎﻲ ﺑﺒﻨﺎﺀ ﺃﺳﺎﻟﻴﺐ ﳐﺘﻠﻔﺔ ﻟﺘﻠﺒﻴﺔ ﻫﺬﻩ ﺍﳊﺎﺟﺔ .ﻭﻟﻘﺪ ﻛﺎﻥ ﻟﻜﻞ ﺃﺳﻠﻮﺏ ﻣﻨﻬﺎ
ﺭﻣﻮﺯﻩ ﺍﳋﺎﺻﺔ ﺃﻭ ﻟﻐﺘﻪ ﻟﻠﻮﺻﻮﻝ ﺇﱃ ﻧﺘﺎﺋﺞ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺤﻠﻴﻞ ﻭﺍﻟﺘﺼﻤﻴﻢ.
ﰲ ﺑﺪﺍﻳﺔ ﺍﻟﺘﺴﻌﻴﻨﺎﺕ ،ﻭﺻﻞ ﺍﻷﻣﺮ ﺇﱃ ﺩﺭﺟﺔ ﻛﺒﲑﺓ ﻣﻦ ﺍﻟﺘﻨﻮﻉ ﻣﻦ ﺍﻷﺳﺎﻟﻴﺐ ﻭﺍﻟﺮﻣﻮﺯ ﺍﳌﺴﺘﺨﺪﻣﺔ
ﻣﻌﻬﺎ .ﻭﱂ ﻳﻜﻦ ﺑﺎﻹﻣﻜﺎﻥ ﺇﻧﺘﺎﺝ ﺃﺩﻭﺍﺕ ﺑﺮﳎﻴﺔ ﻟﻠﺘﻌﺒﲑ ﻋﻦ ﻫﺬﻩ ﺍﻷﺳﺎﻟﻴﺐ .ﻛﻞ ﺫﻟﻚ ﺃﺑﺮﺯ ﺍﳊﺎﺟﺔ ﺇﱃ
ﺇﳚﺎﺩ ﺃﺳﺎﻟﻴﺐ ﻭﺭﻣﻮﺯ ﻣﻌﻴﺎﺭﻳﺔ.
ﰲ ﻋﺎﻡ ،1994ﺍﻧﻀﻢ James Rumbaughﺇﱃ Grady Boochﰲ ﺷﺮﻛﺔ Rational Software Cosporation
ﻭﺑﺪﺃ ﺍﻟﻌﻤﻞ ﻣﻦ ﺃﺟﻞ ﺗﻮﺣﻴﺪ ﺃﺳﺎﻟﻴﺐ ﺍﻟﻌﻤﻞ ﺍﳋﺎﺻﺔ ﻬﺑﺎ .ﺳﺮﻋﺎﻥ ﻣﺎ ﺍﻧﻀﻢ ﺇﻟﻴﻬﺎﻣﺎ .Ivar Jacobsonﻗﺎﻣﺖ
ﳎﻤﻮﻋﺔ ﺍﻟﻌﻤﻞ ﻫﺬﻩ ﺑﺈﻃﻼﻕ ﺃﻭﻝ ﻧﺴﺨﺔ ﻣﻦ UMLﻋﺎﻡ 1996ﻭﻃﻠﺒﺖ ﻣﻦ ﳎﺘﻤﻊ ﻫﻨﺪﺳﺔ ﺍﻟﱪﳎﻴﺎﺕ
ﺭﺃﻳﻬﻢ ﺣﻮﳍﺎ .ﰲ ﺗﻠﻚ ﺍﻟﻔﺘﺮﺓ ﺗﻘﺮﻳﺒﺎﹰ ،ﺩﻋﺖ ﺇﺣﺪﻯ ﺍﳌﺆﺳﺴﺎﺕ ﻭﻫﻲ ﻣﺆﺳﺴﺔ Object Management
اﻟﻔﺼﻞ اﻷول ٧٤
) Group (OMGﺇﱃ ﻃﺮﺡ ﻭﺑﻨﺎﺀ ﻟﻐﺎﺕ ﳕﺬﺟﺔ ﻣﺸﺘﺮﻛﺔ .ﻭﳌﺎ ﻛﺎﻧﺖ OMGﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺆﺳﺴﺔ ﻏﲑ ﺭﲝﻴﺔ
ﻓﻘﺪ ﻛﺎﻧﺖ ﺗﻘﻮﻡ ﺑﺎﻟﺘﺮﻭﻳﺞ ﻻﺳﺘﺨﺪﺍﻡ ﺗﻘﻨﻴﺎﺕ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻣﻦ ﺧﻼﻝ ﺇﺻﺪﺍﺭﻫﺎ ﳌﻮﺍﺻﻔﺎﺕ
ﻭﺗﻮﺟﻴﻬﺎﺕ ﻋﺎﻣﺔ ﺣﻮﻝ ﻫﺬﻩ ﺍﻟﺘﻘﻨﻴﺎﺕ .ﻟﻜﻦ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺸﺮﻛﺎﺕ )ﺍﻟﱵ ﻧﺬﻛﺮ ﻣﻦ ﺑﻴﻨﻬﺎ HP :ﻭIBM
ﻭ Microsoftﻭ Oracleﻭ (Rational Softwareﻛﺎﻧﺖ ﻗﺪ ﺍﻟﺘﻘﻄﺖ ﺍﳊﺎﺟﺔ ﺇﱃ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﺍﻟﻨﻤﺬﺟﺔ
ﺍﳌﺸﺘﺮﻛﺔ ﺍﳌﻄﻠﻮﺑﺔ .ﺷﻜﻠﺖ ﻫﺬﻩ ﺍﻟﺸﺮﻛﺎﺕ ﻣﺎ ﻳﺴﻤﻰ ﺑﺸﺮﻛﺎﺀ UMLﺃﻭ UML Partnersﺍﺳﺘﺠﺎﺑﺔ
ﻟﻄﻠﺐ OMGﻟﺘﻘﺪﱘ ﺍﳌﻘﺘﺮﺣﺎﺕ ،ﻗﺎﻡ ﻫﺬﺍ ﺍﻟﺘﺠﻤﻊ ﺑﺒﻨﺎﺀ ﺍﻟﻨﺴﺨﺔ 1.1ﻣﻦ UMLﻭﺗﻘﺪﳝﻬﺎ ﺇﱃ .OMGﰲ
ﻋﺎﻡ ،1997ﻗﺒﻠﺖ OMGﺍﳌﻘﺘﺮﺡ ﻭﺗﺒﻨﺖ ﺍﳌﺴﺆﻭﻟﻴﺔ ﺣﻮﻝ ﻣﺘﺎﺑﻌﺔ ﺍﻟﺼﻴﺎﻧﺔ ﻭﺍﳌﺮﺍﺟﻌﺔ ﻟﻠﻐﺔ .UMLﰲ ﻋﺎﻡ
،2001ﺃﺻﺪﺭﺕ OMGﺍﻟﻨﺴﺨﺔ 1.4ﻣﻦ ﻟﻐﺔ ) UMLﻭﺍﻟﻨﺴﺨﺔ ﺍﳌﻮﺟﻮﺩﺓ ﺣﺎﻟﻴﹰﺎ ﻫﻲ ﺍﻟﻨﺴﺨﺔ 2.0ﺍﻟﱵ
ﺻﺪﺭﺕ ﰲ ﻬﻧﺎﻳﺔ ﺍﻟﻌﺎﻡ .(2002ﺗﻌﻤﻞ ﺣﺎﻟﻴﹰﺎ OMGﻋﻠﻰ ﺍﻟﻨﺴﺨﺔ 2.0ﻭﲣﻄﻂ ﻹﺻﺪﺍﺭﻫﺎ .ﺗﻌﺘﱪ OMG
ﻭﺍﺣﺪﺓ ﻣﻦ ﺃﻛﱪ ﺍﻟﺘﺠﻤﻌﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ ﰲ ﺍﻟﻌﺎﱂ ﻭﻫﻲ ﺗﻀﻢ ﺣﻮﺍﱄ 800ﻣﺆﺳﺴﺔ ﺃﻭ ﻫﻴﺌﺔ ﻛﺄﻋﻀﺎﺀ ﺗﺎﺑﻌﲔ
ﳍﺎ.
ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺃﳕﺎﻁ ﺟﺪﻳﺪﺓ ﻟﻠﻤﻌﻄﻴﺎﺕ ﻣﻦ ﺃﺟﻞ ﺗﻨﻔﻴﺬ ﺍﻟﻮﻇﺎﺋﻒ ﺍﳌﻄﻠﻮﺑﺔ ﻣﻨﻬﺎ .ﳚﺮﻱ ﻣﻨﺎﻗﺸﺔ
ﺍﻟﺘﻔﺼﻴﻼﺕ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺬﻟﻚ ﰲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﻋﺮﺽ ﺍﻟﻘﻴﻮﺩ ﺍﳌﺮﺗﺒﻄﺔ ﲟﺜﻞ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ .ﻛﻤﺎ
ﻳﻌﺮﺽ ﺍﻟﻔﺼﻞ ﺑﻌﺾ ﺍﳊﺎﻻﺕ ﺍﻟﺪﺭﺍﺳﻴﺔ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺼﻔﻮﻑ ﺍﳌﺼﻔﻮﻓﺎﺕ ﻭﺳﻼﺳﻞ ﺍﳊﺮﻭﻑ ﻭﺍﻟﺘﺎﺭﻳﺦ
ﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﺼﺤﻴﺤﺔ ﺍﻟﻜﺒﲑﺓ ﻭﺍﻷﻋﺪﺍﺩ ﺍﻟﻌﻘﺪﻳﺔ.
ﻳﺘﻌﺎﻣﻞ ﺍﻟﻔﺼﻞ ﺍﻟﺘﺎﺳﻊ "ﺍﻟﻮﺭﺍﺛﺔ "Inheritanceﻣﻊ ﺗﻘﻨﻴﺎﺕ ﺍﺷﺘﻘﺎﻕ ﺍﻟﺼﻔﻮﻑ ﺍﳌﺮﺗﺒﻄﺔ ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻣﻊ
ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ،ﻭﺫﻟﻚ ﻣﻦ ﺧﻼﻝ ﻋﺮﺽ ﺍﳌﻔﺎﻫﻴﻢ ﺍﳌﺮﺗﺒﻄﺔ ﺑﺎﻟﺼﻔﻮﻑ ﺍﻷﺳﺎﺳﻴﺔ ﻭﺍﻟﺼﻔﻮﻑ
ﺍﳌﺸﺘﻘﺔ ﻭﺍﻷﻋﻀﺎﺀ ﺍﶈﻤﻴﺔ ﻭﺃﺳﻠﻮﺏ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻌﺎﻣﺔ ﻭﺍﳋﺎﺻﺔ ﻭﺍﶈﻤﻴﺔ ....ﻭﻏﲑﻫﺎ ﻣﻦ ﺍﳌﻔﺎﻫﻴﻢ ﺍﻷﺧﺮﻯ.
ﻳﺘﻀﻤﻦ ﺍﻟﻔﺼﻞ ﺃﻳﻀﹰﺎ ﺑﻌﺾ ﻣﻦ ﺍﳊﺎﻻﺕ ﺍﻟﺪﺭﺍﺳﻴﺔ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺪﺭﺍﺳﺔ ﺑﻨﻴﺔ ﺍﻟﺸﺠﺮﺓ ﺍﻟﻮﺭﺍﺛﻴﺔ ﻟﺼﻔﻮﻑ
ﺍﻟﻨﻘﻄﺔ ﻭﺍﻟﺪﺍﺋﺮﺓ ﻭﺍﻷﺳﻄﻮﺍﻧﺔ .ﻳﻨﺘﻬﻲ ﺍﻟﻔﺼﻞ ﺑﻔﻘﺮﺓ ﺣﻮﻝ ﺃﺳﻠﻮﺏ ﺍﻟﻮﺭﺍﺛﺔ ﺍﳌﺘﻌﺪﺩﺓ.
ﺃﻣﺎ ﺍﻟﻔﺼﻞ ﺍﻟﻌﺎﺷﺮ "ﻣﺘﻌﺪﺩﺍﺕ ﺍﻷﺷﻜﺎﻝ "Polymorphismﻓﻴﺘﻌﺮﺽ ﻟﺒﻌﺾ ﺍﳌﻘﺪﺭﺍﺕ ﺍﻷﺧﺮﻯ ﺍﳋﺎﺻﺔ
ﺑﺎﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻭﺍﻟﱵ ﳍﺎ ﻋﻼﻗﺔ ﺑﺎﻟﺴﻠﻮﻙ ﻣﺘﻌﺪﺩ ﺍﻷﺷﻜﺎﻝ ﻣﻦ ﺧﻼﻝ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻏﺮﺽ ﻣﻦ
ﺍﻏﺮﺍﺽ ﺃﺣﺪ ﺍﻟﺼﻔﻮﻑ ﺍﳌﺸﺘﻘﺔ ﻋﻠﻰ ﺃﻧﻪ ﻏﺮﺽ ﻣﻦ ﺃﻏﺮﺍﺽ ﺍﻟﺼﻒ ﺍﻷﺳﺎﺳﻲ ﺃﻳﻀﹰﺎ .ﻳﺴﺎﻋﺪ ﺫﻟﻚ ﻋﻠﻰ
ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺍﻷﳕﺎﻁ ﺍﶈﺪﺩﺓ ﻷﻏﺮﺍﺽ ﺍﻟﺼﻔﻮﻑ ﺍﳌﺸﺘﻘﺔ .ﻛﻤﺎ ﺗﺴﺎﻋﺪ ﻣﺘﻌﺪﺩﺍﺕ ﺍﻻﺷﻜﺎﻝ
ﻋﻠﻰ ﺇﺯﺍﻟﺔ ﺍﳌﻨﻄﻖ ﺍﳌﺮﺗﺒﻂ ﺑﺎﻟﺘﻌﻠﻴﻤﺔ switchﻟﺼﺎﱀ ﻣﻨﻄﻖ ﻣﺒﺎﺷﺮ ﺃﻛﺜﺮ ﺑﺴﺎﻃﺔ .ﻭﳚﺮﻱ ﺍﻟﺘﻌﺮﺽ ﳌﺪﻳﺮ
ﺷﺎﺷﺔ ﺇﻇﻬﺎﺭ ﻟﺘﻮﺿﻴﺢ ﻫﺬﻩ ﺍﻟﻔﻜﺮﺓ .ﻳﻘﻮﻡ ﺍﻟﻔﺼﻞ ﺃﻳﻀﹰﺎ ﺑﺘﻮﺿﻴﺢ ﺍﻟﻔﺮﻭﻗﺎﺕ ﺑﲔ ﺍﻟﺼﻔﻮﻑ ﺍﺠﻤﻟﺮﺩﺓ
ﻭﺍﻟﺼﻔﻮﻑ ﺍﺠﻤﻟﺴﺪﺓ ﻭﺍﻟﻔﻮﺍﺋﺪ ﺍﳌﻤﻜﻨﺔ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ .ﻳﻮﺟﺪ ﺿﻤﻦ ﺍﻟﻔﺼﻞ ﺣﺎﻟﺘﲔ ﺩﺭﺍﺳﻴﺘﲔ ﻫﺎﻣﺘﲔ،
ﳍﻤﺎ ﻋﻼﻗﺔ ﺑﻨﻈﺎﻡ ﺩﻓﻊ ﺭﻭﺍﺗﺐ ﻋﻤﺎﻝ ﺷﺮﻛﺔ ﻭﺍﻟﺸﺠﺮﺓ ﺍﻟﻮﺭﺍﺛﻴﺔ ﻟﺼﻔﻮﻑ ﺍﻷﺷﻜﺎﻝ :ﺍﻟﻨﻘﻄﺔ ،ﺍﻟﺪﺍﺋﺮﺓ،
ﻭﺍﻷﺳﻄﻮﺍﻧﺔ.
ﳚﺮﻱ ﰲ ﺍﻟﻔﺼﻞ ﺍﳊﺎﺩﻱ ﻋﺸﺮ "ﺍﻟﻘﻮﺍﻟﺐ "Templatesﺍﳊﺪﻳﺚ ﻋﻦ ﻗﻮﺍﻟﺐ ﺍﻟﺘﻮﺍﺑﻊ ﻭﺍﻟﺼﻔﻮﻑ ﻭﺍﻟﱵ
ﺗﺪﻋﻢ ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻓﻜﺮﺓ ﲡﺮﻳﺪ ﺍﳌﻌﻄﻴﺎﺕ ﺍﳌﺮﺗﺒﻄﺔ ﺑﻠﻐﺎﺕ ﺍﻟﱪﳎﻴﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ،ﻭﺫﻟﻚ ﻬﺑﺪﻑ
ﺇﻧﺸﺎﺀ ﺃﳕﺎﻁ ﺟﺪﻳﺪﺓ ﻟﻠﻤﻌﻄﻴﺎﺕ ﳎﺮﺩﺓ )ﻣﺜﻞ ﺍﳌﻜﺪﺳﺎﺕ ﻭﺍﳌﺼﻔﻮﻓﺎﺕ ﻭﺻﻔﻮﻑ ﺍﻹﻧﺘﻈﺎﺭ(.
ﻳﺘﻀﻤﻦ ﺍﻟﺜﺎﱐ ﺍﳊﺎﺩﻱ ﻋﺸﺮ "ﳎﺎﺭﻱ ﺍﻟﺪﺧﻞ/ﺧﺮﺝ "Stream Input/Outputﻣﻌﺎﳉﺔ ﻟﺘﻘﻨﻴﺎﺕ
ﺍﻟﺪﺧﻞ/ﺧﺮﺝ ﺍﳉﺪﻳﺪﺓ ﻭﺍﻟﱵ ﳍﺎ ﻋﻼﻗﺔ ﺑﻠﻐﺔ .C++ﳚﺮﻱ ﺍﻟﺘﻌﺮﺽ ﻟﻌﻤﻠﻴﱵ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻻﺳﺘﺨﺮﺍﺝ ﺇﱃ
ﻭﻣﻦ ﳎﺮﻯ ﺍﻟﺪﺧﻞ ﺃﻭ ﺍﳋﺮﺝ ،ﻭﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺪﺧﻞ/ﺧﺮﺝ ﻭﻓﻘﹰﺎ ﻟﺼﻴﻐﺔ ﳏﺪﺩﺓ ﻣﺴﺒﻘﹰﺎ ﻭﻋﻤﻠﻴﺎﺕ ﺍﺠﻤﻟﺎﺭﻱ
ﻟﻀﺒﻂ ﻗﺎﻋﺪﺓ ﺍﺠﻤﻟﺮﻯ ﺃﻭ ﻋﺮﺽ ﺍﳊﻘﻞ ...ﻭﻏﲑ ﺫﻟﻚ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﱵ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻗﻴﻢ ﺧﺎﻧﺎﺕ
ﺍﻟﺘﺤﻜﻢ ﺍﳌﺘﻌﻠﻘﺔ ﺑﺎﺠﻤﻟﺮﻯ.
ﻳﻨﺎﻗﺶ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻟﺚ ﻋﺸﺮ "ﻣﻌﺎﳉﺔ ﺍﻻﺳﺘﺜﻨﺎﺀﺍﺕ "Exception Handlingﻭﺍﺣﺪﺓ ﻣﻦ ﺍﻹﺿﺎﻓﺎﺕ ﺍﳍﺎﻣﺔ
ﺍﳋﺎﺻﺔ ﺑﻠﻐﺔ C++ﻭﺍﻟﱵ ﺗﺴﺎﻋﺪ ﺍﳌﱪﻣﺞ ﻋﻠﻰ ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﺃﻛﺜﺮ ﻣﺘﺎﻧﺔ ﻭﻣﻘﺎﻭﻣﺔ ﻟﻸﻋﻄﺎﻝ ﻻﺳﺘﺨﺪﺍﻣﻬﺎ
ﰲ ﺇﳒﺎﺯ ﺍﳌﻬﺎﻡ ﺍﳊﺴﺎﺳﺔ .ﳚﺮﻱ ﺍﻟﺘﺤﺪﺙ ﻋﻦ ﺍﻟﻜﺘﻞ Tryﻭﺗﻌﻠﻴﻤﺎﺕ ﺇﻟﻘﺎﺀ ﺍﻻﺳﺘﺜﻨﺎﺀ throwﻭﻛﺘﻞ
ﺍﻟﺘﻘﺎﻁ ﺍﻻﺳﺘﺜﻨﺎﺀ ﻭﻣﻌﺎﳉﺘﻪ .catch
ﺃﻣﺎ ﺍﻟﻔﺼﻞ ﺍﻟﺮﺍﺑﻊ ﻋﺸﺮ "ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﳌﻠﻔﺎﺕ ،"File Processingﻓﻴﺘﻀﻤﻦ ﻣﻌﻠﻮﻣﺎﺕ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺍﳌﻠﻔﺎﺕ
اﻟﻔﺼﻞ اﻷول ٧٨
ﺍﻟﺘﺴﻠﺴﻠﻴﺔ ﻭﻣﻠﻔﺎﺕ ﺍﻟﻮﺻﻮﻝ ﺍﻟﻌﺸﻮﺍﺋﻲ .ﻳﺒﺪﺃ ﺍﻟﻔﺼﻞ ﲟﻘﺪﻣﺔ ﺣﻮﻝ ﺍﻟﺒﻨﻴﺔ ﺍﳍﺮﻣﻴﺔ ﻟﻠﻤﻌﻄﻴﺎﺕ ﺍﺑﺘﺪﺍ ًﺀ ﻣﻦ
ﺍﳋﺎﻧﺎﺕ ﺣﱴ ﻧﺼﻞ ﺇﱃ ﺍﳌﻠﻔﺎﺕ .ﰒ ﳚﺮﻱ ﻋﺮﺽ ﻃﺮﻳﻘﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﳌﻠﻔﺎﺕ ﺍﻟﺘﺴﻠﺴﻠﻴﺔ ﻭﻣﻠﻔﺎﺕ
ﺍﻟﻮﺻﻮﻝ ﺍﻟﻌﺸﻮﺍﺋﻲ ﻣﻦ ﺧﻼﻝ ﺍﻷﻣﺜﻠﺔ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺗﻮﺿﻴﺢ ﻃﺮﻳﻘﺔ ﺇﺩﺧﺎﻝ ﺍﳌﻌﻄﻴﺎﺕ ﺿﻤﻦ ﻣﺼﻔﻮﻓﺎﺕ
ﺣﺮﻭﻑ ﰲ ﺍﻟﺬﺍﻛﺮﺓ ﻭﺇﺧﺮﺍﺟﻬﺎ ﻣﻨﻬﺎ.
ﻳﻨﺎﻗﺶ ﺍﻟﻔﺼﻞ ﺍﳋﺎﻣﺲ ﻋﺸﺮ "ﺍﻟﺼﻒ stringﻭﻣﻌﺎﳉﺔ ﺳﻼﺳﻞ ﺍﳊﺮﻭﻑ
Class string and String
"Stream Processingﻛﻴﻔﻴﺔ ﺇﺩﺧﺎﻝ ﺍﳌﻌﻄﻴﺎﺕ ﺇﱃ ﺍﻟﺬﺍﻛﺮﺓ ﻭﻛﻴﻔﻴﺔ ﺇﺧﺮﺍﺟﻬﺎ ﻣﻨﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺳﻼﺳﻞ
ﺍﳊﺮﻭﻑ .ﻳﺮﺗﺒﻂ ﺍﻟﺼﻒ stringﺍﳌﻌﺮﻭﺽ ﰲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺑﺎﳌﻜﺘﺒﺔ ﺍﳌﻌﻴﺎﺭﻳﺔ ﻟﻠﻐﺔ .C++
"Web Programming With CGIﻓﻴﻌﺮﺽ CGIﺃﻣﺎ ﺍﻟﻔﺼﻞ ﺍﻟﺴﺎﺩﺱ ﻋﺸﺮ "ﺑﺮﳎﺔ ﺍﻟﻮﺏ ﺑﺎﺳﺘﺨﺪﺍﻡ
ﻭﻳﺘﻌﺮﺽ ﺃﻳﻀﹰﺎ ﳌﻔﻬﻮﻡ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﻣﺘﻌﺪﺩﺓ ﺍﳌﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺒﻨﺎﺀ ﺑﺮﺍﻣﺞ CGIﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ C++
"Structuresﺍﻹﻣﻜﺎﻧﻴﺎﺕ ﺍﳌﺘﻮﻓﺮﺓ ﰲ ﻟﻐﺔ C++ﻟﺘﻄﻮﻳﺮ ﺑﺮﺍﻣﺞ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺍﻟﺘﻌﺎﻣﻞ ﺍﳌﺒﺎﺷﺮ ﻣﻊ ﺍﻟﺒﻨﻴﺔ
ﺍﻟﺼﻠﺒﺔ ﻟﻠﺤﺎﺳﺐ ﻭﺍﻟﱵ ﻫﻲ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﳋﺎﻧﺎﺕ .ﻛﻤﺎ ﻳﻮﺿﺢ ﻃﺮﻳﻘﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺳﻼﺳﻞ ﺍﳊﺮﻭﻑ
ﻣﻦ ﺧﻼﻝ ﺍﻟﺘﻮﺍﺑﻊ ﺍﳌﺘﻮﻓﺮﺓ ﰲ ﻣﻜﺘﺒﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺳﻼﺳﻞ ﺍﳊﺮﻭﻑ ،ﰒ ﻳﺒﲔ ﻛﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ
ﺍﻟﺴﺠﻼﺕ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻊ ﺍﳌﺆﺷﺮﺍﺕ ﻭﺃﺳﺎﻟﻴﺐ ﺍﳊﺠﺰ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻟﻠﺬﺍﻛﺮﺓ .ﻳﺘﻀﻤﻦ ﺍﻟﻔﺼﻞ ﻋﺮﺿﹰﺎ
ﻟﱪﻧﺎﻣﺞ ﳏﺎﻛﻲ ﻋﺎﱄ ﺍﻷﺩﺍﺀ ﻟﻌﻤﻠﻴﺔ ﺧﻠﻂ ﺃﻭﺭﺍﻕ ﺍﻟﻠﻌﺐ ﻭﺗﻮﺯﻳﻌﻬﺎ.
ﻳﻨﺎﻗﺶ ﺍﻟﻔﺼﻞ ﺍﻟﺘﺎﺳﻊ ﻋﺸﺮ "ﻣﺮﺣﻠﺔ ﻣﺎ ﻗﺒﻞ ﺍﻟﺘﺮﲨﺔ "The Preprocessorﻃﺮﻳﻘﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﺘﻮﺟﻴﻬﺎﺕ
ﺍﳌﻮﺟﻮﺩﺓ ﺿﻤﻦ ﻧﺼﻮﺹ ﺍﻟﱪﺍﻣﺞ ﻭﺍﳌﺘﻌﻠﻘﺔ ﺑﻌﻤﻠﻴﺎﺕ ﺇﺩﺭﺍﺝ ﺍﳌﻠﻔﺎﺕ ﺍﻟﺮﺃﺳﻴﺔ ﻭﺗﻌﺮﻳﻒ ﺍﻟﺜﻮﺍﺑﺖ ﺍﻟﺮﻣﺰﻳﺔ
ﻭﺍﳌﺎﻛﺮﻭ ﻭﺍﻟﺘﺮﲨﺔ ﺍﻟﺸﺮﻃﻴﺔ.
ﻳﻌﺮﺽ ﺍﻟﻔﺼﻞ ﺍﻟﻌﺸﺮﻭﻥ "ﻣﻮﺍﺿﻴﻊ ﻣﺮﺗﺒﻄﺔ ﺑﻠﻐﺔ "C Legacy-code Topics Cﺑﻌﺾ ﺍﳌﻮﺍﺿﻴﻊ ﺍﻹﺿﺎﻓﻴﺔ
ﺍﳌﺮﺗﺒﻄﺔ ﺑﻌﻤﻠﻴﺎﺕ ﺇﻋﺎﺩﺓ ﺗﻮﺟﻴﻪ ﺍﻟﺪﺧﻞ ﻣﻦ ﻣﻠﻒ ﺃﻭ ﺍﳋﺮﺝ ﺇﱃ ﻣﻠﻒ ﺃﻭ ﻟﻴﺼﺒﺢ ﻛﺪﺧﻞ ﻟﱪﻧﺎﻣﺞ ﺁﺧﺮ.
ﻭﻧﺒﲔ ﻛﻴﻔﻴﺔ ﲤﺮﻳﺮ ﻭﺳﻄﺎﺀ ﺇﱃ ﺍﻟﺘﺎﺑﻊ ﺍﻟﺮﺋﻴﺴﻲ mainﻭﻛﻴﻔﻴﺔ ﺗﺮﲨﺔ ﺑﺮﻧﺎﻣﺞ ﻣﻮﺯﻉ ﺇﱃ ﻋﺪﺓ ﻣﻠﻔﺎﺕ....
ﻭﻏﲑ ﺫﻟﻚ ﻣﻦ ﺍﳌﻮﺍﺿﻴﻊ ﺍﻷﺧﺮﻯ ﺍﳌﺘﻘﺪﻣﺔ ﻭﺍﻟﱵ ﱂ ﻧﺘﻌﺮﺽ ﳍﺎ ﰲ ﺍﻟﻔﺼﻮﻝ ﺍﻷﺧﺮﻯ.
ﺃﻣﺎ ﺍﻟﻔﺼﻞ ﺍﳊﺎﺩﻱ ﻭﺍﻟﻌﺸﺮﻭﻥ "ﻣﻜﺘﺒﺔ ﺍﻟﻘﻮﺍﻟﺐ ﺍﳌﻌﻴﺎﺭﻳﺔ "Standrad Template Libraryﻓﻴﻘﻮﻡ ﺑﻌﺮﺽ
ﻣﻜﺘﺒﺔ ﺍﻟﻘﻮﺍﻟﺐ STDﻭﻳﻮﺿﺢ ﻃﺮﻳﻖ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ﻭﺍﻻﺳﺘﻔﺎﺩﺓ ﻣﻨﻬﺎ ﻟﺒﻨﺎﺀ ﺗﻄﺒﻴﻘﺎﺕ ﻓﻌﺎﻟﺔ.
ﺃﺧﲑﹰﺍ ،ﻧﻘﺪﻡ ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﱐ ﻭﺍﻟﻌﺸﺮﻭﻥ ﻭﺍﻷﺧﲑ "ﻣﻮﺍﺿﻴﻊ ﺃﺧﺮﻯ "Other Topicsﳎﻤﻮﻋﺔ ﻣﻦ
٧٩ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
ﺍﳌﺘﻔﺮﻗﺎﺕ ﺣﻮﻝ ﻟﻐﺔ .C++ﻭﻳﻌﺮﺽ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻋﻤﻠﻴﱵ ﺍﻟﻘﺴﺮ cost-castﻭ .reinterpret-castﻛﻤﺎ
ﻧﻨﺎﻗﺶ ﻓﻴﻪ ﻣﻔﻬﻮﻡ ﻓﻀﺎﺀﺍﺕ ﺍﻷﲰﺎﺀ namespacesﻭﺍﻟﻔﺎﺋﺪﺓ ﻣﻨﻬﺎ .ﻳﻌﺮﺽ ﺍﻟﻔﺼﻞ ﺃﻳﻀﹰﺎ ﺍﻟﻜﻠﻤﺔ ﺍﳌﻔﺘﺎﺣﻴﺔ
explicitﻭﺷﺮﻭﻁ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ .ﻛﺬﻟﻚ ﻳﺘﺤﺪﺙ ﺍﻟﻔﺼﻞ ﻋﻦ ﺍﻟﻜﻠﻤﺔ ﺍﳌﻔﺘﺎﺣﻴﺔ mutableﻭﻋﻦ ﺍﻟﻮﺭﺍﺛﺔ
ﺍﳌﺘﻌﺪﺩﺓ ﻭﺍﻟﺼﻔﻮﻑ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﻈﺎﻫﺮﻳﺔ .virtnal
ﳒﺪ ﰲ ﻬﻧﺎﻳﺔ ﺍﻟﻜﺘﺎﺏ ﺍﳌﻼﺣﻖ ﺍﻟﺘﺎﻟﻴﺔ :ﺍﳌﻠﺤﻖ ) (Aﻭﻳﺘﻀﻤﻦ ﺟﺪﻭ ﹰﻻ ﻷﻭﻟﻮﻳﺎﺕ ﻛﺎﻓﺔ ﺍﻟﻌﻤﻠﻴﺎﺕ
ﺍﳌﺴﺘﺨﺪﻣﺔ ﻣﻊ ﻟﻐﺔ ،C++ﻭﺍﳌﻠﺤﻖ ) (Bﺍﻟﺬﻱ ﻳﻌﺮﺽ ﳎﻤﻮﻋﺔ ﺍﳊﺮﻭﻑ ASCIIﻭﻗﻴﻤﻬﺎ ﺍﳌﺨﺘﻠﻔﺔ ،ﻭﻧﺒﲔ
ﺃﺧﲑﹰﺍ ﰲ ﺍﳌﻠﺤﻖ ) (Cﻧﻈﻢ ﺍﻟﻌﺪ ﺍﻟﺜﻨﺎﺋﻲ ﻭﺍﻟﺜﻤﺎﱐ ﻭﺍﻟﺴﺖ ﻋﺸﺮﻱ ﺍﻟﻌﺸﺮﻱ ﻭﻛﻴﻔﻴﺔ ﲢﻮﻳﻞ ﺍﻷﻋﺪﺍﺩ ﻣﻦ
ﺃﻱ ﻧﻈﺎﻡ ﻣﻨﻬﺎ ﺇﱃ ﻧﻈﺎﻡ ﺁﺧﺮ .ﻧﻌﺮﺽ ﰲ ﺍﳌﻠﺤﻖ ) (Dﻋﺪﺩﹰﺍ ﻣﻦ ﺍﳌﺼﺎﺩﺭ ﺍﳌﺘﻮﻓﺮﺓ ﻋﻠﻰ ﺍﻻﻧﺘﺮﻧﺖ ﻭﺍﻟﻮﺏ
ﺣﻮﻝ ﻟﻐﺔ .C++ﻳﻨﺘﻬﻲ ﺍﻟﻜﺘﺎﺏ ﺑﻌﺪﻫﺎ ﺑﺬﻛﺮ ﻟﻌﺪﺩ ﻣﻦ ﺃﻫﻢ ﺍﳌﺮﺍﺟﻊ ﻭﺍﳌﺼﺎﺩﺭ ﺍﳍﺎﻣﺔ ﻭﺍﳌﺮﺗﺒﻄﺔ ﺑﻠﻐﺔ
.C++
. ﺗﺪﻋﻰ ﺍﻟﺸﺮﻛﺔ ﺍﻟﱵ ﻗﺎﻣﺖ ﺑﻨﺸﺮ ﺍﳊﻮﺍﺳﺐ ﺍﻟﺸﺨﺼﻴﺔ ﺑﺸﺮﻛﺔ ﺃ(
ﺏ( ﻳُﺴﻤﻰ ﺍﳊﺎﺳﺐ ﺍﻟﺬﻱ ﺟﻌﻞ ﻣﻦ ﺍﳊﻮﺍﺳﺐ ﺍﻟﺸﺨﺼﻴﺔ ﻣﻘﺒﻮﻟﺔ ﰲ ﺇﺩﺍﺭﺓ ﺍﻷﻋﻤﺎﻝ ﻭﰲ
ﺍﻟﺼﻨﺎﻋﺔ ﺑـ ـــــ.
ﺝ( ﺗﻌﺎﰿ ﺍﳊﻮﺍﺳﺐ ﺍﳌﻌﻄﻴﺎﺕ ﲢﺖ ﺍﺷﺮﺍﻑ ﳎﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﱵ ﺗﺴﻤﻰ
. ﺑـ
. ﺩ( ﻳﺘﺄﻟﻒ ﺍﳊﺎﺳﺐ ﻣﻦ ﺳﺘﺔ ﺃﺟﺰﺍﺀ ﻣﻨﻄﻘﻴﺔ ﻫﻲ:
. ، ، ﻫـ( ﺗﺆﻟﻒ ﻟﻐﺎﺕ ﺍﻟﱪﳎﺔ ﺛﻼﺛﺔ ﻓﺌﺎﺕ ﰎ ﺫﻛﺮﻫﺎ ﰲ ﺍﻟﻔﺼﻞ ﻭﻫﻲ:
ﻭ( ﻧﺴﻤﻲ ﺍﻟﱪﺍﻣﺞ ﺍﻟﱵ ﺗﻘﻮﻡ ﺑﺘﺮﲨﺔ ﺍﻟﱪﺍﻣﺞ ﻣﻦ ﻟﻐﺔ ﻋﺎﻟﻴﺔ ﺍﳌﺴﺘﻮﻯ ﺇﱃ ﻟﻐﺔ ﺍﻵﻟﺔ ﺑﺎﻟـ .
. ﺯ( ﻋُﺮﻓﺖ Cﻋﻠﻰ ﺃﻬﻧﺎ ﻟﻐﺔ ﺍﻟﺘﻄﻮﻳﺮ ﺍﳌﺴﺘﺨﺪﻣﺔ ﻟﺒﻨﺎﺀ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ
ﻣﻦ ﻗﺒﻞ Wirthﻣﻦ ﺃﺟﻞ ﺗﻌﻠﻴﻢ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﺍﳌﻬﻴﻜﻠﺔ ﺡ( ﰎ ﺗﻄﻮﻳﺮ ﻟﻐﺔ
ﰲ ﺍﳉﺎﻣﻌﺎﺕ.
ﻁ( ﻗﺎﻣﺖ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ﺍﻻﻣﲑﻳﻜﻴﺔ ﺑﺘﻄﻮﻳﺮ ﻟﻐﺔ Adaﻭﺯﻭﺩﻬﺗﺎ ﺑﺈﻣﻜﺎﻧﻴﺔ ﺍﻟـ ﺍﻟﱵ ﺗﺴﻤﺢ
ﻟﻠﻤﱪﻣﺞ ﺑﺘﻨﻔﻴﺬ ﻋﺪﺓ ﻣﻬﺎﻡ ﻋﻠﻰ ﺍﻟﺘﻮﺍﺯﻱ.
ﺍﻣﻸ ﺍﻟﻔﺮﺍﻏﺎﺕ ﺍﻟﻮﺍﺭﺩﺓ ﰲ ﺍﳉﻤﻞ ﺍﻟﺘﺎﻟﻴﺔ ﻭﺍﻟﱵ ﺗﺘﻌﻠﻖ ﺑﺒﻴﺌﺔ ﺍﻟﻌﻤﻞ ﺍﳋﺎﺻﺔ ﺑـ :C++ 2-1
. ﺗﺘﻢ ﻋﺎﺩﺓ ﻋﻤﻠﻴﺔ ﺇﺩﺧﺎﻝ ﺑﺮﺍﻣﺞ C++ﺇﱃ ﺍﳊﺎﺳﺐ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺑﺮﺍﻣﺞ ﺃ(
اﻟﻔﺼﻞ اﻷول ٨٠
ﺃ( ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ،ﺗﻘﻮﻡ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺑﻄﺒﺎﻋﺔ ﺍﻟﻨﺺ ﺍﳌﺬﻛﻮﺭ ﺑﻌﺪ ﺇﺷﺎﺭﺓ //ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ.
ﺏ( ﺗﺴﺒﺐ ﺳﻠﺴﻠﺔ ﺍﳍﺮﻭﺏ \nﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻊ coutﺇﻧﺘﻘﺎﻝ ﺍﳌﺆﺷﺮ ﺇﱃ ﺑﺪﺍﻳﺔ ﺍﻟﺴﻄﺮ
ﺍﻟﺘﺎﱄ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ.
ﺝ( ﳚﺐ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﻛﻞ ﺍﳌﺘﺤﻮﻻﺕ ﻗﺒﻞ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ.
ﺩ( ﳚﺐ ﲢﺪﻳﺪ ﳕﻂ ﺍﳌﺘﺤﻮﻻﺕ ﻋﻨﺪ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻨﻬﺎ.
ﻫـ( ﺗﻌﺘﱪ ﻟﻐﺔ C++ﺍﳌﺘﺤﻮﻟﲔ numberﻭ NuMbErﻋﻠﻰ ﺃﻬﻧﺎ ﻧﻔﺲ ﺍﳌﺘﺤﻮﻝ.
ﻭ( ﳝﻜﻦ ﻟﻠﺘﺼﺮﳛﺎﺕ ﺃﻥ ﺗﻈﻬﺮ ﰲ ﺃﻱ ﻣﻜﺎﻥ ﻣﻦ ﺟﺴﻢ ﺍﻟﺘﺎﺑﻊ ﺍﳌﻜﺘﻮﺏ ﺑﻠﻐﺔ .C++
ﺯ( ﺗﺴﺘﺨﺪﻡ ﻋﻤﻠﻴﺔ ﺍﻟﻘﺴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ )÷( ﻣﻊ ﺍﳌﻌﺎﻣﻼﺕ ﺍﻟﺼﺤﻴﺤﺔ ﻓﻘﻂ.
ﺡ( ﺗﺘﻤﺘﻊ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﳊﺴﺎﺑﻴﺔ * ﻭ /ﻭ %ﻭ +ﻭ -ﺑﻨﻔﺲ ﻣﺴﺘﻮﻯ ﺍﻷﻭﻟﻮﻳﺔ.
ﻁ( ﳚﺐ ﺃﻥ ﳛﺘﻮﻱ ﺑﺮﻧﺎﻣﺞ C++ﺍﻟﺬﻱ ﻳﻘﻮﻡ ﺑﻄﺒﺎﻋﺔ ﺛﻼﺛﺔ ﺃﺳﻄﺮ ﻋﻠﻰ ﺍﳋﺮﺝ ،ﻋﻠﻰ ﺛﻼﺙ
ﺗﻌﻠﻴﻤﺎﺕ ﺧﺮﺝ ﺑﺎﺳﺘﺨﺪﺍﻡ .cout
ﺃﻛﺘﺐ ﺗﻌﻠﻴﻤﺔ ﻭﺍﺣﺪﺓ ﺑﻠﻐﺔ C++ﻟﻠﻘﻴﺎﻡ ﲟﺎ ﻳﻠﻲ: 5-1
ﺍﻟﻨﻤﻂ .int
ﺏ( ﺍﻟﻄﻠﺐ ﻣﻦ ﺍﳌﺴﺘﺨﺪﻡ ﺇﺩﺧﺎﻝ ﻋﺪﺩ ﺻﺤﻴﺢ .ﻋﻠﻰ ﺃﻥ ﺗﻨﺘﻬﻲ ﺭﺳﺎﻟﺔ ﺍﻟﻄﻠﺐ ﺑﺈﺷﺎﺭﺓ )(:
ﻣﺘﺒﻮﻋﺔ ﺑﻔﺮﺍﻍ ﻭﻳﺒﻘﻰ ﺍﳌﺆﺷﺮ ﰲ ﻣﻜﺎﻧﻪ ﺑﻌﺪ ﺍﻟﻔﺮﺍﻍ.
ﺝ( ﻗﺮﺍﺀﺓ ﻋﺪﺩ ﺻﺤﻴﺢ ﻣُﺪﺧﻞ ﺑﻮﺍﺳﻄﺔ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ﻭﲣﺰﻥ ﻗﻴﻤﺘﻪ ﰲ ﺍﳌﺘﺤﻮﻝ agcﻣﻦ
ﺍﻟﻨﻤﻂ .int
ﺩ( ﺇﺫﺍ ﻛﺎﻧﺖ ﻗﻴﻤﺔ ﺍﳌﺘﺤﻮﻝ numberﻻﺗﺴﺎﻭﻱ ،7ﺍﻃﺒﻊ ﺍﻟﺮﺳﺎﻟﺔ:
"The variable number is not equal to 7".
ﺑﲔ ﺃﻥ ﺍﻟﱪﻧﺎﻣﺞ ﺳﻮﻑ ﻳﻘﻮﻡ ﲝﺴﺎﺏ ﺟﺪﺍﺀ ﺛﻼﺛﺔ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ. ﺃ(
ﺏ( ﺻﺮﺡ ﻋﻦ ﺍﳌﺘﺤﻮﻻﺕ x, y, zﻭ resultﻋﻠﻰ ﺃﻬﻧﺎ ﻣﻦ ﺍﻟﻨﻤﻂ .int
ﺝ( ﺇﻃﻠﺐ ﻣﻦ ﺍﳌﺴﺘﺨﺪﻡ ﺇﺩﺧﺎﻝ ﺛﻼﺛﺔ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ.
ﺩ( ﺇﻗﺮﺃ ﺛﻼﺛﺔ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ ﻣُﺪﺧﻠﺔ ﺑﻮﺍﺳﻄﺔ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ﻭﺧﺰﻬﻧﺎ ﰲ ﺍﳌﺘﺤﻮﻻﺕ .z, y, x
ﻫـ( ﻗﻢ ﲝﺴﺎﺏ ﺟﺪﺍﺀ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳌﺘﺤﻮﻻﺕ y, xﻭ yﻭﺿﻊ ﺍﻟﻨﺘﻴﺠﺔ
ﰲ ﺍﳌﺘﺤﻮﻝ .result
ﻭ( ﺇﻃﺒﻊ ﺍﻟﺮﺳﺎﻟﺔ ” “The product isﻣﺘﺒﻮﻋﺔ ﲟﺤﺘﻮﻯ ﺍﳌﺘﺤﻮﻝ .result
ﺯ( ﺃﻋﺪ ﻗﻴﻤﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﺘﺎﺑﻊ mainﺗﺪﻝ ﻋﻠﻰ ﻬﻧﺎﻳﺔ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﺑﻨﺠﺎﺡ.
ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﱵ ﻛﺘﺒﺘﻬﺎ ﻣﻊ ﺍﻟﺘﻤﺮﻳﻦ ،6-1ﻭﺫﻟﻚ ﻣﻦ ﺃﺟﻞ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻛﺎﻣﻞ ﻳﻘﻮﻡ 7-1
ﲝﺴﺎﺏ ﺟﺪﺍﺀ ﺛﻼﺛﺔ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ.
ﺣﺪﺩ ﺍﻷﺧﻄﺎﺀ ﻭﻗﻢ ﺑﺘﺼﺤﻴﺤﻬﺎ ﰲ ﻛ ٍﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ )ﺑﻔﺮﺽ ﺃﻧﻨﺎ ﻧﺴﺘﺨﺪﻡ ﺍﻟﺘﻌﻠﻴﻤﺔ 8-1
; Using std::coutﻣﻦ ﻗﺒﻞ(:
ﺃ(
;)if (c<7
اﻟﻔﺼﻞ اﻷول ٨٢
ﻫﻞ ﻳﺮﻯ ﺍﻟﺒﺸﺮ ﺷﺎﺷﺔ ﺍﻟﺘﻠﻔﺰﻳﻮﻥ ﻋﻠﻰ ﺃﻬﻧﺎ ﳎﺮﺩ ﻣﺴﺎﺣﺔ ﻣﺆﻟﻔﺔ ﻣﻦ ﺍﻟﺒﻘﻊ ﺍﳌﻠﻮﻧﺔ .ﺃﻡ ﺃﻬﻧﻢ ﺃ(
ﻳﺴﺘﻄﻴﻌﻮﻥ ﲤﻴﻴﺰ ﺛﻼﺛﺔ ﺃﺷﺨﺎﺹ ﺟﺎﻟﺴﲔ ﺇﱃ ﻃﺎﻭﻟﺔ .ﻫﺬﺍ ﻣﺜﺎﻝ ﻋﻠﻰ ﻣﻘﺪﺭﺓ ﻣﺘﻮﻓﺮﺓ ﻋﻦ
. ﺍﻟﺒﺸﺮ ﻭﺗﺴﻤﻰ ﺑـ
ﺏ( ﺇﺫﺍ ﻧﻈﺮﻧﺎ ﺇﱃ ﺍﻟﺴﻴﺎﺭﺓ ﻋﻠﻰ ﺃﻬﻧﺎ "ﻏﺮﺽ" ﻓﺒﺎﻟﺘﺎﱄ ﻫﻞ ﻧﻌﺘﱪ ﺍﳊﻘﻴﻘﺔ ﺍﻟﻘﺎﺋﻠﺔ ﺃﻥ ﺳﻘﻔﻬﺎ
ﺧﺎﺹ ﺃﻭ ﺧﺎﺻﺔ ﻬﺑﺬﺍ ﺍﻟﻐﺮﺽ. ﻗﺎﺑﻞ ﻟﻠﻄﻲ ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﺻﻔﺔ ﺃﻡ ﺳﻠﻮﻙ
ﺝ( ﺗﻌﺘﱪ ﺍﳊﻘﺎﺋﻖ ﺍﻟﱵ ﺗﻌﱪ ﻋﻦ ﻛﻮﻥ ﺍﻟﺴﻴﺎﺭﺓ ﻗﺎﺩﺭﺓ ﻋﻠﻰ ﺍﻟﺘﺴﺎﺭﻉ ﺃﻭ ﺍﻟﺘﺒﺎﻃﺊ ﺃﻭ ﺍﻟﺪﻭﺭﺍﻥ
ﲣﺺ ﺍﻟﱵ ﳝﻴﻨﹰﺎ ﺃﻭ ﻳﺴﺎﺭﹰﺍ ﺃﻭ ﺍﻟﺴﲑ ﺇﱃ ﺍﻷﻣﺎﻡ ﺃﻭ ﺇﱃ ﺍﳋﻠﻒ ﺃﻣﺜﻠﺔ ﻋﻦ ﺍﻟـ
ﺍﻟﺴﻴﺎﺭﺓ ﻣﺄﺧﻮﺫﺓ ﻛﻐﺮﺽ.
ﺩ( ﻋﻨﺪﻣﺎ ﻳﺄﺧﺬ ﳕﻂ ﺟﺪﻳﺪ ﻣﻦ ﺍﻟﺼﻔﻮﻑ ﺧﻮﺍﺻﻪ ﻭﺻﻔﺎﺗﻪ ﻣﻦ ﻋﺪﺓ ﺃﻧﻮﺍﻉ ﳐﺘﻠﻔﺔ ﻟﺼﻔﻮﻑ
. ﻣﻮﺟﻮﺩﺓ ﻣﺴﺒﻘﺎﹰ ،ﻧﺴﻤﻲ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺑﻌﻤﻠﻴﺔ ﺗﻮﺭﻳﺚ
. ﻫـ( ﺗﺘﺨﺎﻃﺐ ﺍﻷﻏﺮﺍﺽ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﺑﻮﺍﺳﻄﺔ
ﻭ( ﺗﺘﺨﺎﻃﺐ ﺍﻷﻏﺮﺍﺽ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﻣﻦ ﺧﻼﻝ ﻣُﻌﺮﻓﺔ ﺟﻴﺪﹰﺍ.
ﺯ( ﻻ ﻳُﺴﻤﺢ ﻋﺎﺩ ﹰﺓ ﻷﻱ ﻏﺮﺽ ﺃﻥ ﻳﻌﺮﻑ ﻛﻴﻒ ﰎ ﺑﻨﺎﺀ ﺍﻷﻏﺮﺍﺽ ﺍﻷﺧﺮﻯ ،ﻧﺴﻤﻲ ﺍﳋﺎﺻﺔ
. ﺍﻟﺴﺎﺑﻘﺔ ﺧﺎﺻﺔ
ﺍﻟﻮﺍﺭﺩﺓ ﰲ ﻧﺼﻮﺹ ﺗﻮﺻﻴﻒ ﻧﻈﺎﻡ ﻣﺎ ،ﺍﳌﱪﳎﲔ ﻟﻪ ﺑﻠﻐﺔ ﺡ( ﺗﺴﺎﻋﺪ
C++ﻋﻠﻰ ﲢﺪﻳﺪ ﺍﻟﺼﻔﻮﻑ ﺍﻟﻼﺯﻣﺔ ﻟﺒﻨﺎﺀ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ.
ﻭﻧﺴﻤﻲ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﺪﺍﺧﻠﺔ ﰲ ﻁ( ﻧﺴﻤﻲ ﺍﳌﻌﻄﻴﺎﺕ ﺍﻟﺪﺍﺧﻠﺔ ﰲ ﺑﻨﺎﺀ ﺍﻟﺼﻒ ﺑـ
. ﺑﻨﺎﺀﻩ ﺃﻳﻀﹰﺎ ﺑـ
ﻧﺴﻤﻲ ﺍﻟﻨﺴﺨﺔ ﺍﳌﺄﺧﻮﺫﺓ ﻋﻦ ﺃﻱ ﳕﻂ ﻣﻌﺮﻑ ﻣﻦ ﻗﺒﻞ ﺍﳌﺴﺘﺨﺪﻡ user-defined type ﻱ(
. ﺑـ
.Apple ﺃ(
٨٣ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
main ﺃ(
ﺏ( ﺍﻟﻘﻮﺱ ﺍﻟﻜﺒﲑ ﺍﻷﻳﺴﺮ ){( ﻭﺍﻟﻘﻮﺱ ﺍﻟﻜﺒﲑ ﺍﻷﳝﻦ )}(.
; ﺝ(
ﺩ( ﺳﻄﺮ ﺟﺪﻳﺪ .newline
ﻫـ( .if
4-1
ﺧﻄﺄ .ﻻﺗﺴﺒﺐ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﻘﻴﺎﻡ ﺑﺄﻱ ﻓﻌﻞ ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﻭﻟﻜﻦ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺃ(
ﻣﻦ ﺃﺟﻞ ﺗﻮﺛﻴﻖ ﻋﻤﻞ ﺍﻟﱪﻧﺎﻣﺞ ﻭﺯﻳﺎﺩﺓ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﻗﺮﺍﺀﺗﻪ.
ﺏ( ﺻﺢ
ﺝ( ﺻﺢ
ﺩ( ﺻﺢ
ﻫـ( ﺧﻄﺄ .ﻷﻥ ﻟﻐﺔ C++ﻟﻐﺔ ﺣﺴﺎﺳﺔ ﳊﺎﻟﺔ ﺍﳊﺮﻭﻑ ،ﻟﺬﻟﻚ ﻓﻬﻲ ﺗﻌﺘﱪ ﺍﳌﺘﺤﻮﻟﲔ
اﻟﻔﺼﻞ اﻷول ٨٤
7-1
// calculate the product of three integers
# indude < io
٨٥ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
>stream
;using std::cout
;using std::cin
;using std::endl
) ( main
{
;int x, y, z, result
;" cout << "Enter three integers:
;cin >> x >> y >> z
;result = x * y * z
;'cout << "the product is" << result << '\n
;return 0
}
8-1
ﺍﳋﻄﺄ :ﻭﺿﻊ ﺍﻟﻔﺎﺻﻠﺔ ﺍﳌﻨﻘﻮﻃﺔ ; ﺑﻌﺪ ﺍﻟﻘﻮﺱ ﺍﻷﳝﻦ ﻟﻠﺸﺮﻁ ﺍﳌﺘﻌﻠﻖ ﺑﺘﻌﻠﻴﻤﺔ .if i ﺃ(
ﺍﻟﺘﺼﺤﻴﺢ :ﺣﺬﻑ ﻫﺬﻩ ﺍﻟﻔﺎﺻﻠﺔ ﻣﻦ ﺑﻌﺪ ﺍﻟﻘﻮﺱ ﺍﳌﺬﻛﻮﺭ. i
ﻣﻼﺣﻈﺔ :ﻳﻨﺘﺞ ﻋﻦ ﻫﺬﺍ ﺍﳋﻄﺄ ﺃﻧﻪ ﺳﻮﻑ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺔ ﺍﳋﺮﺝ ﺑﻐﺾ ﺍﻟﻨﻈﺮ i
ﻋﻦ ﺻﺤﺔ ﺃﻭ ﻋﺪﻡ ﺻﺤﺔ ﺍﻟﺸﺮﻁ ﺍﳌﺮﺍﻓﻖ ﻟﺘﻌﻠﻴﻤﺔ ﺍﻟـ .ifﻳﺪﻝ ﻭﺟﻮﺩ ﺍﻟﻔﺎﺻﻠﺔ
ﺍﳌﻨﻘﻮﻃﺔ ﺑﻌﺪ ﺍﻟﻘﻮﺱ ﺍﻷﳝﻦ ﻟﻠﺸﺮﻁ ﻋﻠﻰ ﻭﺟﻮﺩ ﻣﺎ ﻧﺴﻤﻴﻪ ﺑﺎﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﻔﺎﺭﻏﺔ
ﻭﻫﻲ ﺍﻟﺘﻌﻠﻴﻤﺔ ﻻﺗﻘﻮﻡ ﺑﺄﻱ ﺷﻲﺀ ﻛﻤﺎ ﺳﻨﺮﻯ ﻻﺣﻘﹰﺎ.
ﺍﳋﻄﺄ :ﻋﻤﻠﻴﺔ ﺍﳌﻘﺎﺭﻧﺔ >= ﻣﻜﺘﻮﺑﺔ ﺑﺸﻜﻞ ﺧﺎﻃﺊ. i ﺏ(
ﺍﻟﺘﺼﺤﻴﺢ :ﳚﺐ ﺃﻥ ﺗﻜﺘﺐ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ.>= : i
9-1
ﺗﻤﺎریﻦ
ﺻﻒ ﺍﳌﻜﻮﻧﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ ﺃﻬﻧﺎ ﺗﻨﺘﻤﻲ ﺇﱃ ﺍﻟﺒﲎ ﺍﻟﺼﻠﺒﺔ Hardwareﺃﻡ ﺇﱃ ﺍﻟﺒﲎ ﺍﳌﺮﻧﺔ :Software 10-1
ﻣﺎ ﻫﻮ ﺍﺳﻢ ﺍﻟﻮﺣﺪﺓ ﺍﳌﻨﻄﻘﻴﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳊﺎﺳﺐ ﻭﺍﻟﱵ ﺗﺴﺘﻘﺒﻞ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻣﻦ ﺍﳋﺎﺭﺝ ﺃ(
ﻟﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺩﺍﺧﻞ ﺍﳊﺎﺳﺐ؟ .
. ﺏ( ﺗﺴﻤﻰ ﻋﻤﻠﻴﺔ ﺍﻟﻄﻠﺐ ﻣﻦ ﺍﳊﺎﺳﺐ ﳊﻞ ﻣﺸﺎﻛﻞ ﳏﺪﺩﺓ ﺑﻌﻤﻠﻴﺔ ﺍﻟـ
ﺝ( ﺇﱃ ﺃﻱ ﻓﺌﺔ ﺗﻨﺘﻤﻲ ﻟﻐﺔ ﺍﳊﺎﺳﺐ ﺍﻟﱵ ﺗﺴﺘﺨﺪﻡ ﻣﺼﻄﻠﺤﺎﺕ ﻭﺍﺧﺘﺼﺎﺭﺍﺕ ﻗﺮﻳﺒﺔ ﻣﻦ ﺍﻟﻠﻐﺔ
. ﺍﻹﻧﻜﻠﻴﺰﻳﺔ ﻣﻦ ﺃﺟﻞ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ؟
ﺩ( ﻣﺎ ﻫﻮ ﺍﺳﻢ ﺍﻟﻮﺣﺪﺓ ﺍﳌﻨﻄﻘﻴﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳊﺎﺳﺐ ﻭﺍﻟﱵ ﺗﻘﻮﻡ ﺑﺈﺭﺳﺎﻝ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺍﻟﱵ
ﲤﺖ ﻣﻌﺎﳉﺘﻬﺎ ﺇﱃ ﻋﺪﺓ ﺃﺟﻬﺰﺓ ﲡﻌﻞ ﻣﻦ ﺍﳌﻤﻜﻦ ﺍﻻﺳﺘﻔﺎﺩﺓ ﻣﻦ ﻫﺬﻩ ﺍﳌﻌﻠﻮﻣﺎﺕ ﺧﺎﺭﺝ
. ﺍﳊﺎﺳﺐ؟
ﻫـ( ﻣﺎ ﻫﻮ ﺍﺳﻢ ﺍﻟﻮﺣﺪﺓ ﺍﳌﻨﻄﻘﻴﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳊﺎﺳﺐ ﺍﻟﱵ ﺗﻘﻮﻡ ﺑﺘﺨﺰﻳﻦ ﺍﳌﻌﻠﻮﻣﺎﺕ؟ .
. ﻭ( ﻣﺎ ﻫﻮ ﺍﺳﻢ ﺍﻟﻮﺣﺪﺓ ﺍﳌﻨﻄﻘﻴﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳊﺎﺳﺐ ﺍﻟﱵ ﺗﻘﻮﻡ ﺑﺎﳊﺴﺎﺑﺎﺕ؟
ﺯ( ﻣﺎ ﻫﻮ ﺍﺳﻢ ﺍﻟﻮﺣﺪﺓ ﺍﳌﻨﻄﻘﻴﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳊﺎﺳﺐ ﺍﻟﱵ ﺗﻘﻮﻡ ﺑﺎﲣﺎﺫ ﻗﺮﺍﺭﺍﺕ
. ﻣﻨﻄﻘﻴﺔ؟
ﻫﻲ ﺃﻛﺜﺮ ﺍﻟﻠﻐﺎﺕ ﻣﻼﺋﻤﺔ ﻟﻠﻤﱪﻣﺞ ﺡ( ﺗﻌﺘﱪ ﺍﻟﻠﻐﺎﺕ ﺍﻟﱵ ﺗﻨﺘﻤﻲ ﺇﱃ ﻓﺌﺔ ﺍﻟﻠﻐﺎﺕ
ﺣﱴ ﻳﺴﺘﻄﻴﻊ ﻛﺘﺎﺑﺔ ﺑﺮﺍﳎﻪ ﺑﺴﺮﻋﺔ ﻭﻳﺴﺮ.
ﺍﳋﺎﺻﺔ ﺑﻪ. ﻁ( ﺗﺴﻤﻰ ﺍﻟﻠﻐﺔ ﺍﻟﱵ ﻳﺴﺘﻄﻴﻊ ﺍﳊﺎﺳﺐ ﻓﻬﻤﻬﺎ ﻣﺒﺎﺷﺮﺓ ﺑـ
ﻱ( ﻣﺎ ﻫﻮ ﺍﺳﻢ ﺍﻟﻮﺣﺪﺓ ﺍﳌﻨﻄﻘﻴﺔ ﺍﳌﻮﺟﻮﺩﺓ ﰲ ﺍﳊﺎﺳﺐ ﻭﺍﻟﱵ ﺗﻘﻮﻡ ﲟﻬﻤﺔ ﺍﻟﺘﺤﻜﻢ ﻭﺍﻟﺘﻮﺍﻓﻘﻴﺔ
. ﺑﲔ ﳐﺘﻠﻒ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻷﺧﺮﻯ؟
٨٧ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
std::cin ﺃ(
std::cout ﺏ(
.std::cerr ﺝ(
ﳌﺎﺫﺍ ﻳﻨﺼﺐ ﺣﺎﻟﻴﹰﺎ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻷﻛﱪ ﺣﻮﻝ ﺃﺳﻠﻮﺏ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻋﺎﻣ ﹰﺔ ﻭﺣﻮﻝ ﺍﻟﱪﳎﺔ 14-1
ﺑﻠﻐﺔ C++ﺧﺎﺻ ﹰﺔ ؟
ﺿﻤﻦ ﻧﺺ ﺍﻟﱪﻧﺎﻣﺞ ﻣﻦ ﺃﺟﻞ ﺗﻮﺛﻴﻖ ﻋﻤﻠﻪ ﻭﲢﺴﲔ ﺍﻟﻘﺪﺭﺓ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺃ(
ﻋﻠﻰ ﻗﺮﺍﺀﺗﻪ.
ﻣﻦ ﺃﺟﻞ ﻃﺒﺎﻋﺔ ﺍﳌﻌﻠﻮﻣﺎﺕ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ. ﺏ( ﻧﺴﺘﺨﺪﻡ ﺍﻟﻐﺮﺽ
ﻫﻲ ﺗﻌﻠﻴﻤﺔ C++ﺍﻟﱵ ﺗﺴﺎﻋﺪ ﻋﻠﻰ ﺍﲣﺎﺫ ﺍﻟﻘﺮﺍﺭﺍﺕ. ﺝ( ﺗﻌﺘﱪ ﺗﻌﻠﻴﻤﺔ
. ﻫـ( ﺗﺘﻢ ﺍﳊﺴﺎﺑﺎﺕ ﻋﺎﺩﺓ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﻌﻠﻴﻤﺎﺕ
ﺑﺈﺩﺧﺎﻝ ﺍﳌﻌﻄﻴﺎﺕ ﻣﻦ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ﺇﱃ ﺍﳊﺎﺳﺐ. ﻭ( ﻳﻘﻮﻡ ﺍﻟﻐﺮﺽ
ﺍﻛﺘﺐ ﺗﻌﻠﻴﻤﺔ C++ﻭﺍﺣﺪﺓ )ﺃﻭ ﺳﻄﺮ ﻭﺍﺣﺪﹰﺍ( ﻟﻠﻘﻴﺎﻡ ﺑﺎﻷﻋﻤﺎﻝ ﺍﻟﺘﺎﻟﻴﺔ: 16-1
ﻫـ( ﺍﻻﲰﺎﺀ ﺍﻟﺘﺎﻟﻴﺔ ﻫﻲ ﺃﲰﺎﺀ ﻏﲑ ﺻﺤﻴﺤﺔ ﳌﺘﺤﻮﻻﺕ.2h, h22, 67h2, 87, 3g:
ﻣﺎ ﻫﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﳊﺴﺎﺑﻴﺔ ﺍﻟﱵ ﳍﺎ ﻧﻔﺲ ﻣﺴﺘﻮﻯ ﺍﻷﻭﻟﻮﻳﺔ ﺍﳌﻤﺎﺛﻞ ﻟﻌﻤﻠﻴﺔ ﺍﻟﻀﺮﺏ؟ . ﺍ(
ﺏ( ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﻟﺪﻳﻨﺎ ﺃﻗﻮﺍﺱ ﻣﺘﺪﺍﺧﻠﺔ ﰲ ﻋﺒﺎﺭﺓ ﺣﺴﺎﺑﻴﺔ ﻣﺎ ،ﺍﻧﻄﻼﻗﹰﺎ ﻣﻦ ﺃﻳﺔ ﳎﻤﻮﻋﺔ
. ﻟﻸﻗﻮﺍﺱ ﻳﺒﺪﺃ ﺗﻘﻴﻴﻢ ﺍﻟﻌﺒﺎﺭﺓ؟
ﺝ( ﻧﺴﻤﻲ ﺍﳌﻮﺿﻊ ﰲ ﺫﺍﻛﺮﺓ ﺍﳊﺎﺳﺐ ﺍﻟﺬﻱ ﳝﻜﻦ ﺃﻥ ﳛﺘﻮﻱ ﻋﻠﻰ ﻗﻴﻢ ﳐﺘﻠﻔﺔ ﺧﻼﻝ
. ﳊﻈﺎﺕ ﺗﻨﻔﻴﺬ ﺍﻟﱪﻧﺎﻣﺞ ﺍﳌﺨﺘﻠﻔﺔ ﺑـ
ﻣﺎ ﺍﻟﺬﻱ ﻳﺘﻢ ﻃﺒﺎﻋﺘﻪ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ C++؟ ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﺘﻌﻠﻴﻤﺔ 19-1
ﻻﺗﻘﻮﻡ ﺑﺄﻳﺔ ﻃﺒﺎﻋﺔ ﺃﺟﺐ ﺑﻜﻠﻤﺔ "ﻻﺷﻴﺊ" ﻣﻊ ﺍﻻﻓﺘﺮﺍﺽ ﺃﻥ x=2 :ﻭ .y=3
;cout << x ﺃ(
;cout << x+x ﺏ(
;"=cout << "x ﺝ(
;cout << "x=" << x ﺩ(
;cout << x+y << "=" << y+x ﻫـ(
;z=x+y ﻭ(
;cin >> x >> y ﺯ(
;//cout << "x+y=" << x+y ﺡ(
;"cout << "\n ﻁ(
ﺃﻱ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﲢﺘﻮﻱ ﻋﻠﻰ ﻣﺘﺤﻮﻻﺕ ﻳﺘﻢ ﺗﺪﻣﲑ ﳏﺘﻮﺍﻫﺎ ﲟﻮﺟﺐ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ: 20-1
ﺗﻌﱪ ﻋﻦ C++ ﺇﺫﺍ ﻛﺎﻥ ﻟﺪﻳﻨﺎ ﺍﳌﻌﺎﺩﻟﺔ ،y=ax3+7ﻓﺄﻱ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ 21-1
ﺍﳌﻌﺎﺩﻟﺔ ﺍﻟﺴﺎﺑﻘﺔ:
٨٩ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
;y=a*x*x*x+7 ﺃ(
;)y=a*x*x*(x+7 ﺏ(
;)y=(a*x)*x*(x+7 ﺝ(
;y=(a*x)*x*x+7 ﺩ(
;y=a*(x*x*x)+7 ﻫـ(
;)y=a*x*(x*x+7 ﻭ(
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﻮﻡ ﺑﺎﻟﻄﻠﺐ ﻣﻦ ﺍﳌﺴﺘﺨﺪﻡ ﺇﺩﺧﺎﻝ ﻋﺪﺩﻳﻦ ﰒ ﻗﻢ ﺑﺄﺧﺬ ﻫﺬﻳﻦ ﺍﻟﻌﺪﺩﻳﻦ ﻟﻴﻄﺒﻊ 22-1
ﳎﻤﻮﻋﻬﻤﺎ ﻭﺟﺪﺍﺀﳘﺎ ﻭﻓﺮﻗﻬﻤﺎ ﻭﻧﺎﺗﺞ ﻗﺴﻤﺘﻬﻤﺎ.
ﺑﲔ ﺗﺮﺗﻴﺐ ﺗﻘﻴﻴﻢ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻮﺍﺭﺩﺓ ﰲ ﻛﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺍﳌﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ .C++ﻭﻭﺿﺢ 23-1
ﻗﻴﻤﺔ xﰲ ﻬﻧﺎﻳﺔ ﺗﻨﻔﻴﺬ ﻛﻞ ﻣﻨﻬﻤﺎ.
;x=7+3*6/2-1 ﺃ(
;x=2%2+2*2-2/2 ﺏ(
;))))x=(3*9*(3+(9*3/(3 ﺝ(
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﻮﻡ ﺑﻄﺒﺎﻋﺔ ﺍﻷﻋﺪﺍﺩ ﻣﻦ 1ﺇﱃ 4ﻋﻠﻰ ﻧﻔﺲ ﺍﻟﺴﻄﺮ ﻋﻠﻰ ﺃﻥ ﻳﻔﺼﻞ ﺑﲔ ﻛﻞ 24-1
ﺭﻗﻤﲔ ﻣﺘﺠﺎﻭﺭﻳﻦ ﻓﺮﺍﻍ ﻭﺍﺣﺪ ﻓﻘﻂ .ﺃﺳﺘﺨﺪﻡ ﻟﻜﺘﺎﺑﺔ ﺍﻟﱪﻧﺎﻣﺞ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﺘﺎﻟﻴﺔ:
ﺍﺳﺘﺨﺪﻡ ﺗﻌﻠﻴﻤﺔ ﺧﺮﺝ ﻭﺍﺣﺪﺓ ﻣﻊ ﻋﻤﻠﻴﺔ ﳎﺮﻯ ﺇﺩﺧﺎﻝ ﻭﺍﺣﺪﺓ. ﺃ(
ﺏ( ﺍﺳﺘﺨﺪﻡ ﺗﻌﻠﻴﻤﺔ ﺧﺮﺝ ﻭﺍﺣﺪﺓ ﻣﻊ ﺃﺭﺑﻌﺔ ﻋﻤﻠﻴﺎﺕ ﳎﺮﻯ ﺇﺩﺧﺎﻝ.
ﺝ( ﺍﺳﺘﺨﺪﻡ ﺃﺭﺑﻌﺔ ﺗﻌﻠﻴﻤﺎﺕ ﺧﺮﺝ.
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻄﻠﺐ ﻣﻦ ﺍﳌﺴﺘﺨﺪﻡ ﺇﺩﺧﺎﻝ ﻋﺪﺩﻳﻦ ﺻﺤﻴﺤﲔ .ﰒ ﻳﺄﺧﺬ ﻫﺬﻳﻦ ﺍﻟﻌﺪﺩﻳﻦ ﻟﻴﻄﺒﻊ 25-1
ﺍﻟﻌﺪﺩ ﺍﻷﻛﱪ ﺑﻴﻨﻬﻤﺎ ﻣﺘﺒﻮﻋﹰﺎ ﺑﺎﻟﺮﺳﺎﻟﺔ ” .“is larger.ﺇﺫﺍ ﻛﺎﻥ ﺍﻟﻌﺪﺩﺍﻥ ﻣﺘﺴﺎﻭﻳﲔ ،ﻋﻨﺪﻫﺎ ﻳﻄﺒﻊ
ﺍﻟﱪﻧﺎﻣﺞ ﺍﻟﺮﺳﺎﻟﺔ ”.“there numbers are equal
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﺄﺧﺬ ﻛﺪﺧﻞ ﺛﻼﺙ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ ﻣﻦ ﻟﻮﺣﺔ ﺍﳌﻔﺎﺗﻴﺢ ﰒ ﻳﻄﺒﻊ ﳎﻤﻮﻋﻬﻤﺎ 26-1
ﻭﻣﺘﻮﺳﻄﻬﺎ ﻭﻧﺎﺗﺞ ﺟﺪﺍﺀﻫﺎ ﻭﻗﻴﻤﺔ ﺃﺻﻐﺮ ﻋﺪﺩ ﻭﻗﻴﻤﺔ ﺃﻛﱪ ﻋﺪﺩ ﻣﻦ ﺑﻴﻨﻬﺎ .ﳚﺐ ﺃﻥ ﳓﺼﻞ ﰲ
ﺍﳋﺮﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﺍﻟﺘﺎﻟﻴﺔ:
Input three different integers: 13 27 14
Sum is 54
Average is 18
Product is 4914
اﻟﻔﺼﻞ اﻷول ٩٠
Smallest is 13
Largest is 27
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﺮﺃ ﻧﺼﻒ ﻗﻄﺮ ﺩﺍﺋﺮﺓ ﰒ ﻳﻄﺒﻊ ﻗﻴﻤﺔ ﻗﻄﺮ ﺍﻟﺪﺍﺋﺮﺓ ،ﳏﻴﻄﻬﺎ ﻭﻣﺴﺎﺣﺘﻬﺎ .ﺍﺳﺘﺨﺪﺍﻡ 27-1
ﺍﻟﻘﻴﻤﺔ 3.14159ﻛﻘﻴﻤﺔ ﻟـ .πﻗﻢ ﻬﺑﺬﻩ ﺍﳊﺴﺎﺑﺎﺕ ﺿﻤﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﳋﺮﺝ.
)ﻣﻼﺣﻈﺔ :ﻗﻤﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺑﻤﻨﺎﻗﺸﺔ اﻟﻤﺘﺤﻮﻻت واﻟﺜﻮاﺑﺖ ذات اﻟﻘﻴﻤﺔ اﻟﺼﺤﻴﺤﺔ.
وﺳﻮف ﻧﺘﻌﺮض ﻓﻲ اﻟﻔﺼﻞ ﻟﻤﻨﺎﻗﺸﺔ اﻷﻋﺪاد ذات اﻟﻔﺎﺹﻠﺔ اﻟﻌﺎﺋﻤﺔ floating point
numbersأي اﻟﻘﻴﻢ اﻟﺘﻲ ﻟﻬﺎ ﺝﺰء ﻋﺸﺮي(.
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﻮﻡ ﺑﻄﺒﺎﻋﺔ ﻣﺴﺘﻄﻴﻞ ،ﻭﺷﻜﻞ ﺑﻴﻀﻮﻱ ﻭﺳﻬﻢ ﻭﻣﻌﲔ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﱄ: 28-1
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﺮﺃ ﲬﺴﺔ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ ﰒ ﳛﺪﺩ ﻭﻳﻄﺒﻊ ﺃﻛﱪﻫﺎ ﻭﺃﺻﻐﺮﻫﺎ .ﺍﺳﺘﺨﺪﺍﻡ ﻓﻘﻂ 30-1
ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﱵ ﺗﻌﻠﻤﺘﻬﺎ ﰲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ.
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﺮﺃ ﻋﺪﺩﹰﺍ ﺻﺤﻴﺤﹰﺎ ﰒ ﳛﺪﺩ ﻭﻳﻄﺒﻊ ﻓﻴﻤﺎ ﺇﺫﺍ ﻛﺎﻥ ﻫﺬﺍ ﺍﻟﻌﺪﺩ ﺯﻭﺟﻴﹰﺎ ﺃﻡ ﻓﺮﺩﻳﹰﺎ. 31-1
)ﺗﻮﺝﻴﻪ :اﺳﺘﺨﺪام ﻋﻤﻠﻴﺔ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ اﻟﺼﺤﻴﺤﺔ .ﻧﻘﻮل ﻋﻦ ﻋﺪد ﻣﺎ أﻧﻪ زوﺝﻲ إذا
آﺎن ﻣﻦ ﻣﻀﺎﻋﻔﺎت اﻟﻌﺪد .2وﺑﺎﻗﻲ ﻗﺴﻤﺔ أي ﻋﺪد ﻣﻦ ﻣﻀﺎﻋﻔﺎت اﻟﻌﺪد 2ﻋﻠﻰ اﻟﻌﺪد 2
هﻮ ﺹﻔﺮ(.
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﺮﺃ ﻋﺪﺩﻳﻦ ﺻﺤﻴﺤﲔ ﰒ ﳛﺪﺩ ﻭﻳﻄﺒﻊ ﻓﻴﻤﺎ ﺇﺫﺍ ﻛﺎﻥ ﺍﻷﻭﻝ ﻣﻦ ﻣﻀﺎﻋﻔﺎﺕ ﺍﻟﺜﺎﱐ. 32-1
ﺃﻇﻬﺮ ﺭﻗﻌﺔ ﺍﻟﺪﺍﻣﺎ ﺍﳌﺒﻴﻨﺔ ﰲ ﺍﻟﺸﻜﻞ ﻭﺫﻟﻚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﺴﻌﺔ ﺗﻌﻠﻴﻤﺎﺕ ﻟﻠﺨﺮﺝ ،ﰒ ﺣﺎﻭﻝ ﺇﻇﻬﺎﺭ 33-1
ﻧﻔﺲ ﺍﻟﺸﻜﻞ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﻗﻞ ﻋﺪﺩ ﳑﻜﻦ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﳋﺮﺝ.
٩١ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++
**************
**************
**************
**************
**************
**************
**************
**************
ﻣﺎ ﻫﻮ ﺍﻟﻔﺮﻕ ﺑﲔ ﺧﻄﺄ ﻓﺎﺩﺡ fatal errorﻭﺧﻄﺄ ﻏﲑ ﻓﺎﺩﺡ؟ ﻭﳌﺎﺫﺍ ﻳﻔﻀﻞ ﺍﳌﱪﻣﺞ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ 34-1
ﺍﻷﺧﻄﺎﺀ ﺍﻟﻔﺎﺩﺣﺔ ﻋﻠﻰ ﻏﲑﻫﺎ ﻣﻦ ﺍﻷﺧﻄﺎﺀ؟
ﻟﻨﺤﺎﻭﻝ ﺍﺧﺘﻼﺱ ﺍﻟﻨﻈﺮ ﻗﺪﻣﹰﺎ ﺣﻮﻝ ﺍﳌﻮﺍﺿﻴﻊ ﺍﻟﱵ ﺳﻮﻑ ﻧﻌﺎﳉﻬﺎ ﻓﻴﻤﺎ ﺑﻌﺪ .ﻟﻘﺪ ﺗﻌﻠﻤﺖ ﰲ ﻫﺬﺍ 35-1
ﺍﻟﻔﺼﻞ ﻛﻴﻒ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﻣﻊ ﺍﻟﻨﻤﻂ .intﻟﻜﻦ ﻟﻐﺔ C++ﺗﺴﺘﻄﻴﻊ ﲤﺜﻴﻞ
ﺍﻷﺣﺮﻑ ﺍﻟﻼﺗﻴﻨﻴﺔ ﺍﻟﺼﻐﲑﺓ ﻭﺍﻟﻜﺒﲑﺓ ﺑﺎﻹﺿﺎﻓﺔ ﺇﱃ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ﺍﳋﺎﺻﺔ .ﻭﻫﻲ )ﺃﻱ (C++
ﺗﺴﺘﺨﺪﻡ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ ﺻﻐﲑﺓ ﻟﺘﻤﺜﻞ ﺩﺍﺧﻠﻴﹰﺎ ﻛﻞ ﺣﺮﻑ ﻣﻦ ﺍﳊﺮﻭﻑ .ﻧﺴﻤﻲ ﳎﻤﻮﻋﺔ
ﺍﳊﺮﻭﻑ ﻭﺍﻟﻘﻴﻢ ﺍﻟﺼﺤﻴﺤﺔ ﺍﳌﻮﺍﻓﻘﺔ ﳍﺎ ﲟﺠﻤﻮﻋﺔ ﺣﺮﻭﻑ ﺍﳊﺎﺳﺐ .computer’s character set
ﻭﳝﻜﻦ ﻃﺒﺎﻋﺔ ﺣﺮﻑ ﺑﻮﺿﻊ ﺍﳊﺮﻑ ﺑﲔ ﺇﺷﺎﺭﰐ )‘( ﻭﺃﺭﺳﺎﻟﻪ ﺇﱃ ﺗﻌﻠﻴﻤﺔ coutﻋﻠﻰ ﺍﻟﺸﻜﻞ
ﺍﻟﺘﺎﱄ:
;'cout << 'A
)(static_cast ﻭﳝﻜﻦ ﻃﺒﺎﻋﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺼﺤﻴﺤﺔ ﺍﳌﻜﺎﻓﺌﺔ ﻟﻠﺤﺮﻑ ﺑﺄﻥ ﻧﻀﻊ ﻗﺒﻞ ﺫﻟﻚ ﺍﳊﺮﻑ ﺍﻟﻌﺒﺎﺭﺓ
)ﻫﺬﺍ ﻣﺎ ﻧﺴﻤﻴﻪ ﺑﻌﻤﻠﻴﺔ ﺍﻟﻘﺴﺮ castـ ﻛﻤﺎ ﺳﻨﺮﻯ ﻻﺣﻘﹰﺎ ﰲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﱐ( ﻛﻤﺎ ﻳﻠﻲ:
;)'cout << static_cast<int> ('A
ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻓﺈﻬﻧﺎ ﺳﻮﻑ ﺗﻄﺒﻊ ﺍﻟﻘﻴﻤﺔ ) 65ﻫﺬﻩ ﺍﻟﻘﻴﻤﺔ ﺗﻮﺍﻓﻖ ﺍﻟﻨﻈﻢ ﺍﻟﱵ ﺗﺴﺘﺨﺪﻡ
ﻣﺎ ﻳﺴﻤﻰ ﲟﺠﻤﻮﻋﺔ ﺍﳊﺮﻭﻑ .(ASCIIﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﻮﻡ ﺑﻄﺒﺎﻋﺔ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﺍﳌﻜﺎﻓﺌﺔ
ﻟﻠﺤﺮﻭﻑ ﺍﻟﻼﺗﻴﻨﻴﺔ ﺍﻟﻜﺒﲑﺓ ﻭﺍﻟﺼﻐﲑﺓ ﻭﺍﻷﺭﻗﺎﻡ ﻭﺍﻟﺮﻣﻮﺯ ﺍﳋﺎﺻﺔ .ﺣﺪﺩ ﻛﺤﺪ ﺃﺩﱏ ﺍﻷﻋﺪﺍﺩ
ﺍﻟﺼﺤﻴﺤﺔ ﺍﳌﻜﺎﻓﺌﺔ ﳌﺎ ﻳﻠﻲ / + * $ 2 1 0 c b a C B A :ﻭﺍﻟﻔﺮﺍﻍ.
ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﺄﺧﺬ ﻛﺪﺧﻞ ﺭﻗﻤﹰﺎ ﻣﺆﻟﻔﹰﺎ ﻣﻦ ﲬﺴﺔ ﺧﺎﻧﺎﺕ ،ﰒ ﻳﻘﻮﻡ ﺑﻔﺼﻞ ﻫﺬﻩ ﺍﳋﺎﻧﺎﺕ ﺇﱃ ﺃﺭﻗﺎﻡ 36-1
ﻣﻨﻔﺼﻠﺔ ﻟﻴﻄﺒﻌﻬﺎ ﺑﻌﺪ ﺫﻟﻚ ﻋﻠﻰ ﺍﻟﺸﺎﺷﺔ ﻣﻔﺼﻮﻟﺔ ﻋﻦ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ ﺑﻮﺍﺳﻄﺔ ﺛﻼﺛﺔ ﻓﺮﺍﻏﺎﺕ .ﻋﻠﻰ
ﺳﺒﻴﻞ ﺍﳌﺜﺎﻝ ،ﺇﺫﺍ ﺃﺩﺧﻞ ﺍﳌﺴﺘﺨﺪﻡ ﺍﻟﻌﺪﺩ 42339ﻓﺴﻨﺤﺼﻞ ﰲ ﺍﳋﺮﺝ ﻋﻠﻰ:
ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﱵ ﺗﻌﻠﻤﺘﻬﺎ ﰲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ،ﺃﻛﺘﺐ ﺑﺮﻧﺎﳎﹰﺎ ﻳﻘﻮﻡ ﲝﺴﺎﺏ ﻣﺮﺑﻊ ﻭﻣﻜﻌﺐ 37-1
ﺍﻷﻋﺪﺍﺩ ﻣﻦ 0ﺣﱴ 10ﻭﻳﺴﺘﺨﺪﻡ ﺇﺷﺎﺭﺓ ﺍﳉﺪﻭﻟﺔ ) (tabﻟﻄﺒﺎﻋﺔ ﺍﻟﻘﻴﻢ ﻛﻤﺎ ﻫﻮ ﻣﺒﲔ ﰲ ﺍﳉﺪﻭﻝ
ﺍﻟﺘﺎﱄ:
ﺃﻋﻂ ﺟﻮﺍﺑﹰﺎ ﳐﺘﺼﺮﹰﺍ ﻓﻴﻤﺎ ﻳﺘﻌﻠﻖ ﺑﺎﻷﺳﺌﻠﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺣﻮﻝ ﻣﺎﻫﻴﺔ ﺍﻷﻏﺮﺍﺽ: 38-1
ﳌﺎﺫﺍ ﺃﺧﺘﺎﺭ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺃﺳﻠﻮﺏ ﻣﻨﺎﻗﺸﺔ ﺍﻟﱪﳎﺔ ﺍﳌﻬﻴﻜﻠﺔ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻗﺒﻞ ﺍﳋﻮﺽ ﺃ(
ﻭﺑﺎﻟﺘﻔﺼﻴﻞ ﰲ ﻣﻌﺎﳉﺔ ﻣﻔﻬﻮﻡ ﺍﻟﱪﳎﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ؟
ﺏ( ﻣﺎﻫﻲ ﺍﳋﻄﻮﺍﺕ ﺍﻟﻨﻤﻮﺫﺟﻴﺔ )ﺍﳌﺬﻛﻮﺭﺓ ﰲ ﺍﻟﻜﺘﺎﺏ( ﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺍﳌﻮﺟﻬﺔ
ﺑﺎﻷﻏﺮﺍﺽ؟
ﺝ( ﻛﻴﻒ ﻳﻈﻬﺮ ﺃﻭ ﻳﺘﺠﻠﻰ ﻣﻔﻬﻮﻡ ﺍﻟﺘﻮﺭﻳﺚ ﺍﳌﺘﻌﺪﺩ ﻟﺪﻯ ﺍﻟﺒﺸﺮ؟
ﺩ( ﻣﺎ ﻫﻲ ﺃﻧﻮﺍﻉ ﺍﻟﺮﺳﺎﺋﻞ ﺍﻟﱵ ﻳﺘﺒﺎﺩﳍﺎ ﺍﻟﺒﺸﺮ ﻓﻴﻤﺎ ﺑﻴﻨﻬﻢ؟
ﻫـ( ﺗﺮﺳﻞ ﺍﻷﻏﺮﺍﺽ ﺭﺳﺎﺋﻞ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﻣﻦ ﺧﻼﻝ ﻭﺍﺟﻬﺎﺕ ﻣُﻌﺮﻓﺔ ﺟﻴﺪﹰﺍ .ﻣﺎﻫﻲ ﺍﻟﻮﺍﺟﻬﺎﺕ
ﺍﻟﱵ ﳝﺜﻠﻬﺎ ﺟﻬﺎﺯ ﺭﺍﺩﻳﻮ ﺍﻟﺴﻴﺎﺭﺓ )ﻛﻐﺮﺽ( ﳌﺴﺘﺨﺪﻣﻪ )ﺍﻟﺬﻱ ﻧﻔﺘﺮﺿﻪ ﻏﺮﺽ ﺁﺧﺮ(.
ﻣﻦ ﺍﶈﺘﻤﻞ ﺃﻧﻚ ﺗﺮﺗﺪﻱ ﻋﻠﻰ ﻣﻌﺼﻤﻚ ﺃﺣﺪ ﺃﻛﺜﺮ ﺍﻷﻏﺮﺍﺽ ﺷﻴﻮﻋﹰﺎ ﰲ ﺍﻟﻌﺎﱂ ﺃﻻ ﻭﻫﻮ 39-1
"ﺍﻟﺴﺎﻋﺔ" .ﻧﺎﻗﺶ ﻛﻴﻒ ﳝﻜﻦ ﺗﻄﺒﻴﻖ ﻛﻞ ﻣﻦ ﺍﻟﺘﻌﺎﺑﲑ ﻭﺍﳌﻔﺎﻫﻴﻢ ﺍﻟﺘﺎﻟﻴﺔ ﻋﻠﻰ ﻣﻔﻬﻮﻡ ﺍﻟﺴﺎﻋﺔ:
ﻼ ﻣﻊ ﺳﺎﻋﺔﻏﺮﺽ ،ﺍﳋﺼﺎﺋﺺ ﻭﺍﻟﺼﻔﺎﺕ ،ﺍﻟﺘﺼﺮﻓﺎﺕ ،ﺻﻒ ،ﺍﻟﺘﻮﺭﻳﺚ )ﻋﻠﻰ ﺃﻧﻨﺎ ﻧﺘﻌﺎﻣﻞ ﻣﺜ ﹰ
ﻣﺰﻭﺩﺓ ﲟﻨﺒﻪ( ،ﺍﻟﺘﺠﺮﻳﺪ ،ﺍﻟﻨﻤﺬﺟﺔ ،ﺍﻟﺮﺳﺎﺋﻞ ،ﺍﻟﺘﻀﻤﲔ ،encapsulationﺍﻟﻮﺍﺟﻬﺎﺕ ،ﺇﺧﻔﺎﺀ
٩٣ .1ﻣﻘﺪﻣﺔ ﺣﻮل اﻟﺤﻮاﺳﻴﺐ واﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ C++