ಲೇಖನಗಳು

SOLID ತತ್ವದ ಪ್ರಕಾರ ತೆರೆಯಿರಿ / ಮುಚ್ಚಲಾಗಿದೆ

ಸಾಫ್ಟ್‌ವೇರ್ ಘಟಕಗಳು (ತರಗತಿಗಳು, ಮಾಡ್ಯೂಲ್‌ಗಳು, ಕಾರ್ಯಗಳು, ಇತ್ಯಾದಿ) ವಿಸ್ತರಣೆಗೆ ಮುಕ್ತವಾಗಿರಬೇಕು, ಆದರೆ ಸಂಪಾದನೆಗಾಗಿ ಮುಚ್ಚಬೇಕು.

ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸುವುದು: ಮಾಡ್ಯೂಲ್‌ಗಳು, ತರಗತಿಗಳು ಮತ್ತು ಕಾರ್ಯಗಳು ಹೊಸ ಕ್ರಿಯಾತ್ಮಕತೆಯ ಅಗತ್ಯವಿರುವಾಗ, ನಾವು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕೋಡ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಬಾರದು ಆದರೆ ಹೊಸ ಕೋಡ್ ಅನ್ನು ಬರೆಯಿರಿ ಅದು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕೋಡ್‌ನಿಂದ ಬಳಸಲ್ಪಡುತ್ತದೆ. ಇದು ವಿಚಿತ್ರವಾಗಿ ಕಾಣಿಸಬಹುದು, ವಿಶೇಷವಾಗಿ ಜಾವಾ, ಸಿ, ಸಿ ++ ಅಥವಾ ಸಿ # ನಂತಹ ಭಾಷೆಗಳೊಂದಿಗೆ ಇದು ಮೂಲ ಕೋಡ್‌ಗೆ ಮಾತ್ರವಲ್ಲದೆ ಬೈನರಿಗೂ ಅನ್ವಯಿಸುತ್ತದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಬೈನರಿಗಳು, ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಅಥವಾ ಡಿಎಲ್‌ಎಲ್‌ಗಳ ಮರುಹಂಚಿಕೆ ಅಗತ್ಯವಿಲ್ಲದ ರೀತಿಯಲ್ಲಿ ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ರಚಿಸಲು ನಾವು ಬಯಸುತ್ತೇವೆ.
SOLID ಸನ್ನಿವೇಶದಲ್ಲಿ OCP

 

ಪೂರಕ ಎಸ್‌ಆರ್‌ಪಿ ಮತ್ತು ಒಸಿಪಿ

ಮಾಡ್ಯೂಲ್ ಬದಲಾಗಲು ಒಂದೇ ಒಂದು ಕಾರಣವಿರಬೇಕು ಎಂದು ಹೇಳುವ ಏಕ ಜವಾಬ್ದಾರಿಯ ಎಸ್‌ಆರ್‌ಪಿ ತತ್ವವನ್ನು ನಾವು ಈಗಾಗಲೇ ನೋಡಿದ್ದೇವೆ. ಒಸಿಪಿ ಮತ್ತು ಎಸ್‌ಆರ್‌ಪಿ ತತ್ವಗಳು ಪೂರಕವಾಗಿವೆ. ಎಸ್‌ಆರ್‌ಪಿ ತತ್ವವನ್ನು ಅನುಸರಿಸಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಕೋಡ್ ಒಸಿಪಿ ತತ್ವಗಳನ್ನು ಸಹ ಗೌರವಿಸುತ್ತದೆ. ನಾವು ಬದಲಾಯಿಸಲು ಒಂದೇ ಕಾರಣವನ್ನು ಹೊಂದಿರುವ ಕೋಡ್ ಅನ್ನು ಹೊಂದಿರುವಾಗ, ಹೊಸ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಪರಿಚಯಿಸುವುದರಿಂದ ಆ ಬದಲಾವಣೆಗೆ ದ್ವಿತೀಯಕ ಕಾರಣವನ್ನು ಸೃಷ್ಟಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ ಎಸ್‌ಆರ್‌ಪಿ ಮತ್ತು ಒಸಿಪಿ ಎರಡನ್ನೂ ಉಲ್ಲಂಘಿಸಲಾಗುವುದು. ಅಂತೆಯೇ, ನಮ್ಮಲ್ಲಿ ಕೋಡ್ ಇದ್ದರೆ ಅದು ಅದರ ಮುಖ್ಯ ಕಾರ್ಯವು ಬದಲಾದಾಗ ಮಾತ್ರ ಬದಲಾಗಬೇಕು ಮತ್ತು ಹೊಸ ಕಾರ್ಯವನ್ನು ಸೇರಿಸಿದಾಗ ಬದಲಾಗದೆ ಉಳಿಯಬೇಕು, ಹೀಗಾಗಿ ಒಸಿಪಿಯನ್ನು ಗೌರವಿಸಿದರೆ, ಅದು ಹೆಚ್ಚಾಗಿ ಎಸ್‌ಆರ್‌ಪಿಯನ್ನು ಗೌರವಿಸುತ್ತದೆ.
ಎಸ್‌ಆರ್‌ಪಿ ಯಾವಾಗಲೂ ಒಸಿಪಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ ಅಥವಾ ಪ್ರತಿಯಾಗಿ ಎಂದು ಇದರ ಅರ್ಥವಲ್ಲ, ಆದರೆ ಹೆಚ್ಚಿನ ಸಂದರ್ಭಗಳಲ್ಲಿ ಅವುಗಳಲ್ಲಿ ಒಂದನ್ನು ಅನುಸರಿಸಿದರೆ, ಎರಡನೆಯದನ್ನು ಸಾಧಿಸುವುದು ತುಂಬಾ ಸರಳವಾಗಿದೆ.

 

ಒಸಿಪಿ ತತ್ವದ ಉಲ್ಲಂಘನೆಯ ಉದಾಹರಣೆ

ಕೇವಲ ತಾಂತ್ರಿಕ ದೃಷ್ಟಿಕೋನದಿಂದ, ಮುಕ್ತ / ಮುಚ್ಚಿದ ತತ್ವವು ತುಂಬಾ ಸರಳವಾಗಿದೆ. ಕೆಳಗಿನ ವರ್ಗದಂತೆ ಎರಡು ವರ್ಗಗಳ ನಡುವಿನ ಸರಳ ಸಂಬಂಧವು ಒಸಿಪಿ ತತ್ವವನ್ನು ಉಲ್ಲಂಘಿಸುತ್ತದೆ.

ಬಳಕೆದಾರ ವರ್ಗವು ಲಾಜಿಕ್ ವರ್ಗವನ್ನು ನೇರವಾಗಿ ಬಳಸುತ್ತದೆ. ಪ್ರಸ್ತುತ ಮತ್ತು ಹೊಸದನ್ನು ಬಳಸಲು ನಮಗೆ ಅನುಮತಿಸುವ ರೀತಿಯಲ್ಲಿ ನಾವು ಎರಡನೇ ಲಾಜಿಕ್ ವರ್ಗವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾದರೆ, ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಲಾಜಿಕ್ ವರ್ಗವನ್ನು ಬದಲಾಯಿಸಬೇಕಾಗುತ್ತದೆ. ಬಳಕೆದಾರನು ತರ್ಕದ ಅನುಷ್ಠಾನಕ್ಕೆ ನೇರವಾಗಿ ಸಂಬಂಧ ಹೊಂದಿದ್ದಾನೆ, ಪ್ರಸ್ತುತದ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರದಂತೆ ಹೊಸ ತರ್ಕವನ್ನು ಒದಗಿಸಲು ನಮಗೆ ಯಾವುದೇ ಮಾರ್ಗವಿಲ್ಲ. ಮತ್ತು ನಾವು ಸ್ಥಿರವಾಗಿ ಟೈಪ್ ಮಾಡಿದ ಭಾಷೆಗಳ ಬಗ್ಗೆ ಮಾತನಾಡುವಾಗ, ಬಳಕೆದಾರ ವರ್ಗಕ್ಕೆ ಮಾರ್ಪಾಡುಗಳ ಅಗತ್ಯವಿರುತ್ತದೆ. ನಾವು ಸಂಕಲಿಸಿದ ಭಾಷೆಗಳ ಬಗ್ಗೆ ಮಾತನಾಡಿದರೆ, ಖಂಡಿತವಾಗಿಯೂ ಬಳಕೆದಾರ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಮತ್ತು ತರ್ಕ ಕಾರ್ಯಗತಗೊಳಿಸಬಹುದಾದ ಅಥವಾ ಡೈನಾಮಿಕ್ ಗ್ರಂಥಾಲಯಕ್ಕೆ ಮರುಸಂಗ್ರಹಣೆ ಮತ್ತು ವಿತರಣೆಯ ಅಗತ್ಯವಿರುತ್ತದೆ, ಸಾಧ್ಯವಾದಾಗ ತಪ್ಪಿಸಲು ಇದು ಯೋಗ್ಯವಾಗಿರುತ್ತದೆ.

ಹಿಂದಿನ ಯೋಜನೆಗೆ ಸಂಬಂಧಿಸಿದಂತೆ, ಮತ್ತೊಂದು ವರ್ಗವನ್ನು ನೇರವಾಗಿ ಬಳಸುವ ಯಾವುದೇ ವರ್ಗವು ಮುಕ್ತ / ಮುಚ್ಚಿದ ತತ್ವದ ಉಲ್ಲಂಘನೆಗೆ ಕಾರಣವಾಗಬಹುದು ಎಂದು ನಾವು can ಹಿಸಬಹುದು. 
ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ ಮೂಲಕ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದ ಫೈಲ್‌ನ "ಶೇಕಡಾವಾರು" ಪ್ರಗತಿಯನ್ನು ಒದಗಿಸಲು ನಾವು ಒಂದು ವರ್ಗವನ್ನು ಬರೆಯಲು ಬಯಸುತ್ತೇವೆ ಎಂದು ಭಾವಿಸೋಣ. ನಾವು ಎರಡು ಮುಖ್ಯ ತರಗತಿಗಳನ್ನು ಹೊಂದಿದ್ದೇವೆ, ಪ್ರೋಗ್ರೆಸ್ ಮತ್ತು ಫೈಲ್, ಮತ್ತು ನಾವು ಅವುಗಳನ್ನು ಈ ಕೆಳಗಿನಂತೆ ಬಳಸಲು ಬಯಸುತ್ತೇವೆ ಎಂದು ನಾನು ess ಹಿಸುತ್ತೇನೆ:

 

ಕಾರ್ಯ ಪರೀಕ್ಷೆಇಟ್‌ಕ್ಯಾನ್‌ಜೆಟ್‌ಪ್ರೋಗ್ರೆಸ್ ಆಫಾಫೈಲ್ಅಸಾಪೆರ್ಸೆಂಟ್ () {
     $ ಫೈಲ್ = ಹೊಸ ಫೈಲ್ ();
     $ ಫೈಲ್-> ಉದ್ದ = 200;
     $ ಫೈಲ್-> ಕಳುಹಿಸಲಾಗಿದೆ = 100;
     $ ಪ್ರಗತಿ = ಹೊಸ ಪ್ರಗತಿ ($ ಫೈಲ್);
     $ this-> assertEquals (50, $ progress-> getAsPercent ());
}

ಈ ಕೋಡ್‌ನಲ್ಲಿ ನಾವು ಪ್ರೋಗ್ರೆಸ್ ಬಳಕೆದಾರರು. ನಿಜವಾದ ಫೈಲ್ ಗಾತ್ರವನ್ನು ಲೆಕ್ಕಿಸದೆ ನಾವು ಶೇಕಡಾವಾರು ಮೌಲ್ಯವನ್ನು ಪಡೆಯಲು ಬಯಸುತ್ತೇವೆ. ನಾವು ಫೈಲ್ ಅನ್ನು ಮಾಹಿತಿಯ ಮೂಲವಾಗಿ ಬಳಸುತ್ತೇವೆ. ಫೈಲ್‌ನಲ್ಲಿ ಬೈಟ್‌ಗಳಲ್ಲಿ ಉದ್ದವಿದೆ ಮತ್ತು ಕಳುಹಿಸಿದ ಎಂಬ ಕ್ಷೇತ್ರವು ಡೌನ್‌ಲೋಡರ್‌ಗೆ ಕಳುಹಿಸಿದ ಡೇಟಾದ ಪ್ರಮಾಣವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಈ ಮೌಲ್ಯಗಳನ್ನು ಹೇಗೆ ನವೀಕರಿಸಲಾಗುತ್ತದೆ ಎಂಬುದು ನಮಗೆ ಹೆದರುವುದಿಲ್ಲ. ನಮಗೆ ಇದನ್ನು ಮಾಡುವ ಕೆಲವು ಮಾಂತ್ರಿಕ ತರ್ಕಗಳಿವೆ ಎಂದು ನಾವು can ಹಿಸಬಹುದು, ಆದ್ದರಿಂದ ಪರೀಕ್ಷೆಯಲ್ಲಿ ನಾವು ಅವುಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಹೊಂದಿಸಬಹುದು.

 

ವರ್ಗ ಫೈಲ್ {
     ಸಾರ್ವಜನಿಕ $ ಉದ್ದ;
     ಸಾರ್ವಜನಿಕ $ ಕಳುಹಿಸಲಾಗಿದೆ;
}

 

ಫೈಲ್ ವರ್ಗವು ಎರಡು ಕ್ಷೇತ್ರಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಸರಳ ಡೇಟಾ ವಸ್ತುವಾಗಿದೆ. ಖಂಡಿತವಾಗಿಯೂ ಇದು ಫೈಲ್ ಹೆಸರು, ಮಾರ್ಗ, ಸಾಪೇಕ್ಷ ಮಾರ್ಗ, ಪ್ರಸ್ತುತ ಡೈರೆಕ್ಟರಿ, ಪ್ರಕಾರ, ಅನುಮತಿಗಳು ಮತ್ತು ಮುಂತಾದ ಇತರ ಮಾಹಿತಿ ಮತ್ತು ನಡವಳಿಕೆಗಳನ್ನು ಸಹ ಒಳಗೊಂಡಿರಬೇಕು.

 

ವರ್ಗ ಪ್ರಗತಿ {

     ಖಾಸಗಿ $ ಫೈಲ್;

     ಕಾರ್ಯ __ ಕನ್ಸ್ಟ್ರಕ್ಟ್ (ಫೈಲ್ $ ಫೈಲ್) {
          $ ಈ-> ಫೈಲ್ = $ ಫೈಲ್;
     }

     getAsPercent () function
          return $ this-> file-> ಕಳುಹಿಸಿದ * 100 / $ this-> file-> length;
     }

}

ಪ್ರಗತಿ ಎನ್ನುವುದು ಅದರ ಕನ್‌ಸ್ಟ್ರಕ್ಟರ್‌ನಲ್ಲಿ ಫೈಲ್ ಅನ್ನು ಸ್ವೀಕರಿಸುವ ವರ್ಗವಾಗಿದೆ. ಸ್ಪಷ್ಟತೆಗಾಗಿ, ನಾವು ಕನ್ಸ್ಟ್ರಕ್ಟರ್ ನಿಯತಾಂಕಗಳಲ್ಲಿ ವೇರಿಯಬಲ್ ಪ್ರಕಾರವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ್ದೇವೆ. ಪ್ರೋಗ್ರೆಸ್, getAsPercent () ನಲ್ಲಿ ಒಂದೇ ಉಪಯುಕ್ತ ವಿಧಾನವಿದೆ, ಅದು ಫೈಲ್‌ನಿಂದ ಕಳುಹಿಸಿದ ಮೌಲ್ಯಗಳು ಮತ್ತು ಉದ್ದವನ್ನು ತೆಗೆದುಕೊಂಡು ಅವುಗಳನ್ನು ಶೇಕಡಾವಾರು ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ. ಸರಳ ಮತ್ತು ಅದು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

ಈ ಕೋಡ್ ಸರಿಯಾಗಿದೆ ಎಂದು ತೋರುತ್ತಿದೆ, ಆದಾಗ್ಯೂ ಇದು ಮುಕ್ತ / ಮುಚ್ಚಿದ ತತ್ವವನ್ನು ಉಲ್ಲಂಘಿಸುತ್ತದೆ.

ಆದರೆ ಯಾಕೆ?

ಮತ್ತೆ ಹೇಗೆ?

 

ಅವಶ್ಯಕತೆಗಳನ್ನು ಬದಲಾಯಿಸಲು ಪ್ರಯತ್ನಿಸೋಣ

ಕಾಲಾನಂತರದಲ್ಲಿ ವಿಕಸನಗೊಳ್ಳುವ ಪ್ರತಿಯೊಂದು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು ಬೇಕಾಗುತ್ತವೆ. ಫೈಲ್‌ಗಳನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡುವ ಬದಲು ಸಂಗೀತ ಸ್ಟ್ರೀಮಿಂಗ್ ಅನ್ನು ಅನುಮತಿಸುವುದು ನಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಹೊಸ ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ. ಫೈಲ್‌ನ ಉದ್ದವನ್ನು ಬೈಟ್‌ಗಳಲ್ಲಿ ನಿರೂಪಿಸಲಾಗಿದೆ, ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸಂಗೀತದ ಅವಧಿ. ನಮ್ಮ ಕೇಳುಗರಿಗೆ ನಾವು ಪ್ರಗತಿ ಪಟ್ಟಿಯನ್ನು ನೀಡಲು ಬಯಸುತ್ತೇವೆ, ಆದರೆ ಮೇಲೆ ಬರೆದ ವರ್ಗವನ್ನು ನಾವು ಮರುಬಳಕೆ ಮಾಡಬಹುದೇ?

ಇಲ್ಲ ನಾವು ಸಾಧ್ಯವಿಲ್ಲ. ನಮ್ಮ ಪ್ರಗತಿಯು ಫೈಲ್‌ಗೆ ಬದ್ಧವಾಗಿದೆ. ಇದು ಫೈಲ್ ಮಾಹಿತಿಯನ್ನು ಮಾತ್ರ ನಿರ್ವಹಿಸಬಹುದು, ಆದರೂ ಇದನ್ನು ಸಂಗೀತದ ವಿಷಯಕ್ಕೂ ಅನ್ವಯಿಸಬಹುದು. ಆದರೆ ನಾವು ಅದನ್ನು ಮಾರ್ಪಡಿಸಬೇಕಾದರೆ, ನಾವು ಸಂಗೀತ ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ಪ್ರಗತಿಯನ್ನು ತಿಳಿದುಕೊಳ್ಳಬೇಕು. ನಮ್ಮ ವಿನ್ಯಾಸವು ಒಸಿಪಿಗೆ ಅನುಗುಣವಾಗಿದ್ದರೆ, ನಾವು ಫೈಲ್ ಅಥವಾ ಪ್ರಗತಿಯನ್ನು ಸ್ಪರ್ಶಿಸುವ ಅಗತ್ಯವಿಲ್ಲ. ನಾವು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ರಗತಿಯನ್ನು ಮರುಬಳಕೆ ಮಾಡಬಹುದು ಮತ್ತು ಅದನ್ನು ಸಂಗೀತಕ್ಕೆ ಅನ್ವಯಿಸಬಹುದು.

 

ನಾವೀನ್ಯತೆ ಸುದ್ದಿಪತ್ರ
ನಾವೀನ್ಯತೆಯ ಪ್ರಮುಖ ಸುದ್ದಿಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳಬೇಡಿ. ಇಮೇಲ್ ಮೂಲಕ ಅವುಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಸೈನ್ ಅಪ್ ಮಾಡಿ.

ಸಂಭಾವ್ಯ ಪರಿಹಾರ

ಕ್ರಿಯಾತ್ಮಕವಾಗಿ ಟೈಪ್ ಮಾಡಿದ ಭಾಷೆಗಳು ರನ್ ಸಮಯದಲ್ಲಿ ಆಬ್ಜೆಕ್ಟ್ ಪ್ರಕಾರಗಳನ್ನು ನಿರ್ವಹಿಸುವ ಪ್ರಯೋಜನವನ್ನು ಹೊಂದಿವೆ. ಪ್ರೋಗ್ರೆಸ್ ಕನ್‌ಸ್ಟ್ರಕ್ಟರ್‌ನಿಂದ ಟೈಪ್‌ಹಿಂಟ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು ಇದು ನಮಗೆ ಅನುಮತಿಸುತ್ತದೆ ಮತ್ತು ಕೋಡ್ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ.

ವರ್ಗ ಪ್ರಗತಿ {

     ಖಾಸಗಿ $ ಫೈಲ್;

     ಕಾರ್ಯ __ ಕನ್ಸ್ಟ್ರಕ್ಟ್ ($ ಫೈಲ್) {
         $ ಈ-> ಫೈಲ್ = $ ಫೈಲ್;
     }

    getAsPercent () function
         return $ this-> file-> ಕಳುಹಿಸಿದ * 100 / $ this-> file-> length;
     }

}

ನಾವು ಈಗ ಪ್ರಗತಿಯಲ್ಲಿ ಏನು ಬೇಕಾದರೂ ಪ್ರಾರಂಭಿಸಬಹುದು. ಮತ್ತು ಯಾವುದರಿಂದಲೂ, ನಾನು ಅಕ್ಷರಶಃ ಏನು ಎಂದರ್ಥ:

ವರ್ಗ ಸಂಗೀತ {

ಸಾರ್ವಜನಿಕ $ ಉದ್ದ;
ಸಾರ್ವಜನಿಕ $ ಕಳುಹಿಸಲಾಗಿದೆ;

ಸಾರ್ವಜನಿಕ $ ಕಲಾವಿದ;
ಸಾರ್ವಜನಿಕ $ ಆಲ್ಬಮ್;
ಸಾರ್ವಜನಿಕ $ ಬಿಡುಗಡೆ ದಿನಾಂಕ;

getAlbumCoverFile () function
'ಚಿತ್ರಗಳು / ಕವರ್‌ಗಳು /' ಹಿಂತಿರುಗಿ. $ ಈ-> ಕಲಾವಿದ. '/'. $ ಇದು-> ಆಲ್ಬಮ್. '.png';
}
}

ಮತ್ತು ಮೇಲಿನಂತೆ ಸಂಗೀತ ವರ್ಗವು ಸಂಪೂರ್ಣವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. ಫೈಲ್‌ಗೆ ಹೋಲುವ ಪರೀಕ್ಷೆಯೊಂದಿಗೆ ನಾವು ಅದನ್ನು ಸುಲಭವಾಗಿ ಪರೀಕ್ಷಿಸಬಹುದು.
ಕಾರ್ಯ ಪರೀಕ್ಷೆಇಟ್‌ಕ್ಯಾನ್‌ಜೆಟ್‌ಪ್ರೋಗ್ರೆಸ್ಆಫಾಮುಸಿಕ್‌ಸ್ಟ್ರೀಮ್ಅಸಾಪೆರ್ಸೆಂಟ್ () {
$ ಸಂಗೀತ = ಹೊಸ ಸಂಗೀತ ();
$ ಸಂಗೀತ-> ಉದ್ದ = 200;
$ ಸಂಗೀತ-> ಕಳುಹಿಸಲಾಗಿದೆ = 100;

$ ಪ್ರಗತಿ = ಹೊಸ ಪ್ರಗತಿ ($ ಸಂಗೀತ);

$ this-> assertEquals (50, $ progress-> getAsPercent ());
}

ಆದ್ದರಿಂದ ಮೂಲತಃ ಯಾವುದೇ ಅಳೆಯಬಹುದಾದ ವಿಷಯವನ್ನು ಪ್ರೋಗ್ರೆಸ್ ವರ್ಗದೊಂದಿಗೆ ಬಳಸಬಹುದು. ವೇರಿಯಬಲ್ ಹೆಸರನ್ನು ಬದಲಾಯಿಸುವ ಮೂಲಕ ನಾವು ಅದನ್ನು ಕೋಡ್ನಲ್ಲಿ ವ್ಯಕ್ತಪಡಿಸಬೇಕು:

ವರ್ಗ ಪ್ರಗತಿ {

ಖಾಸಗಿ $ ಅಳತೆ ಮಾಡಬಹುದಾದ ವಿಷಯ;

ಕಾರ್ಯ __ ಕನ್ಸ್ಟ್ರಕ್ಟ್ ($ ಅಳತೆ ಮಾಡಬಹುದಾದ ವಿಷಯ) {
$ this-> ಅಳತೆ ಮಾಡಬಹುದಾದ ವಿಷಯ = $ ಅಳತೆ ಮಾಡಬಹುದಾದ ವಿಷಯ;
}

getAsPercent () function
ಹಿಂತಿರುಗಿ $ this-> ಅಳತೆ ಮಾಡಬಹುದಾದ ವಿಷಯ-> ಕಳುಹಿಸಲಾಗಿದೆ * 100 / $ this-> ಅಳತೆ ಮಾಡಬಹುದಾದ ವಿಷಯ-> ಉದ್ದ;
}

}

ನಾವು ಫೈಲ್ ಅನ್ನು ಟೈಪ್‌ಹಿಂಟ್ ಎಂದು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದಾಗ, ನಮ್ಮ ವರ್ಗವು ಏನು ನಿಭಾಯಿಸಬಲ್ಲದು ಎಂಬ ಬಗ್ಗೆ ನಾವು ಆಶಾವಾದಿಗಳಾಗಿದ್ದೇವೆ. ಇದು ಸ್ಪಷ್ಟವಾಗಿತ್ತು ಮತ್ತು ಇನ್ನೇನಾದರೂ ಬಂದರೆ, ಒಂದು ದೊಡ್ಡ ತಪ್ಪು ನಮಗೆ ಹೇಳುತ್ತದೆ.

Uನಾ ವರ್ಗವು ಬೇಸ್ ಕ್ಲಾಸ್‌ನ ವಿಧಾನವನ್ನು ಅತಿಕ್ರಮಿಸುತ್ತದೆ ಇದರಿಂದ ಬೇಸ್ ಕ್ಲಾಸ್ ಒಪ್ಪಂದವನ್ನು ಪಡೆದ ವರ್ಗದಿಂದ ಗೌರವಿಸಲಾಗುವುದಿಲ್ಲ. 

ನಮ್ಮ ಒಪ್ಪಂದಕ್ಕೆ ಅನುಗುಣವಾಗಿರದ ವಸ್ತುಗಳ ಮೇಲೆ ವಿಧಾನಗಳನ್ನು ಕರೆಯಲು ಅಥವಾ ಕ್ಷೇತ್ರಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ನಾವು ಪ್ರಯತ್ನಿಸುವುದನ್ನು ಕೊನೆಗೊಳಿಸಲು ಬಯಸುವುದಿಲ್ಲ. ನಾವು ಟೈಪ್‌ಹಿಂಟ್ ಹೊಂದಿರುವಾಗ, ಒಪ್ಪಂದವನ್ನು ಅದರಿಂದ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ. ಫೈಲ್ ವರ್ಗದ ಕ್ಷೇತ್ರಗಳು ಮತ್ತು ವಿಧಾನಗಳು. ಈಗ ನಮಗೆ ಏನೂ ಇಲ್ಲ, ನಾವು ಯಾವುದನ್ನಾದರೂ ಕಳುಹಿಸಬಹುದು, ಸ್ಟ್ರಿಂಗ್ ಸಹ ಮತ್ತು ಅದು ಕೆಟ್ಟ ದೋಷಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ.

ಅಂತಿಮ ಫಲಿತಾಂಶವು ಎರಡೂ ಸಂದರ್ಭಗಳಲ್ಲಿ ಒಂದೇ ಆಗಿರುತ್ತದೆ, ಅಂದರೆ ಕೋಡ್ ಮುರಿದುಹೋಗುತ್ತದೆ, ಮೊದಲನೆಯದು ಉತ್ತಮ ಸಂದೇಶವನ್ನು ಉತ್ಪಾದಿಸಿತು. ಆದಾಗ್ಯೂ, ಇದು ತುಂಬಾ ಕತ್ತಲೆಯಾಗಿದೆ. ವೇರಿಯೇಬಲ್ ಏನೆಂದು ತಿಳಿಯಲು ಯಾವುದೇ ಮಾರ್ಗವಿಲ್ಲ - ನಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ ಸ್ಟ್ರಿಂಗ್ - ಮತ್ತು ಯಾವ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಹುಡುಕಲಾಗಿದೆ ಮತ್ತು ಕಂಡುಬಂದಿಲ್ಲ. ಡೀಬಗ್ ಮಾಡುವುದು ಮತ್ತು ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುವುದು ಕಷ್ಟ. ಪ್ರೋಗ್ರಾಮರ್ ಪ್ರೋಗ್ರೆಸ್ ತರಗತಿಯನ್ನು ತೆರೆಯಬೇಕು, ಅದನ್ನು ಓದಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬೇಕು. ಒಪ್ಪಂದ, ಈ ಸಂದರ್ಭದಲ್ಲಿ, ನೀವು ಸ್ಪಷ್ಟವಾಗಿ ಟೈಪ್‌ಹಿಂಟ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸದಿದ್ದಾಗ defiಪ್ರಗತಿಯ ನಡವಳಿಕೆಯಿಂದ ನಿಶ್ಯಕ್ತವಾಗಿದೆ. ಇದು ಪ್ರಗತಿಗೆ ಮಾತ್ರ ತಿಳಿದಿರುವ ಸೂಚಿತ ಒಪ್ಪಂದವಾಗಿದೆ. ನಮ್ಮ ಉದಾಹರಣೆಯಲ್ಲಿ, ಅದು defigetAsPercent() ವಿಧಾನದಲ್ಲಿ ಕಳುಹಿಸಲಾದ ಮತ್ತು ಉದ್ದದ ಎರಡು ಕ್ಷೇತ್ರಗಳನ್ನು ಪ್ರವೇಶಿಸುವ ಮೂಲಕ ನಿಶ್ ಮಾಡಲಾಗಿದೆ. ನಿಜ ಜೀವನದಲ್ಲಿ ಸೂಚಿತವಾದ ಒಪ್ಪಂದವು ತುಂಬಾ ಸಂಕೀರ್ಣವಾಗಿರುತ್ತದೆ ಮತ್ತು ತರಗತಿಯಲ್ಲಿ ಕೆಲವು ಸೆಕೆಂಡುಗಳನ್ನು ಹುಡುಕುವ ಮೂಲಕ ಕಂಡುಹಿಡಿಯುವುದು ಕಷ್ಟಕರವಾಗಿರುತ್ತದೆ.

ಕೆಳಗಿನ ಯಾವುದೇ ಸುಳಿವುಗಳನ್ನು ಸುಲಭವಾಗಿ ಕಾರ್ಯಗತಗೊಳಿಸಲಾಗದಿದ್ದಲ್ಲಿ ಅಥವಾ ಪ್ರಯತ್ನವನ್ನು ಸಮರ್ಥಿಸದ ಗಂಭೀರ ವಾಸ್ತುಶಿಲ್ಪದ ಬದಲಾವಣೆಗಳನ್ನು ಉಂಟುಮಾಡಿದರೆ ಮಾತ್ರ ಈ ಪರಿಹಾರವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ.

Ercole Palmeri

ನಾವೀನ್ಯತೆ ಸುದ್ದಿಪತ್ರ
ನಾವೀನ್ಯತೆಯ ಪ್ರಮುಖ ಸುದ್ದಿಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳಬೇಡಿ. ಇಮೇಲ್ ಮೂಲಕ ಅವುಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಸೈನ್ ಅಪ್ ಮಾಡಿ.

ಇತ್ತೀಚಿನ ಲೇಖನಗಳು

ಆಗ್ಮೆಂಟೆಡ್ ರಿಯಾಲಿಟಿಯಲ್ಲಿ ನವೀನ ಹಸ್ತಕ್ಷೇಪ, ಕ್ಯಾಟಾನಿಯಾ ಪಾಲಿಕ್ಲಿನಿಕ್‌ನಲ್ಲಿ ಆಪಲ್ ವೀಕ್ಷಕರೊಂದಿಗೆ

ಆಪಲ್ ವಿಷನ್ ಪ್ರೊ ಕಮರ್ಷಿಯಲ್ ವೀಕ್ಷಕವನ್ನು ಬಳಸಿಕೊಂಡು ನೇತ್ರದ ಶಸ್ತ್ರಚಿಕಿತ್ಸೆಯನ್ನು ಕ್ಯಾಟಾನಿಯಾ ಪಾಲಿಕ್ಲಿನಿಕ್‌ನಲ್ಲಿ ನಡೆಸಲಾಯಿತು…

3 ಮೇ 2024

ಮಕ್ಕಳಿಗಾಗಿ ಬಣ್ಣ ಪುಟಗಳ ಪ್ರಯೋಜನಗಳು - ಎಲ್ಲಾ ವಯಸ್ಸಿನವರಿಗೆ ಮ್ಯಾಜಿಕ್ ಜಗತ್ತು

ಬಣ್ಣಗಳ ಮೂಲಕ ಉತ್ತಮವಾದ ಮೋಟಾರು ಕೌಶಲ್ಯಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ಬರವಣಿಗೆಯಂತಹ ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಕೌಶಲ್ಯಗಳಿಗೆ ಮಕ್ಕಳನ್ನು ಸಿದ್ಧಪಡಿಸುತ್ತದೆ. ಬಣ್ಣ ಹಾಕಲು...

2 ಮೇ 2024

ಭವಿಷ್ಯ ಇಲ್ಲಿದೆ: ಶಿಪ್ಪಿಂಗ್ ಉದ್ಯಮವು ಜಾಗತಿಕ ಆರ್ಥಿಕತೆಯನ್ನು ಹೇಗೆ ಕ್ರಾಂತಿಗೊಳಿಸುತ್ತಿದೆ

ನೌಕಾ ವಲಯವು ನಿಜವಾದ ಜಾಗತಿಕ ಆರ್ಥಿಕ ಶಕ್ತಿಯಾಗಿದೆ, ಇದು 150 ಶತಕೋಟಿ ಮಾರುಕಟ್ಟೆಯತ್ತ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಿದೆ...

1 ಮೇ 2024

ಆರ್ಟಿಫಿಶಿಯಲ್ ಇಂಟೆಲಿಜೆನ್ಸ್ ಮೂಲಕ ಸಂಸ್ಕರಿಸಿದ ಮಾಹಿತಿಯ ಹರಿವನ್ನು ನಿಯಂತ್ರಿಸಲು ಪ್ರಕಾಶಕರು ಮತ್ತು OpenAI ಒಪ್ಪಂದಗಳಿಗೆ ಸಹಿ ಹಾಕುತ್ತಾರೆ

ಕಳೆದ ಸೋಮವಾರ, ಫೈನಾನ್ಶಿಯಲ್ ಟೈಮ್ಸ್ ಓಪನ್ ಎಐ ಜೊತೆ ಒಪ್ಪಂದವನ್ನು ಪ್ರಕಟಿಸಿತು. FT ತನ್ನ ವಿಶ್ವ ದರ್ಜೆಯ ಪತ್ರಿಕೋದ್ಯಮಕ್ಕೆ ಪರವಾನಗಿ ನೀಡುತ್ತದೆ…

30 ಏಪ್ರಿಲ್ 2024

ನಿಮ್ಮ ಭಾಷೆಯಲ್ಲಿ ಹೊಸತನವನ್ನು ಓದಿ

ನಾವೀನ್ಯತೆ ಸುದ್ದಿಪತ್ರ
ನಾವೀನ್ಯತೆಯ ಪ್ರಮುಖ ಸುದ್ದಿಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳಬೇಡಿ. ಇಮೇಲ್ ಮೂಲಕ ಅವುಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಸೈನ್ ಅಪ್ ಮಾಡಿ.

ನಮ್ಮನ್ನು ಅನುಸರಿಸಿ

ಟ್ಯಾಗ್