» » » » Михаил Шохирев - Язык программирования Perl

Михаил Шохирев - Язык программирования Perl

На нашем литературном портале можно бесплатно читать книгу Михаил Шохирев - Язык программирования Perl, Михаил Шохирев . Жанр: Прочая околокомпьтерная литература. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Михаил Шохирев - Язык программирования Perl
Название: Язык программирования Perl
ISBN: -
Год: -
Дата добавления: 3 июль 2019
Количество просмотров: 352
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

Язык программирования Perl читать книгу онлайн

Язык программирования Perl - читать бесплатно онлайн , автор Михаил Шохирев
Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.Расчитанный на полугодовое изучение, курс является достаточно подробным введением в язык программирования Perl. Описывается уникальная культура Perl и особенности, отличающие его от других языков программирования и во многом обусловившие его популярность. Рассматриваются основные средства программирования на языке Perl версии 5.8. Разбираются богатые возможности языка для создания самых разных приложений, а также особый стиль программирования на Perl. Курс ориентирован на студентов, начинающих программистов или разработчиков, применяющих другие языки и желающих писать прикладные или системные программы на Perl.
1 ... 40 41 42 43 44 ... 55 ВПЕРЕД
Перейти на страницу:

Из примера видно, что имя класса может быть составным, отражая иерархию классов. Поскольку классы - это пакеты, хранящиеся в файле-модуле, то все, что говорилось в предыдущей лекции об именовании модулей, относится и к классам.

Обратите также внимание на то, что конструктор класса Private::Person определен так, что он может вызываться с использованием либо имени класса, либо ссылки на существующий объект. Это проверяется в следующей строке:


my $class = ref($invocant) || $invocant;


Если первым аргументом передана ссылка на объект, то определяется имя его класса, иначе считается, что передано имя класса. Поэтому в программе можно создавать однотипные объекты, обращаясь к методу new() существующего объекта. Например, так:


my $hobbit = Private::Person->new; # вызов с именем класса $hobbit->name("Bilbo Baggins"); my $frodo = $hobbit->new; # вызов со ссылкой на объект $frodo->name("Frodo Baggins");


В классе могут быть определены методы, не предназначенные для работы с конкретными объектами. Такие методы называются методами класса или статическими методами. Для обращения к ним, так же как для обращения к конструктору, используется имя класса, а не ссылка на объект. Часто эти методы обслуживают данные, общие для всех объектов класса (то есть объявленные глобально на уровне класса). Подобные данные называются атрибутами класса. В качестве примера опишем класс Magic::Ring, где метод класса count() будет использоваться для доступа к значению атрибута класса $Magic::Ring::count, в котором будет храниться количество созданных волшебных колец.


package Magic::Ring; # класс "Магическое Кольцо" sub new { # конструктор my ($class, $owner) = @_; # имя класса и значение атрибута $Magic::Ring::count++; # сосчитать новое Кольцо bless({owner => $owner}, $class); # "благословить" хэш } sub owner { # метод чтения и записи атрибута owner my $self = shift; # извлечь ссылку на объект $self->{owner} = shift if @_; # изменить значение атрибута return $self->{owner}; # вернуть значение атрибута } $Magic::Ring::count = 0; # атрибут класса: число Колец sub count { # метод класса return $Magic::Ring::count; } 1; # конец описания класса Magic::Ring


В программе, использующей класс Magic::Ring, создается набор объектов. При каждом обращении к конструктору увеличивается счетчик созданных магических колец $Magic::Ring::count.


package main; use Magic::Ring; # использовать класс "Магическое Кольцо" my @rings = (); for (1..3) { # "Три кольца - премудрым эльфам..." push @rings, new Magic::Ring('эльф'); } for (1..7) { # "Семь колец - пещерным гномам..." push @rings, new Magic::Ring('гном'); } for (1..9) { # "Девять - людям Средиземья..." push @rings, new Magic::Ring('человек'); } # "А Одно - всесильное - Властелину Мордора..." push @rings, new Magic::Ring('Саурон'); # Сколько всего было сделано колец? print Magic::Ring->count, "n"; # будет выведено: 20


В стандартную библиотеку модулей Perl входит модуль Class::Struct, который облегчает жизнь программистам по описанию классов, предоставляя для объявления класса функцию struct(). Эта функция генерирует описание класса в указанном пакете, включая методы для доступа к атрибутам класса. Причем помимо имени атрибута она позволяет задавать его тип с помощью разыменовывающего префикса: скаляр ($), массив (@), хэш (%), ссылка на подпрограмму (&) или объект. Насколько просто и удобно пользоваться функцией struct, можно судить по такому примеру:


use Class::Struct; # подключаем стандартный модуль # описываем класс Performer ("Исполнитель") struct Performer => { # атрибуты класса: name => '$', # "имя" - скаляр country => '$', # "страна" - скаляр artists => '%', # "артисты" - хэш }; my $performer = new Performer; # создаем исполнителя $performer->name('Pink Floyd'); # задаем значения атрибутов $performer->country('Great Britain'); # заполняем атрибут-хэш: $performer->artists('David Gilmour', 'гитары, вокал'); $performer->artists('Roger Waters', 'бас-гитара, вокал'); $performer->artists('Nick Mason', 'ударные'); $performer->artists('Richard Wright', 'клавишные'); # описываем класс Album ("Альбом") struct Album => { # атрибуты класса: title => '$', # "название" - скаляр year => '$', # "год выхода" - скаляр tracks => '@', # "композиции" - массив performer => 'Performer', # "исполнитель" - объект }; my $album = Album->new; # создаем альбом $album->title('Dark Side of the Moon'); $album->year(1973); # заполняем атрибут-массив: $album->tracks(0, 'Breathe'); $album->tracks(1, 'Time'); # и так далее... $album->performer($performer); # задаем атрибут-объект


Чтобы добавить к полученному описанию класса дополнительный метод, достаточно описать его в соответствующем пакете. Вот пример добавления метода Album::print и его использования в главной программе:


package Album; # переключаемся на нужный пакет sub Album::print { # и описываем дополнительный метод my $self = shift; printf("%s '%s' (%d)n", $self->performer->name, $self->title, $self->year); foreach my $artist (keys%{$self->performer->artists}) { printf("t%s - %sn", $artist, $self->performer->artists($artist)); } } package main; # переключаемся на основную программу $album->print; # и вызываем метод объекта


В заключение рассмотрим несколько распространенных приемов для работы с классами и объектами.

Функции bless() не обязательно передавать имя класса: если второго аргумента нет, она помечает объект ссылки именем текущего пакета. Поскольку bless() возвращает значение своего первого аргумента, а подпрограмма возвращает последнее вычисленное значение, то минимальный конструктор может выглядеть так:


sub new { # конструктор экземпляров класса my $self = {}; # контейнер для атрибутов объекта bless($self); # "благословить" объект ссылки } # и вернуть ссылку (1-й аргумент bless)


При создании объекта удобно сразу задавать начальные значения его атрибутов, передавая аргументы конструктору. Если для инициализации атрибутов использовать хэш, то атрибуты можно задавать в любом порядке, а в конструкторе можно определить значения по умолчанию для незаданных атрибутов. Например, так:


my $language = Programming::Language->new( NAME => 'Perl', # имя VERSION => '5.8.7', # версия AUTHOR = 'Larry Wall' # автор );


Весьма полезно иметь в классе метод, который преобразовывает значения атрибутов объекта в строку. Такой метод обычно называется as_string() или to_string() и может применяться для отладочной печати состояния объекта. А если его определить в классе-"прародителе", то его можно будет применять к объектам всех унаследованных классов. Если использовать анонимный хэш для хранения значений атрибутов, то такой метод может выглядеть так:


sub to_string { # преобразование значений атрибутов в строку my $self = shift; my $string = '{ '; foreach (keys %{$self}) { $string .= "$_: '$self->{$_}' "; } $string .= '}'; return $string; }


Благодаря тому, что Perl - это динамический язык, в нем легко создать класс, в котором свойства объектов добавляются во время выполнения программы. Для этого в классе описываются универсальные методы для работы со свойствами объекта, а затем в ходе выполнения задаются нужные свойства. Например, так:


package Human; # класс "Человек" our @ISA = qw(Person); # это подкласс класса Person use Person; sub set { # универсальный метод изменения атрибутов объекта my ($self, $name, $new_value) = @_; my $old_value = $self->{$name}; $self->{$name} = $new_value; return $old_value; } sub get { # универсальный метод доступа к атрибутам объекта my ($self, $name) = @_; return $self->{$name}; } 1; package main; # главная программа use Human; # подключить класс my $hero = Human->new; # создать героя-человека $hero->set ('имя', 'Арагорн'); # дать ему имя $hero->set ('оружие', 'меч'); # и вооружить


В этой лекции мы научились работать с объектами. Объектный подход реализован в Perl весьма своеобразно, но понятно и эффективно. Использование этой технологии дает программисту возможность создавать приложения, соответствующие современным требованиям. А сочетание объектного программирования с динамической природой языка позволяет реализовывать оригинальные и эффективные решения.

Лекция 15. Работа с базами данных

В этой лекции разговор пойдет о программировании баз данных на языке Perl и о средствах взаимодействия с системами управления базами данных, которые имеются в Perl. Основное внимание будет уделено DBI - универсальному интерфейсу доступа к базам данных.

Цель лекции: узнать о средствах работы с базами данных в Perl и научиться применять их в своих программах для доступа к разным типам баз данных - от автономных таблиц до серверов баз данных.

Давно прошли те времена, когда информация хранилась только в простых "плоских" файлах (flat files) в двоичном и текстовом виде. Эволюция систем обработки данных привела к появлению многочисленных баз данных (БД), хранящих информацию в собственных форматах. Основное отличие базы данных от обычного файла с данными заключается в том, что база данных, помимо пользовательской информации, также содержит метаданные, описывающие хранимые в ней сведения. Для работы с большими объемами информации были созданы системы управления базами данных (СУБД), которые теперь работают на серверах баз данных, в настольных и переносных компьютерах - от ноутбуков до карманных компьютеров. Сейчас в большинстве СУБД используются реляционные базы данных, состоящие из таблиц с фиксированным набором колонок (столбцов) и переменным числом строк (записей). Для манипулирования информацией в реляционных базах данных применяется структурированный язык запросов SQL (Structured Query Language). SQL является международным стандартом и поддерживается в большем или меньшем объеме всеми производителями СУБД. Но в последнее время с ними все больше конкурируют объектно-ориентированные и документальные базы данных (например, хранящие информацию в формате XML). Естественно, любая современная система программирования не может обойтись без средств доступа к базам данных. В Perl есть несколько способов работы с базами данных, и мы рассмотрим основные из них: ассоциативные массивы, таблицы-объекты и реляционные базы данных. Примеры работы с базами данных будут основаны на информации о моллюсках, производящих жемчужины (перлы). Каждая запись базы данных будет содержать такие сведения:

1 ... 40 41 42 43 44 ... 55 ВПЕРЕД
Перейти на страницу:
Комментариев (0)