1. Eelanalüüs. Описание потребностей и их анализ 2. Tehniline ja visuaalne disain. Дизайн программного продукта 3. Arendus. Разработка 4. Testmine. Проверка 5. Juurutamine. Выпуск и внедрение продукта 6. Hooldus. Обслуживание продукта
Tarkvara elutsüki mudelid
Waterfall (kaskaad)
Iteratiivsed
Spiraalsed
inkrementaalsed
Agile (agiilne)
Testimine
Valge kast – Белый ящик. Тестировщик знает, как работает программа и какие функции выполняет каждый ее блок.
Must kast – Черный ящик. Проверка, при которой тестировщик не имеет доступа к коду. Он, как реальный клиент или пользователь, оценивает функции и работу программы, ориентируясь исключительно на интерфейс взаимодействия.
Hall kast – Серый ящик. Тестировщик может видеть часть кода или иметь доступ к внутренним настройкам продукта, недоступным обычному пользователю.
Vead ja erandid
Loogikavead – Логические ошибки
Süntaksivead – Ошибки синтаксиса
Erandid – Исключения
Vigade liigitamine programmi töötlemise etappide kaupa
Kompileerimisvead – Ошибки компиляции Ошибки которые можно исправить до запуска программы, ошибки, которые обнаруживает компилятор вместо программиста.
Paigutusvead – Ошибки компоновки
Toimimisvead – Ошибки выполнения
Põhilised programmeerimismudelid
Imperative programming Imperative programming is a paradigm where you explicitly state how the program should achieve the desired result. You write step-by-step instructions for the computer to follow. This paradigm is closer to the machine’s way of thinking and requires a clear understanding of the system’s internals.
Declarative programming Declarative programming is a high-level programming concept, which is the opposite of imperative programming. It is a programming approach in which coders write code that describes what they want to do and what results they want to achieve, rather than how they will achieve the results.
Structural programming Structured programming encourages dividing an application program into a hierarchy of modules or autonomous elements, which, in turn, may contain other such elements. Within each element, code may be further structured using blocks of related logic designed to improve readability and maintainability.
Functional programming Functional Programming (FP) is a style of programming which models computations as the evaluation of expressions. In functional programming, functions are first-class entities, meaning they can be passed as arguments to other functions, returned as values from other functions, and even assigned to variables.
Logic programming What is logic programming? Logic programming expresses and manipulates logic-based relationships and rules in a declarative manner. Logic programs, driven solely by data, utilize logical statements known as predicates, which are either facts or rules.
Object Oriented Programming OOP OOP is based on the idea of classes and objects. It organizes a computer program into basic, reusable blueprints of code or “classes.” These classes are then used and reused to create new and unique objects with similar functions.
Component Orientented programming It’s known as component-oriented programming, and it’s all about stitching reusable components together like Lego blocks. At its core, component-oriented architecture embraces the Don’t Repeat Yourself (DRY) dogma. Repeating code is time and efficiency wasted.
Prototype-based programming Prototype-based programming is a style of object-oriented programming in which classes are not explicitly defined. Inheritance is performed by reusing existing objects that serve as prototypes (objects inherit from other objects through a prototype property).
1. Teema Lineaarsed programmid
Algoritm
An algorithm is a procedure used for solving a problem or performing a computation. Algorithms act as an exact list of instructions that conduct specified actions step by step in either hardware- or software-based routines.
Algoritmide põhiomadused:
diskreetsus – osadeks jagatud
selgus(kindlus) lõplik sammude kogus
ühesus – ühesuguste lähteandmete korral peab algoritmi täitmine viima ühesugustele lõpptulemustele. Algoritmi täitmise tulemus ei tohi sõltuda täitjast
universaalsus – algoritm peab olema mõeldud kõikide antud
lõplikkus – lõpliku arvu sammude järel peab algoritm viima lõpptulemusele
korrektsus
Algoritmide tüübid
Lineaarne algoritm – algoritmi sammude täitmise järjekord ei sõltu vahetulemustest
Hargnev algoritm – sammude täitmise järjekord sõltub mingist tingimusest või vahetulemusest
Tsükliline algoritm – algoritmi mingit osa täidetakse korduvalt
Plokkskeem – algoritmi graafiline kujutamine plokkide ja neid ühendavate noolte abil.
2. Teema Valikud (If, elif, else)
1. Mis on tingimuslaused?
Tingimuslaused võimaldavad programmil teha otsuseid, kontrollides, kas mingi tingimus on tõene (True) või väär (False). Selle põhjal tehakse erinevaid tegevusi.
2. Süntaks:
if tingimus:
# kood, mida käivitatakse, kui tingimus on tõene
elif teine_tingimus:
# kood, mida käivitatakse, kui eelmine tingimus oli väär, aga see on tõene
else:
# kood, mida käivitatakse, kui ükski eelnev tingimus ei olnud tõene
Tähtsad punktid:
if – alustab tingimuskontrolli.
elif – täiendav kontroll juhul, kui eelmine ei kehti.
else – käivitub ainult siis, kui ükski eelnev tingimus ei olnud tõene.
Tühikute (taandude) järgimine on Pythonis väga oluline.
age = 18
if age < 13:
print("Sa oled laps.")
elif age < 18:
print("Sa oled teismeline.")
else:
print("Sa oled täiskasvanu.")
Sa oled täiskasvanu.
3. Teema Kordused
Kordused (ehk tsüklid) võimaldavad käivitada sama koodi mitu korda. Pythonis kasutatakse kahte peamist korduse tüüpi:
for-tsükkel – kasutatakse kindla arv kordi kordamiseks või näiteks loendite/lugude läbimiseks.
while-tsükkel – kordab koodi seni, kuni mingi tingimus on tõene.
for muutuja in järjend:
# korduv tegevus
for i in range(1, 6):
print(i)
while tingimus:
# korduv tegevus
i = 1
while i <= 5:
print(i)
i += 1
Tähtsad märksõnad:
break – katkestab tsükli.
continue – jätkab järgmise kordusega, jättes ülejäänud koodi vahele.
range() – kasutatakse for-tsüklis arvude loomiseks.
nimed = ["Anna", "Karl", "Mati"]
for nimi in nimed:
print("Tere, " + nimi + "!")
Arv on: 1
Arv on: 2
Arv on: 3
4. Listid
List ehk loend on andmetüüp, mis võimaldab hoida mitut väärtust ühes muutujas. Listid on järjestatud ja muudetavad kogumid, mis võivad sisaldada erinevat tüüpi elemente (numbrid, stringid, jne).
Returns True if all characters in the string are upper case
6. Sõnastikud
Sõnastik on andmetüüp, mis sisaldab võtme-väärtuse paare. Iga element sõnastikus koosneb võtmest ja sellele vastavast väärtusest. Sõnastiku elemendid ei ole järjekorras (kui ei kasutata orderrendi Python versioonis 3.7 ja uuemates).
Sõnastikku luuakse kõverate sulgudega {}, kus iga element on vormis võti: väärtus.
nimi = minu_sonastik["nimi"]
print(nimi) # Väljund: Jüri
minu_sonastik["vanus"] = 31
minu_sonastik["linn"] = "Tallinn"
del minu_sonastik["töö"]
if "nimi" in minu_sonastik:
print("Nimi on olemas!")
isik = {
"nimi": "Jüri",
"vanus": 30,
"linn": "Tallinn"
}
print(isik["nimi"]) # Väljund: Jüri
7. Failidega töö
Failide avamine ja lugemine
Pythonis saab faile avada ja lugeda, kasutades open() funktsiooni. Faili avamisel on võimalik määrata erinevad režiimid, näiteks lugemiseks, kirjutamiseks või lisamiseks.
Faili avamise režiimid:
"r" – avab faili lugemiseks (fail peab olemas olema).
"w" – avab faili kirjutamiseks (kui fail ei eksisteeri, siis luuakse uus, olemasolev fail aga kustutatakse).
"a" – avab faili lisamiseks (kui fail ei eksisteeri, siis luuakse uus).
"rb" – avab faili lugemiseks binaarses režiimis.
"wb" – avab faili kirjutamiseks binaarses režiimis.
Funktsioonid failide töötamisega
read() – loeb kogu faili sisu.
readline() – loeb faili ühe rea korraga.
readlines() – loeb kõik read nimekirja kujul.
write() – kirjutab andmed faili.
writelines() – kirjutab mitmed read korraga faili.
Pärast faili töötlemist on oluline fail sulgeda, et kõik muudatused salvestatakse ja fail on korrektselt vabastatud.
fail.close()
with open("fail.txt", "r") as fail:
sisu = fail.read()
with open("näide.txt", "r") as fail:
sisu = fail.read()
print(sisu)
Faili kirjutamine
with open("uus_fail.txt", "w") as fail:
fail.write("Tere!\n")
fail.write("See on esimene rida.\n")
fail.write("See on teine rida.\n")
E-maili saatmine
Impordi e-posti moodulid
import smtplib
from email.message import EmailMessage
email_smtp = "smtp.gmail.com"
# set smtp server and port
server = smtplib.SMTP(email_smtp, '587')
# secure the SMTP connection
server.starttls()
E-kirja saatmine
sender_email_address = "your_email@gmail.com"
email_password = "your_email_password"
# login to email account
server.login(sender_email_address, email_password)
# send email
server.send_message(message)
# close connection to server
server.quit()
HTML-sisu saatmine e-postiga
message.set_content("""
<!DOCTYPE html>
<head>
</head>
<body>
<h1>Sending an HTML email from Python</h1>
<p>Hello there,</p>
<a href="https://inspirezone.tech/">Here's a link to an awesome dev
community!</a>
</body>
</html>
""", subtype="html")
On vaja kirjutada subtype=”html”
Pildi saatmine e-postiga manusena
Küsime kasutajalt faili laadima
from filedialog import *
fail = filedialog.askopenfilename(title="Vali fail", filetypes=[("All files", "*.*")])
with open(fail, "rb") as f:
fail_data = f.read()
import matplotlib.pyplot as plt
import numpy as np
# Loome andmed, mis jagunevad normaalselt
andmed = np.random.randn(1000)
# Loome histogrammi
plt.hist(andmed, bins=30, color='skyblue', edgecolor='black')
# Lisa pealkirjad
plt.title("Andmete jaotus")
plt.xlabel("Väärtused")
plt.ylabel("Sagedus")
# Näita graafikut
plt.show()
Punktdiagramm
import matplotlib.pyplot as plt
# Andmed
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
# Loome punktdiagrammi
plt.scatter(x, y, color='r')
# Lisa pealkirjad
plt.title("X ja Y seos")
plt.xlabel("X väärtus")
plt.ylabel("Y väärtus")
# Näita graafikut
plt.show()
numpy kasutamine
import numpy as np
import matplotlib.pyplot as plt
# Generate a range of numbers (x values)
x = np.linspace(-10, 10, 400) # Range from -10 to 10 with 400 points
# Apply the equation: y = 2x + 3
y = 2 * x + 3
# Create the plot
plt.plot(x, y, label="y = 2x + 3")
# Add labels and title
plt.title("Line Graph of y = 2x + 3")
plt.xlabel("x")
plt.ylabel("y")
# Show the legend
plt.legend()
# Display the plot
plt.grid(True) # Add grid for easier visualization
plt.show()
import tkinter as tk
# Loome akna
root = tk.Tk()
root.title("Tervitus Rakendus")
# Funktsioon, mis tervitab kasutajat
def tervita():
nimi = nimi_entry.get() # Saame kasutaja sisendi
tervitus_label.config(text=f"Tere, {nimi}!") # Kuvame tervituse
# Loome nime sisestamiseks tekstivälja
nimi_label = tk.Label(root, text="Sisesta oma nimi:")
nimi_label.pack()
nimi_entry = tk.Entry(root)
nimi_entry.pack()
# Loome nupu, mis käivitab tervitamise
tervitus_button = tk.Button(root, text="Tervita mind", command=tervita)
tervitus_button.pack()
# Loome tervituse kuvamiseks labeli
tervitus_label = tk.Label(root, text="")
tervitus_label.pack()
# Aknale ilmumine
root.mainloop()
9. OOP
Objektorienteeritud programmeerimine (OOP) on programmeerimisparadigma, mis põhineb objektide mõistel. Objektid on klasside eksemplarid ja need võivad sisaldada andmeid (atribuutide kujul) ja meetodeid (funktsioonid, mis töötlevad neid andmeid). OOP põhialused on klassid, objektid, pärimine, kapseldamine ja polümorfism.
Pythoni keeles on OOP tugevasti integreeritud ja seda saab rakendada klasside ja objektide abil.
Klassid ja Objektid
Klass (Class):
Klass on „plaan“ või „mall“ objektide loomiseks. Klass määratleb objektide omadused (atribuutide kaudu) ja käitumise (meetodite kaudu).
Objekt (Object):
Objekt on klassi eksemplar, mis sisaldab andmeid ja saab täita meetodeid. Objektil on kõik klassi omadused, kuid iga objekti andmed võivad olla erinevad.
Näide
class Auto:
# Konstruktor (init) määratleb objekti algse oleku
def __init__(self, mark, mudel, aasta):
self.mark = mark # Atribuut: auto mark
self.mudel = mudel # Atribuut: auto mudel
self.aasta = aasta # Atribuut: auto aasta
# Meetod: auto info kuvamine
def kuva_info(self):
return f"{self.mark} {self.mudel} ({self.aasta})"
# Loome objekti (auto)
minu_auto = Auto("Toyota", "Corolla", 2020)
# Kasutame objekti meetodit
print(minu_auto.kuva_info()) # Väljund: Toyota Corolla (2020)
__init__ on konstruktor, mis käivitub iga objekti loomisel ja määrab objekti algse oleku.
self viitab objekti endale, võimaldades meil ligipääsu objekti atribuutidele ja meetoditele.
kuva_info on meetod, mis kuvab objekti omadusi.
Pärimine (Inheritance)
Pärimine võimaldab ühel klassil (alamklassi) pärida omadused ja käitumise teisest klassist (pealklassist). See aitab koodis kordust vähendada ja loogikat jagada.
class Loom:
def __init__(self, nimi):
self.nimi = nimi
def hääle_tegija(self):
pass # Alamklasside jaoks, ei tee midagi siin
# Alamklass
class Kass(Loom):
def hääle_tegija(self):
return f"{self.nimi} ütleb 'Meow!'"
class Koer(Loom):
def hääle_tegija(self):
return f"{self.nimi} ütleb 'Woof!'"
# Loome objekte
kass = Kass("Mitsi")
koer = Koer("Rex")
# Kasutame alamklassi meetodit
print(kass.hääle_tegija()) # Väljund: Mitsi ütleb 'Meow!'
print(koer.hääle_tegija()) # Väljund: Rex ütleb 'Woof!'
Polümorfism (Polymorphism)
Polümorfism võimaldab eri klasside objektidel kasutada samu meetodeid, kuid nende käitumine võib olla erinev sõltuvalt objekti tüübist. Selleks, et polümorfism toimiks, peab meetod olema määratletud nii, et erinevad alamklassid võivad seda erinevalt rakendada.
class Loom:
def hääle_tegija(self):
raise NotImplementedError("See meetod peab olema alamklassis määratletud.")
class Kass(Loom):
def hääle_tegija(self):
return "Meow!"
class Koer(Loom):
def hääle_tegija(self):
return "Woof!"
# Loome objektid
loomad = [Kass(), Koer()]
# Polümorfism: kuigi loomade tüübid on erinevad, kutsume sama meetodi
for loom in loomad:
print(loom.hääle_tegija()) # Väljund: Meow! \n Woof!
Polümorfism tähendab, et erinevad klassid saavad kasutada sama meetodit hääle_tegija, kuid iga klassi puhul käitub see erinevalt.