Пример A-22. Объектно ориентированная база данных

Пример A-22. Объектно ориентированная база данных

  1. #!/bin/bash
  2. # obj-oriented.sh: Объектно ориентрованный подход к программированию в сценариях.
  3. # Автор: Stephane Chazelas.
  4. person.new()        # Очень похоже на объявление класса в C++.
  5. {
  6.   local obj_name=$1 name=$2 firstname=$3 birthdate=$4
  7.   eval "$obj_name.set_name() {
  8.          eval \"$obj_name.get_name() {
  9.                   echo \$1
  10.                 }\"
  11.        }"
  12.   eval "$obj_name.set_firstname() {
  13.          eval \"$obj_name.get_firstname() {
  14.                   echo \$1
  15.                 }\"
  16.        }"
  17.   eval "$obj_name.set_birthdate() {
  18.          eval \"$obj_name.get_birthdate() {
  19.            echo \$1
  20.          }\"
  21.          eval \"$obj_name.show_birthdate() {
  22.            echo \$(date -d \"1/1/1970 0:0:\$1 GMT\")
  23.          }\"
  24.          eval \"$obj_name.get_age() {
  25.            echo \$(( (\$(date +%s) - \$1) / 3600 / 24 / 365 ))
  26.          }\"
  27.        }"
  28.   $obj_name.set_name $name
  29.   $obj_name.set_firstname $firstname
  30.   $obj_name.set_birthdate $birthdate
  31. }
  32. echo
  33. person.new self Bozeman Bozo 101272413
  34. # Создается экземпляр класса "person.new" (фактически — вызов функции с аргументами).
  35. self.get_firstname       #   Bozo
  36. self.get_name            #   Bozeman
  37. self.get_age             #   28
  38. self.get_birthdate       #   101272413
  39. self.show_birthdate      #   Sat Mar 17 20:13:33 MST 1973
  40. echo
  41. # typeset -f
  42. # чтобы просмотреть перечень созданных функций.
  43. exit 0