julia_v_iluhina

Untitled

Jan 13th, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.82 KB | None | 0 0
  1.     public static void setDriver(RemoteWebDriver setDriver){
  2.         driver = setDriver;
  3.     }
  4. ...
  5.      @BeforeClass
  6.     public static void setUp() {
  7.         setDriver(new FirefoxDriver());
  8.     }
  9. /*
  10.  
  11.     лучше - вот так
  12.  
  13.      private static WebDriver driver;
  14.  
  15.      public static void setDriver(WebDriver driver){
  16.           ConciseAPI.driver = driver;
  17.      }
  18.  
  19.      т к оперируешь полем класса - к нему можно доступиться так - <имя класса>.<имя поля>
  20.      оперировал бы полем объекта - тогда this.<имя поля>
  21. ************
  22.     зажав сtrl  - кликни на FirefoxDriver
  23.     и также - на RemoteWebDriver
  24.  
  25.     public class FirefoxDriver extends RemoteWebDriver implements Killable
  26.     ...
  27.     public class RemoteWebDriver implements WebDriver, JavascriptExecutor,
  28.         FindsById, FindsByClassName, FindsByLinkText, FindsByName,
  29.         FindsByCssSelector, FindsByTagName, FindsByXPath,
  30.         HasInputDevices, HasCapabilities, TakesScreenshot
  31.  
  32.  
  33.     а  WebDrive - это уже интерфейс
  34.  
  35.      уточняться в типе параметра ни до FirefoxDriver, ни до его предка RemoteWebDriver - не нужно
  36.      все вебдрайверы приводятся к WebDriver
  37.  
  38.             этим и стоит воспользоваться
  39.             лишь на уровне создания вебдрайвера мы уточняемся - какой вебдрайвер мы создаем
  40.             но - записываем это значение - в поле типа WebDriver driver
  41.  
  42.             WebDriver - это интерфейс
  43.             RemoteWebDriver (а значит и его потомок FirefoxDriver) - это класс имплементирующий такой интерфейс
  44.  
  45.             это довольно стандартный прием
  46.             объявляем интерфейс и методы в нем
  47.             затем - реализуем классы, имплементирующие такой интерфейс
  48.             и - когда объявляем переменные, параметры методов или типы возвращаемого значения - оперируем типом интерфейса
  49.             но - работаем в реальности с объектами классов, имплементирующих такой интерфейс
  50.  
  51.             немного забегая вперед
  52.             вот это почитай
  53.             довольно неплохо изложено
  54.             полезные линки по интерфейсам
  55.                  http://kostin.ws/java/java-abstract-and-interfaces.html
  56.  
  57.                  http://developer.alexanderklimov.ru/android/java/interface.php
  58.  
  59.                  https://docs.oracle.com/javase/tutorial/java/concepts/interface.html
  60.  
  61.  
  62.             Статья про нейминг - интерфейсы + классы
  63.             http://www.vertigrated.com/blog/2011/02/interface-and-class-naming-anti-patterns-java-naming-convention-tautologies/
  64.             Вот это тоже важно
  65.             http://stackoverflow.com/questions/1932247/abstract-classes-and-interfaces-best-practices-in-java
  66.             http://joxi.ru/E2pdR1lFB1pyM2
  67.  
  68.             Сейчас - разбери это в общих чертах
  69.             потом - когда будем это использовать на практике - окончательно разберешься
  70. */
  71. /*
  72.     сразу приведу текст Якова - про принципы ООП вообще и абстракцию в ООП в частности
  73.     был как-то диалог про собеседования и про вопросы про принципы ООП )
  74.     в ключе текущего вопроса - тоже полезное чтение)
  75.  
  76.     http://joxi.ru/YmE86l3I00oeMr
  77.     https://en.wikipedia.org/wiki/Abstraction_(software_engineering)#Abstraction_in_object_oriented_programming
  78.  
  79.     Про те що принципів явно більше ніж 3:
  80.     http://joxi.ru/D2P4XNdfppolv2
  81.     https://en.wikipedia.org/wiki/Object-oriented_programming
  82.  
  83.     Про те що значить насправді ООП на думку того хто його взагалі придумав (Алана Кея):
  84.     http://joxi.ru/E2pVN7ps996wvr
  85.     http://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented
  86.  
  87.     Цитата:
  88.     OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme LateBinding of all things.
  89.     Перекладаю:
  90.     ООП
  91.     =
  92.     1 надсилання повідомлень між обьектами (чого в джаві і близько немає доречі)
  93.     2 інкапсуляція
  94.     3 динамізм (тобто не статична як в джаві а динамічна типізація, як в пітоні наприклад чи рубі...)
  95.     А ще є чуваки типу Єгора, які от таке про ООП пишуть: http://www.yegor256.com/2014/11/20/seven-virtues-of-good-object.html
  96.     От тобі і список принципів )
  97.  
  98.     Наслідування реалізації - це загалом ЗЛО, і вже його включати в принципи ООП - це гріх доречі :) і збочення :)
  99.     Більшість шарящих прогерів плюються від цього :)
  100.  
  101.     Десь на відео, вже не пам'ятаю де, я мав казати що під абстракцією можна розуміти багато що...
  102.     Що базово - це просто винесення певних асбтрактних шарів... створення методу довкола шматка коду - це вже абстракція...
  103.     Але в ООП ще під цим мається на увазі саме створення Абстрактних класів і інтерфейсів...
  104.     Які дозволяють робити "наслідування інтерфейсів" (а не реалізації) і завдяки поліморфізму
  105.     (якщо бути точним сабтайпінг-поліморфізму) досягати більш гнучкої і "загальної-асбтрактної" поведінки у об'єктів..
  106.     І це і просто "створеня" методів довкола коду - це абстракція, але ця от "ооп-ешна" абстракція - якби "абстракція наступного рівня",
  107.     яка дає в ООП ще більше можливостей... (не тільки в ООП доречі це є... )...
  108.     При цьому ніби і без неї можна жити... Тобто є механізми як і без цеї фічі ніби прожити... Але в таких мовах як джава - без цього ніяк...
  109.  
  110.     Це буквально є окремою фішкою ООП (ну ооп-джава-стайл).
  111.     Якби серед трьох принципі: інкапсуляція, наслідування, поліморфізм - під наслідуванням розумілось наслідуваня ІТЕРФЕЙСУ
  112.     а не реалізації (тобто по суті і є ця абстракція про яку я кажу) - то тоді б "домовляти четвертий принцип сенсу було б не багато",
  113.     але там розуміється саме "реалізації", тому я завжди роблю наголос ще на тому що є і "четверта абстракція"... бо без неї був би "неповний опис"...
  114.  
  115.     Можна було б сказати що "поліморфізм" теж включає у себе цю абстракцію...
  116.     тому що поліморфізм теж реалізовується в джаві через наслідування...
  117.     але знову ж  - і наслідування реалізації і інтерфейсів... тому трохи розпливчато виходить, не точно...
  118.     а коли про абстракцію цю згадуєш в тому сенсі що я писав вище - то все роставляється на свої місця :)
  119.  
  120.     А взагалі то - от той список що на вікіпедії з семи пунктів - самий адекватний ;)
  121.     Але знову ж таки, в ООП все дуже складно...цей термін вже так "походив по рукам",
  122.     і такі мови як джава - так його спаплюжили (після оригінальних ідей Алана Кея) -
  123.     що якщо хтось там починає плюватись від четвертого принципу - то це свідчить про те що він явно не шарить історії і не розуміє всієї глибини :)
  124.  
  125.     Мораль - не треба тут заморачуватись сильно, і якщо хтось на співбесіді буде до цього придиратись - то він задрот - і нафіг його.
  126.     Головне це знання і розуміння фішок... Пофіг скільки ти назвеш принципів і під якими номерами...
  127.     головне розуміти як створюються об'екти (інкапсуляція), і як робити їх поведінку "універсальною"
  128.     (абстракція - тобто наслідування від абстрактних класів і інтерфейсів, яка працює через підтримку поліморфізму)
  129.     От і все, що достатньо на співбесіді розказати, і бажано привести приклади на всі ці штуки.
  130.  
  131. */
  132. ***********************
  133. public class GmailPage extends ConciseAPI{
  134. /*
  135.     не надо тебе наследования
  136.     можно работать со статическими методами ConciseAPI и с пейджа
  137.  
  138.     более того - пейдж можно опять реализовать как пейдж-модуль
  139.     ну то если захочешь
  140. */
  141. ***********************
  142. /*
  143.     в этой работе - учти ревью к прошлой работе
  144.     часть ошибок переехала и сюда)
  145.    
  146.     не повторяюсь
  147. */
Advertisement
Add Comment
Please, Sign In to add comment