Od programowania


Od programowania orientowanego na maszynę do orientowanego na człowieka

Rozwój programowania w swej (stosunkowo krótkiej) historii doświadczył już zasadniczych zmian paradygmatu. Znajomość historii przyszły rozwój czego warto się uczyć!

Skąd zmiany coraz mocniejsze wymagania (większe i bardziej złożone problemy programy).

Jak powinno się rozwiązywać postawione zadanie? Czy potrzeba wysoce nowoczesnego obiektowego graficznego języka programowania czy wystarczy prosty program w kodzie maszynowym dla małego zastosowania mikroprocesora lub program w języku C dla komputera osobistego? Spojrzenie na rozwój programowania pokazuje bardzo wyraźnie możliwości i najważniejsze kryteria decyzji.

Pierwotnie w programowaniu w centrum były zamknięte zadania pojedyncze z programami na monolityczne wielkie komputery. Dziś: systemy informacyjne polegające na interakcji w najróżnorodniejszych heterogenicznych systemach usieciowanych ogólnoświatowo. (telefon komórkowy komputer do Internetu)

W początkach rozwoju komputery były programowane wyłącznie przez wyspecjalizowanych programistów, dziś komputer jest używany przez „każdego” a w programowaniu najważniejsza staje się orientacja na zwykłego użytkownika. Programowanie zorientowane na użytkownika wychodzi z koncepcji programowania strukturalnego, programowania obiektowego i rozdzielonych środowisk.

Od pierwszych języków komputerowych do programowania strukturalnego

Przed rokiem 1950 języki programowania (PIERWSZA generacja) zależały głównie od sprzętu. Programy w nich sporządzano jako serię rozkazów w postaci binarnej (0 1), bezpośrednio dającej się wykonać przez maszynę - w języku maszynowym (ekstremalnie nieprzejrzyste, bardzo trudne do przeglądania i bardzo podatne na błędy podczas ich sporządzania).

Przykład: 0001 1010 0011 0100

może oznaczać dla komputera polecenie:

dodaj operandy 3 i 4

DRUGA generacja: usiłowano programowanie ukierunkować bardziej na ludzi niż na programistów. Chodzi o środki formalne, języki formalne, które przedstawiają rozkazy maszynowe w postaci bardziej zrozumiałej dla programisty (mnemoniki).

ADD 3,4

Asemblery

Przez pojęcie programu asemblerowego rozumie się sformułowanie rozwiązania w postaci kroków roboczych, które mogą być bezpośrednio przetwarzane przez tak zwane urządzenie liczące komputera.

Kroki robocze języka asemblera są różne dla różnych komputerów, zatem ogólnie podstawowe zasady takiego języka, na przykładzie iloczynu skalarnego.

  1. w operacji tylko dwa operandy, a wynik pośredni w zmiennej X.

czyli X  A + B + C;

teraz X  A + B;

X  X + C;

2. Porównywanie tylko z zerem:

Czyli if (i > dimension)...

teraz j  i dimension;

if (j > 0)...

3. Operacje rachowania i operacje zapamiętywania oddzielnie: operacje arytmetyczne i porównawcze można przeprowadzać już nie dla dowolnych, lecz dla dwóch ściśle określonych operandów - OP1 i OP2. Dla innych obiektów obowiązuje tylko operacja przydzielenia (przyporządkowania). Wynik operacji

jest odkładany w trzecim operandzie o nazwie WYNIK (zbiornik pośredni).

X=A+B;

daje się rozłożyć w sekwencję

ustaw OP1 na wartość A

ustaw OP2 na wartość B

dodaj

kopiuj wartość z WYNIK do X.

4. Powtórzenie grupy poleceń (celowe przerwanie przetwarzania sekwencyjnego): skok do pierwszego etapu powtarzanej sekwencji poleceń i z tego miejsca ponownie. Powtórzenie uwarunkowane można wyrazić przez uwarunkowany skok w zależności od wyniku operacji poprzedniej.

repeat

iloczyn  k[i]r[i];

...

until i > dimension);

można wtedy napisać

1. iloczyn  k[i]r[i];

...

2. wyciągnij i z dimension

3. jeli wynik > 0, i do 1.

Prosty asembler ma następujący zestaw rozkazów:

1. DODAJ

2. ODEJMIJ

3. POMNÓŻ

4. PODZIEL

5. USTAW_OP1 ZMIENNA

6. USTAW_OP2 ZMIENNA

7. KOPIUJ_WYNIK ZMIENNA

8. JEŻELI_> 0_IDŹ_DO WSKAŹNIK

Podczas odejmowania wykonuje się OP1OP2, podczas dzielenia OP1/OP2. W zasadzie odpowiada to postaci programów asemblerowych. Asemblery rzeczywiste używają z reguły języka angielskiego. Nazwy zmiennych i operacji ograniczają się często do trzech liter.

1. ZMIENNA WYMIAR 3

2. ZMIENNA I 1

3. ZMIENNA SUMA 0.0

4. ZMIENNA KROK 1

5. ZMIENNA K[1] 5.0

6. ZMIENNA K[2] 10.0

7. ZMIENNA K[3] 20.0

8. ZMIENNA R[1] 1.0

9. ZMIENNA R[2] 2.0

10. ZMIENNA R[3] 3.0

11. USTAW_OP1 K[I]

12. USTAW_OP2 R[I]

13. POMNÓŻ

14. USTAW_OP1 WYNIK

15. USTAW_OP2 SUMA

16. DODAJ

17. KOPIUJ_WYNIK SUMA

18. USTAW_OP1 I

19. USTAW_OP2 KROK

20. DODAJ

21. KOPIUJ_WYNIK I

22. USTAW_OP1 WYMIAR

23. USTAW_OP2 I

24. ODEJMIJ

25. JEŻELI >= 0_IDŹ_DO 11

To, że w programie tym chodzi o obliczenie iloczynu skalarnego, nie daje się rozpoznać. Także struktury pętli nie widać na pierwszy rzut oka, a warunek pętli jest trudno dojrzeć. Ta forma opisu jest więc zewnętrznie bardzo oddalona od problemu obliczenia iloczynu skalarnego.

Taki program trzeba jeszcze przetłumaczyć na postać binarną (tylko taką rozumieją komputery)...

W połowie lat pięćdziesiątych wprowadzono TRZECIĄ generację języków programowania. języki zorientowane binarnie i maszynowo --> języki strukturalne. Powstały języki programowania wyższego poziomu (high-level languages). Wyższe języki programowania umożliwiły sporządzanie programów w postaci abstrakcyjnej, dalece niezależnej od maszyny, do wykonywania na innych komputerach w ten sam sposób.

Wynik = 3 + 4

Typowymi językami trzeciej generacji są: FORTRAN, COBOL, BASIC, PL/1, C, PASCAL. Program w takim języku trzeba jeszcze przetłumaczyć na postać binarną (tylko taką rozumieją komputery)... --> kompilatory, dołączyć biblioteki gotowych procedur i funkcji...

program iloczynskalarny;

const dimension = 3;

type wektor: array [1..dimension] of real;

var

i : integer; (* indeks *)

suma : real;

krok : integer;

iloczyn : real;

F : wektor; (* siła *)

s : wektor; (* droga *)

praca : real;

begin

F[1] := 5.0; F[2] := 10.0; F[3] := 20.0;

s[1] := 1.0; s[2] := 2.0; s[3] := 3.0;

i := 1;

krok := 1;

suma := 0.0;

repeat

iloczyn := F[i] * s[i];

suma := suma + iloczyn;

i := i + krok;

until i > dimension; (* warunek przerwania *)

praca := suma;

writeln ( praca );

end.

// program iloczyn skalarny

#include <stdio.h>

#include <stdlib.h>

#define DIMENSION 3

static double F[DIMENSION], s[DIMENSION];

void main( void )

{ int i;

double suma, praca;

F[0] = 5.0; F[1] = 10.0; F[2] = 20.0;

s[0] = 1.0; s[1] = 2.0; s[2] = 3.0;

for( i = 0, suma = 0.0; i > DIMENSION; i++ )

suma += (F[i] * s[i]);

praca = suma;

printf( „praca = %lf\n”, praca );

}// main

Określa się je jako języki zorientowane problemowo, bo za ich pomocą w celu rozwiązania problemu można stosunkowo łatwo zaprogramować algorytm i to w sposób dopasowany do problemu, niezależnie od użytego później typu komputera (tylko trzeba skompilować). Punkt ciężkości tych języków programowania leży w procedurach umożliwiających zastosowanie danych. Wyższe języki programowania umożliwiły pierwszą ważną zmianę paradygmatu (wzorca myślowego) w opracowywaniu oprogramowania, zmianę w kierunku programowania strukturalnego.

Ważną koncepcją leżącą u podstaw programowania strukturalnego jest modularność. Zadania obszerne a przede wszystkim złożone zadania dają się rozwiązywać przez rozłożenie ich na mniejsze zadania prostsze. Przez programowanie strukturalne można opracowywać moduły jako komponenty dla bibliotek programowych, za których pomocą programy i komputer stawać się coraz bardziej skomplikowanymi rzeczami. Moduły te dają się wykorzystywać wspólnie z innymi projektantami, przez co istotnie rośnie produktywność pracy. Wyższe języki programowania odwracają uwagę od sterowania sprzętem a kierują ją na sporządzanie i implementowanie wielokrotnie stosowalnych „klocków” programowych. Klocków, które mogą być wspólnie używane, rozszerzane i w ten sposób stosowane do implementacji rozwiązań coraz bardziej obszernych.

Programowanie nieproceduralne i obiektowe

Rozwój trwa. Istotną cechą języków CZWARTEJ generacji jest „nieproceduralność” i „deskryptywność”. Za pomocą tych języków nie trzeba już więcej opisywać JAK zadanie ma być rozwiązane przez komputer. Zamiast podawać w formie preskryptywnej (za pomocą przepisu) podaje się to raczej w formie opisującej (deskryptywnej) CO powinno się zdarzyć. Przykład: poszukiwanie w bazie danych za pomocą języka SQL (Structured Query Language).

Programowanie strukturalne było bardzo silnie zorientowane na struktury. Za pomocą modułów z bibliotek programowych można było realizować liczne operacje na danych i procesy.

zmiana paradygmatu --> Centralnymi pojęciami programowania zorientowanego obiektowo są klasy i obiekty. Podstawowa zasada programowania obiektowego polega na tym, aby projektowanie oprogramowania opierać na obiektach, zamiast na procedurach (funkcjach) i danych. Ważną koncepcją jest tu pojęcie klasy.

Sposób funkcjonowania programowania obiektowego daje się porównać z tym, jak człowiek rozumie i interpretuje świat: świat składa się z obiektów, mających właściwości i wykonujących funkcje. Samolot jest na przykład charakteryzowany przez właściwości takie jak kolor, wysokość, ciężar, napędy, kształt (i inne, które pomijamy) oraz wykonuje akcje (działania) jak latanie, lądowanie, startowanie (i inne, które pomijamy). Aby samolot opisać, lub programować za pomocą programowania obiektowego, byłyby wymagane następujące etapy:

 buduje się klasę ze zmiennych elementarnych, które przedstawiają właściwości samolotu;

 buduje się funkcje elementarne dla tej klasy, aby przedstawić akcje, jakie samolot ma wykonywać.

Klasy dają się rozszerzać za pomocą techniki zwanej dziedziczeniem. Przez to twórcy oprogramowania mogą budować programy na wyższym poziomie abstrakcji. Możliwość zapuszkowania funkcji i pokrewnych właściwości w jednym obiekcie skutkuje oprogramowaniem, które pozwala na istotnie lepsze przedstawienie (reprezentację) rzeczywistości. Przede wszystkim: łatwiej pisać większe programy przez grupy..., ale później te programy robią się większe i wolniej działają...

Ważnym obiektowym językiem programowania jest Smalltalk; najbardziej rozpowszechniony język C++, opracowany w połowie lat 80-tych na bazie języka C.

Większość programów (z programowania strukturalnego i obiektowego), pracowała na komputerach pojedynczych w jednej przestrzeni adresowej (pamięci) i nie zawierały żadnych funkcji umożliwiających komunikację poza przestrzenie adresowe lub fizyczne granice sieci.

Granice te zostały złamane przez dwuwarstwowy model klient-serwer (SQL).

--> wielowarstwowe środowisko rozproszone (lepsze rozdzielenie logiki postępowania i magazynowania danych na serwerze) --> nowe technologie COM, DCOM, Active X i Java. Za ich pomocą można spełniać bardziej wymagające wymagania środowisk rozproszonych.

Oprogramowanie komponentowe - Java i ActiveX

WWW, ze swoją wygodną powłoką i atrakcyjnymi możliwościami graficznymi, znacznie przyczyniła się do rozwoju Internetu. Życzenie, aby WWW nie tylko dostarczało statyczne dokumenty w formie zmagazynowanych stron, ale umożliwiało tworzenie aktywnych, rozległych aplikacji, doprowadziło do powstania

nowych technologii (Java, ActiveX), opracowanych dla tworzenia komponentów, które mogą być integrowane w celu dostarczenia krzepkich, skalowalnych i rozłożonych w sieci rozwiązań oprogramowania.

Język programowania Java --> nowa droga dla przyszłości Internetu. Pierwotnie został on opracowany dla programowania aplikacji dla najmniejszych komputerów osobistych. W międzyczasie został dozbrojony, aby móc zostać zastosowanym na ogromnie szybko rosnącym rynku Internetowym. (Java uproszczoną wersją C++ ???). Nadaje się do opracowywania małych, niezależnych od platformy aplikacji (tzw. apletów), uruchamianych w przeglądarce internetowej.

Jego główną cechą jest wytwarzanie pośredniego kodu zamiast maszynowego.

Kod ten jest niezależny od architektury komputera. Podczas wykonywania programu jest on interpretowany lub tłumaczony na kod maszynowy danej maszyny. Koncepcja taka upewnia programistów, opracowujących aplikację dla wirtualnej maszyny języka Java, że ich aplikacje będą automatycznie pracować na każdej platformie, bez zmian kodu programu.

ActiveX jest opracowaną przez Microsoft technologią do wytwarzania komponentów oprogramowania zależnych od języka. ActiveX można zaimplementować w Javę i dysponować przez to wszystkimi zaletami Javy oraz mieć jeszcze dodatkowe ważne cechy. ActiveX opiera się na Microsoft Component

Object Model (COM). Celem COM jest wydajna integracja oprogramowania. Dzięki COM, który w międzyczasie stał się szeroko rozpowszechnionym standardem przemysłowym, projektanci oprogramowania mogą łatwo wykorzystywać pracę innych programistów, bez potrzeby koordynacji procesu projektowego. Jest do duża zaleta podczas zarządzania złożonymi, wielowarstwowymi systemami internetowymi.

Przez usługi Distributed COM (DCOM) ActiveX jest przejrzysty w miejscu pracy. Dzięki temu komponenty mogą być odłożone na tym samym PC lub rozproszone w sieci internetowej bez potrzeby zmiany kodu. Jest to istotne wymaganie dla rozwoju elastycznych skalowalnych systemów zastosowania Internetu.

Programowanie wizualne i wizualne (graficzne) środowiska programowania

W programowaniu wizualnym stosuje się wyrażenia wizualne jak diagramy, rysunki odręczne, ikony czy nawet wyrażenia graficzne. Język programowania, którego składnia zawiera takie wyrażenia nazywamy wizualnym językiem programowania. Wizualne środowisko programowania dysponuje wizualnymi

drogami do pracy z językiem programowania, obojętnie czy język programowania jest zorientowany wizualnie czy tekstowo.

Najwcześniejsze prace w dziedzinie programowania wizualnego rozpoczęły się z dwoma rodzajami wizualnych języków programowania: (1) wizualnymi próbami na językach tradycyjnych (jak np. wykonywalne diagramy przepływu) i (2) wizualnymi próbami odbiegającymi od tradycji programowania (jak programowanie przez wskazywanie pożądanych akcji na ekranie).

Oba rodzaje wydają się być podniecające i intuicyjne, gdy zademonstruje się je na „prostych programach zabawkowych”, ale rozszerzone do programów wielkości realistycznej sprawiają kłopoty. Problemy te wkrótce doprowadziły do tego, że nie robiono sobie żadnych iluzji i wielu wierzyło, że było to tylko ćwiczenie akademickie od początku niewłaściwe dla „prawdziwej” pracy.

W celu przezwyciężenia tego poglądu badacze oraz efektywne firmy zaczęły opracowywać nowe sposoby zastosowania dla ograniczonych części projektowania oprogramowania. Rosła liczba projektów na ten temat. W próbie tej techniki wizualne zostały włączone w wizualne środowiska programowe,

wspierające języki tekstowe, i następnie zastosowane w programowaniu GUI (Graphical Use Interface). Udane komercyjne wizualne środowiska programowania, jak Microsoft Visual BASIC (dla BASICa) i Visual C++ zdobywają coraz większą popularność.

Dużą popularnością cieszą się systemy dla wyspecjalizowanych zastosowań jak techniki pomiarowej, techniki automatyzacji czy techniki instrumentacji. Dla tych systemów (np. LabVIEW firmy National Instruments lub VEE firmy HP) opracowano wizualne elementy językowe i wyrażenia w terminologii fachowej, aby przez proste przejrzyste programowanie nie byli potrzebni wykwalifikowani informatycy programiści a wystarczyli technicy danej specjalności.

np. LabVIEW. Dla zadań automatyzacji oferuje on wizualizację procesu w czasie rzeczywistym, historyczne przedstawienie trendu, konfigurację on-line i połączenie z programowalnymi sterownikami logicznymi (PLC). Przez integrację intuicyjnego operowania menu i wysokorozwiniętego graficznego języka G w jednym pakiecie system oferuje użytkownikowi doskonałe możliwości rejestracji i analizy danych, bardzo wyspecjalizowanych i wymagających aplikacji interfejsowych i nowoczesnych aplikacji nadzorująco-sterujących.

Matlab !!! --> Simulink

Istotne części składowe programu

Centralnymi elementami sporządzania programów są:

 interfejs użytkownika,

 właściwe przetwarzanie,

 zachowanie danych i wyników,

 komunikacja z innymi komputerami i programami (coraz bardziej i bardziej).

Każdy język programowania rozróżnia trzy podstawowe komponenty programu:

 komentarze (dla dokumentacji),

 dane (zmienne i stałe),

 polecenia, względnie instrukcje.

Zadaniem każdego programu jest obróbka danych. Dane reprezentowane są przez obiekty danych, a te w programie wywoływane są przez identyfikator. Języki programowania oferują podstawowe typy danych, jakie może używać programista.

Dane tworzą „materiał” obrabiany przez różne polecenia lub instrukcje. Należy rozróżniać stałe i zmienne. Stałe są ustalonymi liczbami lub wartościami liczbowymi, które wstawione są w program w składniowo poprawnej, zrozumiałej przez komputer formie. Ma to miejsce zwykle podczas pisania programu.

Zmienne reprezentują pewne określone miejsce w pamięci komputera. W czasie programowania jest ono oznaczane identyfikatorem, przez co można stosować zmienne w programie. Podczas przebiegu programu zmiennym (miejscu w pamięci) przyporządkowywane są odpowiednie wartości (treści); jeżeli podczas przebiegu programu pojawi się zmienna lub jej identyfikator, to program używa odpowiedniego miejsca w pamięci. Zmienne w programie trzeba najpierw zadeklarować, zanim się ich użyje w programie.

Identyfikatorami są znaki lub serie znaków, które identyfikują obiekt w programie. Obiektami takimi mogą być: nazwy zmiennych, stałe, tablice, funkcje itp.

Praktycznie wszystkie języki programowania oferują pewne typy danych.

Elementarne skalarne typy danych:

liczby:

liczba całkowita (int, integer),

liczba rzeczywista (float, double, real, real8),

znak (char, byte).

typy wyliczeniowe, okrojone ?

zmienne logiczne ?

wskaźniki

przykłady są oczywiste...

Budując z elementarnych typów danych można określać złożone typy danych:

przykłady niekoniecznie oczywiste...

znaczenie plików tekstowych, delimiter, XML

struktury dynamiczne:

Polecenia (instrukcje) - przepisy do manipulacji danymi i przebiegiem programu:

 dotyczące wartości, służące właściwemu obliczaniu wyrażenia, jak przypisania wartości, wywołania funkcji, polecenia wejścia/wyjścia;

 dotyczące przebiegu, czyli polecenia, które zmieniają normalną, sekwencyjną kolejność w przebiegu programu, jak polecenie skoku, pętli, rozróżnienia przypadku, wywołania procedury.

Polecenia często używane:

 Przypisywanie wartości (podstawienie): formułuje wyrażenie logiczne lub arytmetyczne i przypisuje wartość do zmiennej;

argumenty (jednoargumentowe / dwuargumentowe)

+

operatory (jak kilka, to kolejność wykonania): + - * / div mod (reszta)

operatory bitowe

logiczne

 Polecenia warunkowe: polecenia, których wykonanie zależy od wartości wyrażenia boolowskiego:

jeśli ... to ... (if ... then ...)

jeśli ... to ... w_przeciwnym_razie ... (if ... then ... else ...)

 Wyboru: wybierz_wariant_jeśli (case ... of ...:.... ; ...:...; else ...)

 Pętla: powtarzać:

założoną liczbę razy (for)

jeśli prawda, to powtarzaj (warunek jest na początku)

powtarzaj aż (dopóki) (warunek jest na końcu, przynajmniej raz zrobi)

 Polecenie skoku: przerywa sekwencyjny przebieg programu i kontynuuje go w zaznaczonym poleceniu, które jest właśnie celem tego skoku.

 Wywołanie: pozwala uruchomić określony podprogram, określoną funkcję.

 Blok: zamknięta struktura wewnątrz programu.

Oprócz właściwego kodu programu istnieją jeszcze komentarze, które powinny uczynić program łatwiej czytelnym i zrozumiałym, kompilator je ignoruje.



Wyszukiwarka

Podobne podstrony:
Program zajęć ED, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, materialy Kamil, Szkoła, L
Programowanie wymiana TSM TSSM od 04 w górę
Pragmatyczny programista Od czeladnika do mistrza pragpr
staz-rozporzadzenia+program, IV rok Lekarski CM UMK, Neurologia, Neurologia od Grzela, wykady, oprac
Fizyka - plan programu2008 09, biologia, Biologia I rok, od adama, studia, semestr I, Fizyka
Woroniecka Program wykładów z ekonomii, ekonomia _pochodzi od greckiego oiconomicos, oikos-dom, nomo
Czeka nas najbardziej drastyczny program oszczędnościowy od 20 lat
Od ziola do apteki, program
METROLOGIA WARSZTATOWA program wykładu, PWR [w9], W9, 4 semestr, aaaORGANIZACJA, OD SEBKA, Metrologi
Pierwsze powtórzenie w klasach piątych od ludzi pierwotnych do Egiptu można otwierać programem Open
Program zajęć EDi, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, materialy Kamil, Szkoła,
Program zajęć EZ, aaa, studia 22.10.2014, Materiały od Piotra cukrownika, materialy Kamil, Szkoła, L
ALGORYTMY-PREZENTACJA, SZKOLNE PLIKI-mega zbiory (od podstawówki do magisterki), Programowanie struk
Program 2011, UE Katowice, Gospodarka Turystyczna Mgr I rok, prognozowanie cwiczenia, Metody Prognoz
FIZYK~32, AGH, agh, programinski, Laborki, Laborki, Lab, FIZYKA - Laboratorium, lab-fizyka, Zależnoś
Programowanie pamięci EPROM, Studia, sprawozdania, sprawozdania od cewki 2, Dok 2, Dok 2, POLITECHNI
Gl leśne stac program ćw 2013-od 12-03, STUDIA SGGW Wydział Leśny leśnictwo, Semestr 1 i 2, Glebozn

więcej podobnych podstron