В чём смысл классов(class)?

Тема в разделе "WASM.HEAP", создана пользователем twgt, 20 сен 2007.

  1. h3uristic

    h3uristic New Member

    Публикаций:
    0
    Регистрация:
    18 май 2007
    Сообщения:
    82
    Буч и вся остальная шайка отморозков перевернулись... эм... где бы они не находились... ;)
     
  2. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    twgt:
    Вчитайся в следующий код.
    Обрати внимание на Private и Protected методы
    Код (Text):
    1. /*
    2.  * SystemConnector.java
    3.  *
    4.  * Класс SystemConnector создан 25 Сентябрь 2007 г., 14:48
    5.  *
    6.  * ------------------ ОПИСАНИЕ МОДУЛЯ ------------------
    7.  * SystemConnector
    8.  *
    9.  * Это такая штука, которая позволяет юзать внешние проги для расширенного взаимодействия с системой
    10.  * Ну, типа, прог на асме, паскале, PHP....
    11.  * Можно, к примеру, с MySQL базой побазарить внатуре.
    12.  *
    13.  */
    14.  
    15. package ehost;
    16.  
    17.  
    18. import java.io.IOException;
    19. import java.nio.ByteBuffer;
    20. import java.nio.MappedByteBuffer;
    21. import java.nio.channels.*;
    22. import java.nio.channels.FileChannel.MapMode;
    23. import java.io.*;
    24. import java.util.*;
    25.  
    26.  
    27. /**
    28.  *
    29.  * @author root
    30.  * Чисто конкретно будем тут юзать каналы ввода-вывода с трубами (PIPES).
    31.  */
    32. public class SystemConnector {
    33.     public static final int EXTERNAL_PROG_TYPE = 1;
    34.     public static final int PHP_SCRIPT_TYPE = 2;
    35.     /** Creates a new instance of SystemConnector */
    36.    
    37.   private Object ExtendedAbstractEXpressor;
    38.   private Object ExtendedBaseEXpressor;
    39.   private int    ExtendedCounterEXpressor;
    40.   private int    ExtendedDisposerEXpressor;
    41.  
    42.   private int    ExtendedStackIndex;
    43.   private int    ExtendedDurationIndex;
    44.  
    45.   private int    ExtendedStackPointer;
    46.   private int    ExtendedBasePointer;
    47.    
    48.   private Stack  STACK;
    49.   private boolean ErrorFlag;
    50.    
    51.    
    52.    
    53.     private int CurrentType;
    54.    
    55.     public SystemConnector( int type) {
    56.        
    57.        CurrentType=type;
    58.        // Выставляем нули.
    59.        ExtendedAbstractEXpressor = new Object();
    60.        ExtendedBaseEXpressor     = new Object();
    61.            
    62.        STACK                     = new Stack ();
    63.        
    64.        //************************************************
    65.        
    66.        
    67.        STACK.push("Hello, World!");
    68.        
    69.        console_write();
    70.        
    71.        if (ErrorFlag){
    72.        
    73.            ExtendedDisposerEXpressor = 1;
    74.       exit_system();
    75.        };;
    76.        ExtendedDisposerEXpressor = 0;
    77.        get_free_mem();
    78.        STACK.push(ExtendedAbstractEXpressor);
    79.        console_write();
    80.        stop_now();
    81.        
    82.     }
    83.    
    84.      public void connectTo(String what){
    85.          
    86.          STACK.push(what);
    87.          ExtendedAbstractEXpressor = 0;
    88.          ExtendedBaseEXpressor     = 0;
    89.          
    90.      }
    91.      
    92.      public void callProc(String proc){
    93.          
    94.      }
    95.    
    96.  private void console_write(){
    97.      try{
    98.      System.out.println(STACK.pop());
    99.      ErrorFlag = false;
    100.      }catch (Exception e){
    101.      ErrorFlag = true;
    102.      }
    103.  }
    104.  
    105.  private void stop_now(){
    106.      finalize();
    107.  }
    108.  
    109.  protected void finalize(){
    110.      STACK.clear();
    111.      STACK.push ("(HALT)");
    112.      console_write();  
    113.  }
    114.  
    115.  private void exit_system(){
    116.      
    117.      System.exit(ExtendedDisposerEXpressor);
    118.  }
    119.  
    120.  private void get_free_mem(){
    121.      
    122.     ExtendedAbstractEXpressor = Runtime.getRuntime().freeMemory();
    123.  }
    124.  
    125.  private void get_full_mem(){
    126.      
    127.      ExtendedAbstractEXpressor = Runtime.getRuntime().maxMemory();
    128.  }
    129.  
    130.  public static void main(String[] args){
    131.      
    132.      new SystemConnector (SystemConnector.EXTERNAL_PROG_TYPE);
    133.      
    134.  }
    135.  
    136. }
     
  3. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    device
    Вчитался. Только не совсем понял что нового должен был увидеть.
    Если имелось ввиду что private может вызываться только внутри класса, а public вне его, то это мне известно.
    Это:
    было только предположение ;)
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Это просто упрощает проектирование,совместную разработку,
    поддержку и т.д.
     
  5. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    по мне так это удобно очень когда приходится писать какие-то библиотеки совсем абстрагированные от конкретной задачи, так вот чтобы их отделить от целефого приложения как можно сильнее и нужно ООП.
     
  6. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Я конечно не учил Java, но зато я хорошо знаю C# (мутагенез Java/C++ если не ошибаюсь :).
    Они во многом похожи (в смысле язык C# и Java). Сейчас попробую обьяснить что к чему:
    Само название Объектно-Ориентированное Программирование, говорит о том, что при программировании
    под ООП, будешь работать с объектами. Объектом является переменная чей тип соответствует какому-то
    классу (сам класс не является объектом, это шаблон). Как правило класс может унаследовать другой
    класс (все методы, переменные, свойства). Существует множественное наследование (к примеру в C++).
    В технологии .NET можно унаследовать только один класс, множественное наследование реализовано только
    для интерфейсов (вспоминаем COM-технологию, .NET это логическое продолжение данной технологии). Методы
    класса - и есть простые процедуры, свойства - тоже процедуры.

    Сам класс, можно считать структурой объекта. Основные действия с объектом - создание, вызов методов,
    чтение и запись свойств, уничтожение (ничего не напоминает?).

    ООП - отображает логику человека (сначала мы что-то создадим, потом попользуемся этим предметом, потом
    отдадим в утиль, или сами уничтожим), мы работаем с объектами, как и в жизни.

    К примеру:
    Код (Text):
    1. enum MemoryCardModel : int
    2. {
    3.     None, MC4DF, MC4SD, MC8SD
    4. }
    5.  
    6. enum MemoryCardColor : int
    7. {
    8.     None, Black, White, Silver, Gray, Green
    9. }
    10.  
    11. class MemoryCard
    12. {
    13.  
    14.     public MemoryCard()     // Конструктор класса
    15.     {
    16.         // Конструктор вызывается при создании объекта, позволяя
    17.         // инициализировать объект.
    18.         MCDevice.OutStateCard   // Вызов статического метода класса MCDevice.
    19.             (ref size, ref model, ref color, ref speed);
    20.     }
    21.  
    22.     ~MemoryCard()           // Деструктор класса
    23.     {
    24.         // Деструктор вызывается при уничтожении объекта, позволяя
    25.         // освободить все занятые объектом ресурсы.
    26.         size = 0;
    27.         model = MemoryCardModel.None;
    28.         color = MemoryCardColor.None;
    29.         speed = 0;
    30.     }
    31.    
    32.     private int size;       // Размер памяти
    33.     private MemoryCardModel model;  // Модель карты
    34.     private MemoryCardColor color;  // Цвет карты
    35.     private int speed;      // Скорость чтения/записи
    36.  
    37.     public int Size         // Свойство - размер памяти, доступен только для чтения
    38.     {
    39.         get { return size; }
    40.     }
    41.  
    42.     public MemoryCardModel Model    // Свойство - модель карты, доступен только для чтения
    43.     {
    44.         get { return model; }
    45.     }
    46.  
    47.     public MemoryCardColor Color    // Свойство - цвет карты карты, доступен только для чтения
    48.     {
    49.         get { return color}
    50.     }
    51.  
    52.     public int Speed        // Свойство - скорость R/W, доступен только для чтения
    53.     {
    54.         get { return speed; }
    55.     }
    56. }
    57.  
    58. // А вот аналог регистра eax
    59.  
    60. [StructLayout(LayoutKind.Explicit)]
    61. class EAX
    62. {
    63.     [FieldOffset(0)]
    64.     private uint _eax;
    65.     [FieldOffset(0)]
    66.     private ushort _ax;
    67.     [FieldOffset(1)]
    68.     private byte _ah;
    69.     [FieldOffset(0)]
    70.     private byte _al;
    71.  
    72.     public uint Value
    73.     {
    74.         get { return _eax; }
    75.         set { _eax = value; }
    76.     }
    77.  
    78.     public ushort AX
    79.     {
    80.         get { return _ax; }
    81.         set { _ax = value; }
    82.     }
    83.  
    84.     public byte AH
    85.     {
    86.         get { return _ah; }
    87.         set { _ah = value; }
    88.     }
    89.  
    90.     public byte AL
    91.     {
    92.         get { return _al; }
    93.         set { _al = value; }
    94.     }
    95. }
    96.  
    97. // Если у кого есть .NET, можете проверить
    98.  
    99. static void Main(string[] args)
    100. {
    101.     EAX eax = new EAX();
    102.     eax.Value = 0xAABBCCDD;
    103.     Console.WriteLine("eax = {0}\r\nax = {1}\r\nah = {2}\r\nal = {3}",
    104.         eax.Value.ToString("X"),
    105.         eax.AX.ToString("X"),
    106.         eax.AH.ToString("X"),
    107.         eax.AL.ToString("X"));
    108.     Console.ReadLine();
    109. }
    В заключении могу сказать, что помимо методов, свойств, переменных у класса есть операторы
    (new и delete, =, ==, +, -, /, *, etc...) которые могут быть перегружены. Также класс
    может содержать статические методы, переменные, свойства (что-то типа глобальных), но они не
    относятся к объекту. В принципе можно сделать из класса статический объект.
     
  7. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    На дату создания надо смотреть, ребятки :)
    Я уже понял в чём их смысл и, по секрету, вопрос мой был касательно PHP.(Хотя понял, когда пролистывал книгу Страуструпа - Дизайн и эволюция языка С++)
     
  8. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Майкрософт, казел, нарушает принципы оформления кода.
    В ООП Ссвойство пишут с большой буквы, а метод - с маленькой. То есть не ToString(), a toString();;
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    t00x

    Извините, но бугага)) Смысл классов далеко не в этом))


    device

    Извините, но бугага-2)) Это с чего вдруг у нас появился Главный Стиль? Ты стилистику stl или boost видел? Тоже казлы?
     
  10. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _DEN_
    тогда назовите ещё какую-нибудь абстракцию в программировании, поддерживающую механизм наследования :)
    не говоря о том, что конечно же, смысл классов как таковых не содержится в слове "наследование".
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    t00x

    При чем тут вообще наследование?
     
  12. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _DEN_
    наследование непосредственно относится к объектно-ориентированному программированию, а в частности к классам.
     
  13. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    t00x

    Ну да, наследование - один из, так скажем, механизмов, существующих в ООП. Хороший или плохой - вопрос сейчас не в этом. Вопрос в том, точнее утверждение в том, что это далеко не главный механизм, как сказал ты.
     
  14. vito

    vito New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2004
    Сообщения:
    177
    Весь смысл ООП, как и причина его создания, попытка реализовать систему управления большими проектами.
    Наследование, как частный случай, мечта использовать старый код в новых пректах. Этакая бесконечная пирамида, что в теории должно экомонить массу времени и денег на разработку.
    //-------
    И это все. А рекламные ролики, про детей и родителей, про сущность объекта и других магических слов, оставим разбирать философам.
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    vito

    Наследование это скорее это возможность тянуть старое дерьмо в новый хлев)))
     
  16. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    _DEN_
    если под выражением "главный механизм" имелось в виду "смысл классов", то не надо путаться самому и путать других, потому как в #30 написано:
    а в #4 так вообще не присутствует синонимов слова "главный".

    P.S.
    наследование - это один из механизмов, направленных на поддержание выживания вида.
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Ну это не скажи, иногда оно архитектурно очень даже оправдано. Например базовый класс предоставляющий базовую функциональность, а потомки только децел её изменяют, добавляют. Опять таки базовый класс с виртульными методами каллбэками. Базовый вызывает эти каллбэки, а потомок получает из них данные. Так например многие парсеры делаются, по-мойму красота. Так что это не просто реиспользование старого кода, а и способ сделать архитектуру гибче.
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Ага, и в итоге имеем сквозные зависимости по дереву, что намертво связывает систему, и любое тыканье пальцем в нее преващается в долгий и нудный рефакторинг. Наследование как парадигма - программирование 1980-х годов.
     
  19. vito

    vito New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2004
    Сообщения:
    177
    Booster
    Были времена, когда проект состоял из одного файла и над ним работал один программист. Там не было функций и процедур, а были подпрограммы.
    Когда ПО усложнилось появился процедурный подход. Подпрограммы стали функциями, появилось много файлов и над проектом сиогли работать несколько прогр.
    Но ПО вск усложнялось. И управлять проектом, в котором немеренная туча файлов стало сложно. Появилось необходимость объеденить, со схожим функ. Так появился класс.
    Если раньше мы раньше мы просто вызывали функцию, то появилась необходимость в другом механизме вызова. Так появилось наследование. И т.д.
    //------
    Скажи, когда ты включаешь заголовочный файл какой нибудь либы, написанной на чистом С, есть ли кардинальные различия с ООП? Создавая новую функцию, в которой ты используешь что -то из либы, разве ты не переопределяешь методы? И не создаешь новую, используя (наследуя) свойства прежних?
    //------
    Красота редкое явление в ООП, потому как красивое проектирование классов чертовски сложная задача.
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    vito
    Сейчас мы придём к тому что OOП нах не нужно -). Я не спорю что всё что можно сделать с ООП, можно сделать и без него, и при этом архитектуру выдержать нормальную. Но сдаётся мне, что архитектура эта всё же будет смахивать на ООП. ООП в компиляторах это просто развитие и поддержка идей ООП на уровне этого самого компилятора, чего можно добится и без этой поддержки. А сделать какашку можно где угодно и чем угодно. Но лично для себя я выбрал ООП, правда на грабли огромного кол-ва классов, наследований и т.д уже приходилось наступать. Так что проектирование конечно чертовки важная вешь. -).